Skip to content

Instantly share code, notes, and snippets.

@keqiang
Created April 10, 2018 14:01
Show Gist options
  • Save keqiang/ed74d690dfea9b53e9b480d6c860174e to your computer and use it in GitHub Desktop.
Save keqiang/ed74d690dfea9b53e9b480d6c860174e to your computer and use it in GitHub Desktop.
IGV Upload File
!function(root,factory){"function"==typeof define&&define.amd?define([],factory):"object"==typeof module&&module.exports?module.exports=factory():root.igv=factory()}(this,function(){function ZStream(){}function Inflate(){this.was=[0]}function InfBlocks(z,checkfn,w){this.hufts=new Int32Array(3*MANY),this.window=new Uint8Array(w),this.end=w,this.checkfn=checkfn,this.mode=IB_TYPE,this.reset(z,null),this.left=0,this.table=0,this.index=0,this.blens=null,this.bb=new Int32Array(1),this.tb=new Int32Array(1),this.codes=new InfCodes,this.last=0,this.bitk=0,this.bitb=0,this.read=0,this.write=0,this.check=0,this.inftree=new InfTree}function InfCodes(){}function InfTree(){}function inflate_trees_fixed(bl,bd,tl,td,z){return bl[0]=fixed_bl,bd[0]=fixed_bd,tl[0]=fixed_tl,td[0]=fixed_td,Z_OK}function arrayCopy(src,srcOffset,dest,destOffset,count){if(0!=count){if(!src)throw"Undef src";if(!dest)throw"Undef dest";0==srcOffset&&count==src.length?arrayCopy_fast(src,dest,destOffset):hasSubarray?arrayCopy_fast(src.subarray(srcOffset,srcOffset+count),dest,destOffset):1==src.BYTES_PER_ELEMENT&&count>100?arrayCopy_fast(new Uint8Array(src.buffer,src.byteOffset+srcOffset,count),dest,destOffset):arrayCopy_slow(src,srcOffset,dest,destOffset,count)}}function arrayCopy_slow(src,srcOffset,dest,destOffset,count){for(var i=0;i<count;++i)dest[destOffset+i]=src[srcOffset+i]}function arrayCopy_fast(src,dest,destOffset){dest.set(src,destOffset)}function jszlib_inflate_buffer(buffer,start,length,afterUncOffset){buffer=start?new Uint8Array(buffer,start,length):new Uint8Array(buffer);var z=new ZStream;z.inflateInit(DEF_WBITS,!0),z.next_in=buffer,z.next_in_index=0,z.avail_in=buffer.length;for(var oBlockList=[],totalSize=0;;){var obuf=new Uint8Array(32e3);z.next_out=obuf,z.next_out_index=0,z.avail_out=obuf.length;var status=z.inflate(Z_NO_FLUSH);if(status!=Z_OK&&status!=Z_STREAM_END)throw z.msg;if(0!=z.avail_out){var newob=new Uint8Array(obuf.length-z.avail_out);arrayCopy(obuf,0,newob,0,obuf.length-z.avail_out),obuf=newob}if(oBlockList.push(obuf),totalSize+=obuf.length,status==Z_STREAM_END)break}if(afterUncOffset&&(afterUncOffset[0]=(start||0)+z.next_in_index),1==oBlockList.length)return oBlockList[0].buffer;for(var out=new Uint8Array(totalSize),cursor=0,i=0;i<oBlockList.length;++i){var b=oBlockList[i];arrayCopy(b,0,out,cursor,b.length),cursor+=b.length}return out.buffer}function TreeBase(){}function Iterator(tree){this._tree=tree,this._ancestors=[],this._cursor=null}function Node(data){this.data=data,this.left=null,this.right=null,this.red=!0}function RBTree(comparator){this._root=null,this._comparator=comparator,this.size=0}function is_red(node){return null!==node&&node.red}function single_rotate(root,dir){var save=root.get_child(!dir);return root.set_child(!dir,save.get_child(dir)),save.set_child(dir,root),root.red=!0,save.red=!1,save}function double_rotate(root,dir){return root.set_child(!dir,single_rotate(root.get_child(!dir),!dir)),single_rotate(root,dir)}function TDigest(delta,K,CX){this.discrete=!1===delta,this.delta=delta||.01,this.K=void 0===K?25:K,this.CX=void 0===CX?1.1:CX,this.centroids=new RBTree(compare_centroid_means),this.nreset=0,this.reset()}function compare_centroid_means(a,b){return a.mean>b.mean?1:a.mean<b.mean?-1:0}function compare_centroid_mean_cumns(a,b){return a.mean_cumn-b.mean_cumn}function pop_random(choices){var idx=Math.floor(Math.random()*choices.length);return choices.splice(idx,1)[0]}function Digest(config){this.config=config||{},this.mode=this.config.mode||"auto",TDigest.call(this,"cont"===this.mode&&config.delta),this.digest_ratio=this.config.ratio||.9,this.digest_thresh=this.config.thresh||1e3,this.n_unique=0}var $,jQuery;!function(global,factory){$=factory(global),jQuery=$}("undefined"!=typeof window?window:this,function(window){function isArrayLike(obj){var length=!!obj&&"length"in obj&&obj.length,type=jQuery.type(obj);return"function"!==type&&!jQuery.isWindow(obj)&&("array"===type||0===length||"number"==typeof length&&length>0&&length-1 in obj)}function winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier))return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not});if(qualifier.nodeType)return jQuery.grep(elements,function(elem){return elem===qualifier!==not});if("string"==typeof qualifier){if(risSimple.test(qualifier))return jQuery.filter(qualifier,elements,not);qualifier=jQuery.filter(qualifier,elements)}return jQuery.grep(elements,function(elem){return jQuery.inArray(elem,qualifier)>-1!==not})}function sibling(cur,dir){do{cur=cur[dir]}while(cur&&1!==cur.nodeType);return cur}function createOptions(options){var object={};return jQuery.each(options.match(rnotwhite)||[],function(_,flag){object[flag]=!0}),object}function detach(){document.addEventListener?(document.removeEventListener("DOMContentLoaded",completed),window.removeEventListener("load",completed)):(document.detachEvent("onreadystatechange",completed),window.detachEvent("onload",completed))}function completed(){(document.addEventListener||"load"===window.event.type||"complete"===document.readyState)&&(detach(),jQuery.ready())}function dataAttr(elem,key,data){if(void 0===data&&1===elem.nodeType){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();if("string"==typeof(data=elem.getAttribute(name))){try{data="true"===data||"false"!==data&&("null"===data?null:+data+""===data?+data:rbrace.test(data)?jQuery.parseJSON(data):data)}catch(e){}jQuery.data(elem,key,data)}else data=void 0}return data}function isEmptyDataObject(obj){var name;for(name in obj)if(("data"!==name||!jQuery.isEmptyObject(obj[name]))&&"toJSON"!==name)return!1;return!0}function internalData(elem,name,data,pvt){if(acceptData(elem)){var ret,thisCache,internalKey=jQuery.expando,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey;if(id&&cache[id]&&(pvt||cache[id].data)||void 0!==data||"string"!=typeof name)return id||(id=isNode?elem[internalKey]=deletedIds.pop()||jQuery.guid++:internalKey),cache[id]||(cache[id]=isNode?{}:{toJSON:jQuery.noop}),"object"!=typeof name&&"function"!=typeof name||(pvt?cache[id]=jQuery.extend(cache[id],name):cache[id].data=jQuery.extend(cache[id].data,name)),thisCache=cache[id],pvt||(thisCache.data||(thisCache.data={}),thisCache=thisCache.data),void 0!==data&&(thisCache[jQuery.camelCase(name)]=data),"string"==typeof name?null==(ret=thisCache[name])&&(ret=thisCache[jQuery.camelCase(name)]):ret=thisCache,ret}}function internalRemoveData(elem,name,pvt){if(acceptData(elem)){var thisCache,i,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[jQuery.expando]:jQuery.expando;if(cache[id]){if(name&&(thisCache=pvt?cache[id]:cache[id].data)){jQuery.isArray(name)?name=name.concat(jQuery.map(name,jQuery.camelCase)):name in thisCache?name=[name]:(name=jQuery.camelCase(name),name=name in thisCache?[name]:name.split(" ")),i=name.length;for(;i--;)delete thisCache[name[i]];if(pvt?!isEmptyDataObject(thisCache):!jQuery.isEmptyObject(thisCache))return}(pvt||(delete cache[id].data,isEmptyDataObject(cache[id])))&&(isNode?jQuery.cleanData([elem],!0):support.deleteExpando||cache!=cache.window?delete cache[id]:cache[id]=void 0)}}}function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale=1,maxIterations=20,currentValue=tween?function(){return tween.cur()}:function(){return jQuery.css(elem,prop,"")},initial=currentValue(),unit=valueParts&&valueParts[3]||(jQuery.cssNumber[prop]?"":"px"),initialInUnit=(jQuery.cssNumber[prop]||"px"!==unit&&+initial)&&rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit&&initialInUnit[3]!==unit){unit=unit||initialInUnit[3],valueParts=valueParts||[],initialInUnit=+initial||1;do{scale=scale||".5",initialInUnit/=scale,jQuery.style(elem,prop,initialInUnit+unit)}while(scale!==(scale=currentValue()/initial)&&1!==scale&&--maxIterations)}return valueParts&&(initialInUnit=+initialInUnit||+initial||0,adjusted=valueParts[1]?initialInUnit+(valueParts[1]+1)*valueParts[2]:+valueParts[2],tween&&(tween.unit=unit,tween.start=initialInUnit,tween.end=adjusted)),adjusted}function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement)for(;list.length;)safeFrag.createElement(list.pop());return safeFrag}function getAll(context,tag){var elems,elem,i=0,found=void 0!==context.getElementsByTagName?context.getElementsByTagName(tag||"*"):void 0!==context.querySelectorAll?context.querySelectorAll(tag||"*"):void 0;if(!found)for(found=[],elems=context.childNodes||context;null!=(elem=elems[i]);i++)!tag||jQuery.nodeName(elem,tag)?found.push(elem):jQuery.merge(found,getAll(elem,tag));return void 0===tag||tag&&jQuery.nodeName(context,tag)?jQuery.merge([context],found):found}function setGlobalEval(elems,refElements){for(var elem,i=0;null!=(elem=elems[i]);i++)jQuery._data(elem,"globalEval",!refElements||jQuery._data(refElements[i],"globalEval"))}function fixDefaultChecked(elem){rcheckableType.test(elem.type)&&(elem.defaultChecked=elem.checked)}function buildFragment(elems,context,scripts,selection,ignored){for(var j,elem,contains,tmp,tag,tbody,wrap,l=elems.length,safe=createSafeFragment(context),nodes=[],i=0;i<l;i++)if((elem=elems[i])||0===elem)if("object"===jQuery.type(elem))jQuery.merge(nodes,elem.nodeType?[elem]:elem);else if(rhtml.test(elem)){for(tmp=tmp||safe.appendChild(context.createElement("div")),tag=(rtagName.exec(elem)||["",""])[1].toLowerCase(),wrap=wrapMap[tag]||wrapMap._default,tmp.innerHTML=wrap[1]+jQuery.htmlPrefilter(elem)+wrap[2],j=wrap[0];j--;)tmp=tmp.lastChild;if(!support.leadingWhitespace&&rleadingWhitespace.test(elem)&&nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0])),!support.tbody)for(elem="table"!==tag||rtbody.test(elem)?"<table>"!==wrap[1]||rtbody.test(elem)?0:tmp:tmp.firstChild,j=elem&&elem.childNodes.length;j--;)jQuery.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length&&elem.removeChild(tbody);for(jQuery.merge(nodes,tmp.childNodes),tmp.textContent="";tmp.firstChild;)tmp.removeChild(tmp.firstChild);tmp=safe.lastChild}else nodes.push(context.createTextNode(elem));for(tmp&&safe.removeChild(tmp),support.appendChecked||jQuery.grep(getAll(nodes,"input"),fixDefaultChecked),i=0;elem=nodes[i++];)if(selection&&jQuery.inArray(elem,selection)>-1)ignored&&ignored.push(elem);else if(contains=jQuery.contains(elem.ownerDocument,elem),tmp=getAll(safe.appendChild(elem),"script"),contains&&setGlobalEval(tmp),scripts)for(j=0;elem=tmp[j++];)rscriptType.test(elem.type||"")&&scripts.push(elem);return tmp=null,safe}function returnTrue(){return!0}function returnFalse(){return!1}function safeActiveElement(){try{return document.activeElement}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if("object"==typeof types){"string"!=typeof selector&&(data=data||selector,selector=void 0);for(type in types)on(elem,type,selector,data,types[type],one);return elem}if(null==data&&null==fn?(fn=selector,data=selector=void 0):null==fn&&("string"==typeof selector?(fn=data,data=void 0):(fn=data,data=selector,selector=void 0)),!1===fn)fn=returnFalse;else if(!fn)return elem;return 1===one&&(origFn=fn,fn=function(event){return jQuery().off(event),origFn.apply(this,arguments)},fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)),elem.each(function(){jQuery.event.add(this,types,fn,data,selector)})}function manipulationTarget(elem,content){return jQuery.nodeName(elem,"table")&&jQuery.nodeName(11!==content.nodeType?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem}function disableScript(elem){return elem.type=(null!==jQuery.find.attr(elem,"type"))+"/"+elem.type,elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);return match?elem.type=match[1]:elem.removeAttribute("type"),elem}function cloneCopyEvent(src,dest){if(1===dest.nodeType&&jQuery.hasData(src)){var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle,curData.events={};for(type in events)for(i=0,l=events[type].length;i<l;i++)jQuery.event.add(dest,type,events[type][i])}curData.data&&(curData.data=jQuery.extend({},curData.data))}}function fixCloneNodeIssues(src,dest){var nodeName,e,data;if(1===dest.nodeType){if(nodeName=dest.nodeName.toLowerCase(),!support.noCloneEvent&&dest[jQuery.expando]){data=jQuery._data(dest);for(e in data.events)jQuery.removeEvent(dest,e,data.handle);dest.removeAttribute(jQuery.expando)}"script"===nodeName&&dest.text!==src.text?(disableScript(dest).text=src.text,restoreScript(dest)):"object"===nodeName?(dest.parentNode&&(dest.outerHTML=src.outerHTML),support.html5Clone&&src.innerHTML&&!jQuery.trim(dest.innerHTML)&&(dest.innerHTML=src.innerHTML)):"input"===nodeName&&rcheckableType.test(src.type)?(dest.defaultChecked=dest.checked=src.checked,dest.value!==src.value&&(dest.value=src.value)):"option"===nodeName?dest.defaultSelected=dest.selected=src.defaultSelected:"input"!==nodeName&&"textarea"!==nodeName||(dest.defaultValue=src.defaultValue)}}function domManip(collection,args,callback,ignored){args=concat.apply([],args);var first,node,hasScripts,scripts,doc,fragment,i=0,l=collection.length,iNoClone=l-1,value=args[0],isFunction=jQuery.isFunction(value);if(isFunction||l>1&&"string"==typeof value&&!support.checkClone&&rchecked.test(value))return collection.each(function(index){var self=collection.eq(index);isFunction&&(args[0]=value.call(this,index,self.html())),domManip(self,args,callback,ignored)});if(l&&(fragment=buildFragment(args,collection[0].ownerDocument,!1,collection,ignored),first=fragment.firstChild,1===fragment.childNodes.length&&(fragment=first),first||ignored)){for(scripts=jQuery.map(getAll(fragment,"script"),disableScript),hasScripts=scripts.length;i<l;i++)node=fragment,i!==iNoClone&&(node=jQuery.clone(node,!0,!0),hasScripts&&jQuery.merge(scripts,getAll(node,"script"))),callback.call(collection[i],node,i);if(hasScripts)for(doc=scripts[scripts.length-1].ownerDocument,jQuery.map(scripts,restoreScript),i=0;i<hasScripts;i++)node=scripts[i],rscriptType.test(node.type||"")&&!jQuery._data(node,"globalEval")&&jQuery.contains(doc,node)&&(node.src?jQuery._evalUrl&&jQuery._evalUrl(node.src):jQuery.globalEval((node.text||node.textContent||node.innerHTML||"").replace(rcleanScript,"")));fragment=first=null}return collection}function remove(elem,selector,keepData){for(var node,elems=selector?jQuery.filter(selector,elem):elem,i=0;null!=(node=elems[i]);i++)keepData||1!==node.nodeType||jQuery.cleanData(getAll(node)),node.parentNode&&(keepData&&jQuery.contains(node.ownerDocument,node)&&setGlobalEval(getAll(node,"script")),node.parentNode.removeChild(node));return elem}function actualDisplay(name,doc){var elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=jQuery.css(elem[0],"display");return elem.detach(),display}function defaultDisplay(nodeName){var doc=document,display=elemdisplay[nodeName];return display||(display=actualDisplay(nodeName,doc),"none"!==display&&display||(iframe=(iframe||jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement),doc=(iframe[0].contentWindow||iframe[0].contentDocument).document,doc.write(),doc.close(),display=actualDisplay(nodeName,doc),iframe.detach()),elemdisplay[nodeName]=display),display}function addGetHookIf(conditionFn,hookFn){return{get:function(){return conditionFn()?void delete this.get:(this.get=hookFn).apply(this,arguments)}}}function vendorPropName(name){if(name in emptyStyle)return name;for(var capName=name.charAt(0).toUpperCase()+name.slice(1),i=cssPrefixes.length;i--;)if((name=cssPrefixes[i]+capName)in emptyStyle)return name}function showHide(elements,show){for(var display,elem,hidden,values=[],index=0,length=elements.length;index<length;index++)elem=elements[index],elem.style&&(values[index]=jQuery._data(elem,"olddisplay"),display=elem.style.display,show?(values[index]||"none"!==display||(elem.style.display=""),""===elem.style.display&&isHidden(elem)&&(values[index]=jQuery._data(elem,"olddisplay",defaultDisplay(elem.nodeName)))):(hidden=isHidden(elem),(display&&"none"!==display||!hidden)&&jQuery._data(elem,"olddisplay",hidden?display:jQuery.css(elem,"display"))));for(index=0;index<length;index++)elem=elements[index],elem.style&&(show&&"none"!==elem.style.display&&""!==elem.style.display||(elem.style.display=show?values[index]||"":"none"));return elements}function setPositiveNumber(elem,value,subtract){var matches=rnumsplit.exec(value);return matches?Math.max(0,matches[1]-(subtract||0))+(matches[2]||"px"):value}function augmentWidthOrHeight(elem,name,extra,isBorderBox,styles){for(var i=extra===(isBorderBox?"border":"content")?4:"width"===name?1:0,val=0;i<4;i+=2)"margin"===extra&&(val+=jQuery.css(elem,extra+cssExpand[i],!0,styles)),isBorderBox?("content"===extra&&(val-=jQuery.css(elem,"padding"+cssExpand[i],!0,styles)),"margin"!==extra&&(val-=jQuery.css(elem,"border"+cssExpand[i]+"Width",!0,styles))):(val+=jQuery.css(elem,"padding"+cssExpand[i],!0,styles),"padding"!==extra&&(val+=jQuery.css(elem,"border"+cssExpand[i]+"Width",!0,styles)));return val}function getWidthOrHeight(elem,name,extra){var valueIsBorderBox=!0,val="width"===name?elem.offsetWidth:elem.offsetHeight,styles=getStyles(elem),isBorderBox=support.boxSizing&&"border-box"===jQuery.css(elem,"boxSizing",!1,styles);if(val<=0||null==val){if(val=curCSS(elem,name,styles),(val<0||null==val)&&(val=elem.style[name]),rnumnonpx.test(val))return val;valueIsBorderBox=isBorderBox&&(support.boxSizingReliable()||val===elem.style[name]),val=parseFloat(val)||0}return val+augmentWidthOrHeight(elem,name,extra||(isBorderBox?"border":"content"),valueIsBorderBox,styles)+"px"}function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}function createFxNow(){return window.setTimeout(function(){fxNow=void 0}),fxNow=jQuery.now()}function genFx(type,includeWidth){var which,attrs={height:type},i=0;for(includeWidth=includeWidth?1:0;i<4;i+=2-includeWidth)which=cssExpand[i],attrs["margin"+which]=attrs["padding"+which]=type;return includeWidth&&(attrs.opacity=attrs.width=type),attrs}function createTween(value,prop,animation){for(var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;index<length;index++)if(tween=collection[index].call(animation,prop,value))return tween}function defaultPrefilter(elem,props,opts){var prop,value,toggle,tween,hooks,oldfire,display,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHidden(elem),dataShow=jQuery._data(elem,"fxshow");opts.queue||(hooks=jQuery._queueHooks(elem,"fx"),null==hooks.unqueued&&(hooks.unqueued=0,oldfire=hooks.empty.fire,hooks.empty.fire=function(){hooks.unqueued||oldfire()}),hooks.unqueued++,anim.always(function(){anim.always(function(){hooks.unqueued--,jQuery.queue(elem,"fx").length||hooks.empty.fire()})})),1===elem.nodeType&&("height"in props||"width"in props)&&(opts.overflow=[style.overflow,style.overflowX,style.overflowY],display=jQuery.css(elem,"display"),"inline"===("none"===display?jQuery._data(elem,"olddisplay")||defaultDisplay(elem.nodeName):display)&&"none"===jQuery.css(elem,"float")&&(support.inlineBlockNeedsLayout&&"inline"!==defaultDisplay(elem.nodeName)?style.zoom=1:style.display="inline-block")),opts.overflow&&(style.overflow="hidden",support.shrinkWrapBlocks()||anim.always(function(){style.overflow=opts.overflow[0],style.overflowX=opts.overflow[1],style.overflowY=opts.overflow[2]}));for(prop in props)if(value=props[prop],rfxtypes.exec(value)){if(delete props[prop],toggle=toggle||"toggle"===value,value===(hidden?"hide":"show")){if("show"!==value||!dataShow||void 0===dataShow[prop])continue;hidden=!0}orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop)}else display=void 0;if(jQuery.isEmptyObject(orig))"inline"===("none"===display?defaultDisplay(elem.nodeName):display)&&(style.display=display);else{dataShow?"hidden"in dataShow&&(hidden=dataShow.hidden):dataShow=jQuery._data(elem,"fxshow",{}),toggle&&(dataShow.hidden=!hidden),hidden?jQuery(elem).show():anim.done(function(){jQuery(elem).hide()}),anim.done(function(){var prop;jQuery._removeData(elem,"fxshow");for(prop in orig)jQuery.style(elem,prop,orig[prop])});for(prop in orig)tween=createTween(hidden?dataShow[prop]:0,prop,anim),prop in dataShow||(dataShow[prop]=tween.start,hidden&&(tween.end=tween.start,tween.start="width"===prop||"height"===prop?1:0))}}function propFilter(props,specialEasing){var index,name,easing,value,hooks;for(index in props)if(name=jQuery.camelCase(index),easing=specialEasing[name],value=props[index],jQuery.isArray(value)&&(easing=value[1],value=props[index]=value[0]),index!==name&&(props[name]=value,delete props[index]),(hooks=jQuery.cssHooks[name])&&"expand"in hooks){value=hooks.expand(value),delete props[name];for(index in value)index in props||(props[index]=value[index],specialEasing[index]=easing)}else specialEasing[name]=easing}function Animation(elem,properties,options){var result,stopped,index=0,length=Animation.prefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem}),tick=function(){if(stopped)return!1;for(var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),temp=remaining/animation.duration||0,percent=1-temp,index=0,length=animation.tweens.length;index<length;index++)animation.tweens[index].run(percent);return deferred.notifyWith(elem,[animation,percent,remaining]),percent<1&&length?remaining:(deferred.resolveWith(elem,[animation]),!1)},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(!0,{specialEasing:{},easing:jQuery.easing._default},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing[prop]||animation.opts.easing);return animation.tweens.push(tween),tween},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped)return this;for(stopped=!0;index<length;index++)animation.tweens[index].run(1);return gotoEnd?(deferred.notifyWith(elem,[animation,1,0]),deferred.resolveWith(elem,[animation,gotoEnd])):deferred.rejectWith(elem,[animation,gotoEnd]),this}}),props=animation.props;for(propFilter(props,animation.opts.specialEasing);index<length;index++)if(result=Animation.prefilters[index].call(animation,elem,props,animation.opts))return jQuery.isFunction(result.stop)&&(jQuery._queueHooks(animation.elem,animation.opts.queue).stop=jQuery.proxy(result.stop,result)),result;return jQuery.map(props,createTween,animation),jQuery.isFunction(animation.opts.start)&&animation.opts.start.call(elem,animation),jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue})),animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always)}function getClass(elem){return jQuery.attr(elem,"class")||""}function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){"string"!=typeof dataTypeExpression&&(func=dataTypeExpression,dataTypeExpression="*");var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnotwhite)||[];if(jQuery.isFunction(func))for(;dataType=dataTypes[i++];)"+"===dataType.charAt(0)?(dataType=dataType.slice(1)||"*",(structure[dataType]=structure[dataType]||[]).unshift(func)):(structure[dataType]=structure[dataType]||[]).push(func)}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){function inspect(dataType){var selected;return inspected[dataType]=!0,jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);return"string"!=typeof dataTypeOrTransport||seekingTransport||inspected[dataTypeOrTransport]?seekingTransport?!(selected=dataTypeOrTransport):void 0:(options.dataTypes.unshift(dataTypeOrTransport),inspect(dataTypeOrTransport),!1)}),selected}var inspected={},seekingTransport=structure===transports;return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var deep,key,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src)void 0!==src[key]&&((flatOptions[key]?target:deep||(deep={}))[key]=src[key]);return deep&&jQuery.extend(!0,target,deep),target}function ajaxHandleResponses(s,jqXHR,responses){for(var firstDataType,ct,finalDataType,type,contents=s.contents,dataTypes=s.dataTypes;"*"===dataTypes[0];)dataTypes.shift(),void 0===ct&&(ct=s.mimeType||jqXHR.getResponseHeader("Content-Type"));if(ct)for(type in contents)if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}if(dataTypes[0]in responses)finalDataType=dataTypes[0];else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}firstDataType||(firstDataType=type)}finalDataType=finalDataType||firstDataType}if(finalDataType)return finalDataType!==dataTypes[0]&&dataTypes.unshift(finalDataType),responses[finalDataType]}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1])for(conv in s.converters)converters[conv.toLowerCase()]=s.converters[conv];for(current=dataTypes.shift();current;)if(s.responseFields[current]&&(jqXHR[s.responseFields[current]]=response),!prev&&isSuccess&&s.dataFilter&&(response=s.dataFilter(response,s.dataType)),prev=current,current=dataTypes.shift())if("*"===current)current=prev;else if("*"!==prev&&prev!==current){if(!(conv=converters[prev+" "+current]||converters["* "+current]))for(conv2 in converters)if(tmp=conv2.split(" "),tmp[1]===current&&(conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]])){!0===conv?conv=converters[conv2]:!0!==converters[conv2]&&(current=tmp[0],dataTypes.unshift(tmp[1]));break}if(!0!==conv)if(conv&&s.throws)response=conv(response);else try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}return{state:"success",data:response}}function getDisplay(elem){return elem.style&&elem.style.display||jQuery.css(elem,"display")}function filterHidden(elem){if(!jQuery.contains(elem.ownerDocument||document,elem))return!0;for(;elem&&1===elem.nodeType;){if("none"===getDisplay(elem)||"hidden"===elem.type)return!0;elem=elem.parentNode}return!1}function buildParams(prefix,obj,traditional,add){var name;if(jQuery.isArray(obj))jQuery.each(obj,function(i,v){traditional||rbracket.test(prefix)?add(prefix,v):buildParams(prefix+"["+("object"==typeof v&&null!=v?i:"")+"]",v,traditional,add)});else if(traditional||"object"!==jQuery.type(obj))add(prefix,obj);else for(name in obj)buildParams(prefix+"["+name+"]",obj[name],traditional,add)}function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function getWindow(elem){return jQuery.isWindow(elem)?elem:9===elem.nodeType&&(elem.defaultView||elem.parentWindow)}var deletedIds=[],document=window.document,slice=deletedIds.slice,concat=deletedIds.concat,push=deletedIds.push,indexOf=deletedIds.indexOf,class2type={},toString=class2type.toString,hasOwn=class2type.hasOwnProperty,support={},version="1.12.4",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return letter.toUpperCase()};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,selector:"",length:0,toArray:function(){return slice.call(this)},get:function(num){return null!=num?num<0?this[num+this.length]:this[num]:slice.call(this)},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);return ret.prevObject=this,ret.context=this.context,ret},each:function(callback){return jQuery.each(this,callback)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[])},end:function(){return this.prevObject||this.constructor()},push:push,sort:deletedIds.sort,splice:deletedIds.splice},jQuery.extend=jQuery.fn.extend=function(){var src,copyIsArray,copy,name,options,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=!1;for("boolean"==typeof target&&(deep=target,target=arguments[i]||{},i++),"object"==typeof target||jQuery.isFunction(target)||(target={}),i===length&&(target=this,i--);i<length;i++)if(null!=(options=arguments[i]))for(name in options)src=target[name],copy=options[name],target!==copy&&(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))?(copyIsArray?(copyIsArray=!1,clone=src&&jQuery.isArray(src)?src:[]):clone=src&&jQuery.isPlainObject(src)?src:{},target[name]=jQuery.extend(deep,clone,copy)):void 0!==copy&&(target[name]=copy));return target},jQuery.extend({expando:"jQuery"+(version+Math.random()).replace(/\D/g,""),isReady:!0,error:function(msg){throw new Error(msg)},noop:function(){},isFunction:function(obj){return"function"===jQuery.type(obj)},isArray:Array.isArray||function(obj){return"array"===jQuery.type(obj)},isWindow:function(obj){return null!=obj&&obj==obj.window},isNumeric:function(obj){var realStringObj=obj&&obj.toString();return!jQuery.isArray(obj)&&realStringObj-parseFloat(realStringObj)+1>=0},isEmptyObject:function(obj){var name;for(name in obj)return!1;return!0},isPlainObject:function(obj){var key;if(!obj||"object"!==jQuery.type(obj)||obj.nodeType||jQuery.isWindow(obj))return!1;try{if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(!support.ownFirst)for(key in obj)return hasOwn.call(obj,key);for(key in obj);return void 0===key||hasOwn.call(obj,key)},type:function(obj){return null==obj?obj+"":"object"==typeof obj||"function"==typeof obj?class2type[toString.call(obj)]||"object":typeof obj},globalEval:function(data){data&&jQuery.trim(data)&&(window.execScript||function(data){window.eval.call(window,data)})(data)},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback){var length,i=0;if(isArrayLike(obj))for(length=obj.length;i<length&&!1!==callback.call(obj[i],i,obj[i]);i++);else for(i in obj)if(!1===callback.call(obj[i],i,obj[i]))break;return obj},trim:function(text){return null==text?"":(text+"").replace(rtrim,"")},makeArray:function(arr,results){var ret=results||[];return null!=arr&&(isArrayLike(Object(arr))?jQuery.merge(ret,"string"==typeof arr?[arr]:arr):push.call(ret,arr)),ret},inArray:function(elem,arr,i){var len;if(arr){if(indexOf)return indexOf.call(arr,elem,i);for(len=arr.length,i=i?i<0?Math.max(0,len+i):i:0;i<len;i++)if(i in arr&&arr[i]===elem)return i}return-1},merge:function(first,second){for(var len=+second.length,j=0,i=first.length;j<len;)first[i++]=second[j++];if(len!==len)for(;void 0!==second[j];)first[i++]=second[j++];return first.length=i,first},grep:function(elems,callback,invert){for(var matches=[],i=0,length=elems.length,callbackExpect=!invert;i<length;i++)!callback(elems[i],i)!==callbackExpect&&matches.push(elems[i]);return matches},map:function(elems,callback,arg){var length,value,i=0,ret=[];if(isArrayLike(elems))for(length=elems.length;i<length;i++)null!=(value=callback(elems[i],i,arg))&&ret.push(value);else for(i in elems)null!=(value=callback(elems[i],i,arg))&&ret.push(value);return concat.apply([],ret)},guid:1,proxy:function(fn,context){var args,proxy,tmp;if("string"==typeof context&&(tmp=fn[context],context=fn,fn=tmp),jQuery.isFunction(fn))return args=slice.call(arguments,2),proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)))},proxy.guid=fn.guid=fn.guid||jQuery.guid++,proxy},now:function(){return+new Date},support:support}),"function"==typeof Symbol&&(jQuery.fn[Symbol.iterator]=deletedIds[Symbol.iterator]),jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(i,name){class2type["[object "+name+"]"]=name.toLowerCase()});var Sizzle=function(window){function Sizzle(selector,context,results,seed){var m,i,elem,nid,nidselect,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;if(results=results||[],"string"!=typeof selector||!selector||1!==nodeType&&9!==nodeType&&11!==nodeType)return results;if(!seed&&((context?context.ownerDocument||context:preferredDoc)!==document&&setDocument(context),context=context||document,documentIsHTML)){if(11!==nodeType&&(match=rquickExpr.exec(selector)))if(m=match[1]){if(9===nodeType){if(!(elem=context.getElementById(m)))return results;if(elem.id===m)return results.push(elem),results}else if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m)return results.push(elem),results}else{if(match[2])return push.apply(results,context.getElementsByTagName(selector)),results;if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName)return push.apply(results,context.getElementsByClassName(m)),results}if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(1!==nodeType)newContext=context,newSelector=selector;else if("object"!==context.nodeName.toLowerCase()){for((nid=context.getAttribute("id"))?nid=nid.replace(rescape,"\\$&"):context.setAttribute("id",nid=expando),groups=tokenize(selector),i=groups.length,nidselect=ridentifier.test(nid)?"#"+nid:"[id='"+nid+"']";i--;)groups[i]=nidselect+" "+toSelector(groups[i]);newSelector=groups.join(","),newContext=rsibling.test(selector)&&testContext(context.parentNode)||context}if(newSelector)try{return push.apply(results,newContext.querySelectorAll(newSelector)),results}catch(qsaError){}finally{nid===expando&&context.removeAttribute("id")}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){function cache(key,value){return keys.push(key+" ")>Expr.cacheLength&&delete cache[keys.shift()],cache[key+" "]=value}var keys=[];return cache}function markFunction(fn){return fn[expando]=!0,fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return!1}finally{div.parentNode&&div.parentNode.removeChild(div),div=null}}function addHandle(attrs,handler){for(var arr=attrs.split("|"),i=arr.length;i--;)Expr.attrHandle[arr[i]]=handler}function siblingCheck(a,b){var cur=b&&a,diff=cur&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff)return diff;if(cur)for(;cur=cur.nextSibling;)if(cur===b)return-1;return a?1:-1}function createInputPseudo(type){return function(elem){return"input"===elem.nodeName.toLowerCase()&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return("input"===name||"button"===name)&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){return argument=+argument,markFunction(function(seed,matches){for(var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;i--;)seed[j=matchIndexes[i]]&&(seed[j]=!(matches[j]=seed[j]))})})}function testContext(context){return context&&void 0!==context.getElementsByTagName&&context}function setFilters(){}function toSelector(tokens){for(var i=0,len=tokens.length,selector="";i<len;i++)selector+=tokens[i].value;return selector}function addCombinator(matcher,combinator,base){var dir=combinator.dir,checkNonElements=base&&"parentNode"===dir,doneName=done++;return combinator.first?function(elem,context,xml){for(;elem=elem[dir];)if(1===elem.nodeType||checkNonElements)return matcher(elem,context,xml)}:function(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName];if(xml){for(;elem=elem[dir];)if((1===elem.nodeType||checkNonElements)&&matcher(elem,context,xml))return!0}else for(;elem=elem[dir];)if(1===elem.nodeType||checkNonElements){if(outerCache=elem[expando]||(elem[expando]={}),uniqueCache=outerCache[elem.uniqueID]||(outerCache[elem.uniqueID]={}),(oldCache=uniqueCache[dir])&&oldCache[0]===dirruns&&oldCache[1]===doneName)return newCache[2]=oldCache[2];if(uniqueCache[dir]=newCache,newCache[2]=matcher(elem,context,xml))return!0}}}function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){for(var i=matchers.length;i--;)if(!matchers[i](elem,context,xml))return!1;return!0}:matchers[0]}function multipleContexts(selector,contexts,results){for(var i=0,len=contexts.length;i<len;i++)Sizzle(selector,contexts[i],results);return results}function condense(unmatched,map,filter,context,xml){for(var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=null!=map;i<len;i++)(elem=unmatched[i])&&(filter&&!filter(elem,context,xml)||(newUnmatched.push(elem),mapped&&map.push(i)));return newUnmatched}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){return postFilter&&!postFilter[expando]&&(postFilter=setMatcher(postFilter)),postFinder&&!postFinder[expando]&&(postFinder=setMatcher(postFinder,postSelector)),markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||multipleContexts(selector||"*",context.nodeType?[context]:context,[]),matcherIn=!preFilter||!seed&&selector?elems:condense(elems,preMap,preFilter,context,xml),matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher&&matcher(matcherIn,matcherOut,context,xml),postFilter)for(temp=condense(matcherOut,postMap),postFilter(temp,[],context,xml),i=temp.length;i--;)(elem=temp[i])&&(matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem));if(seed){if(postFinder||preFilter){if(postFinder){for(temp=[],i=matcherOut.length;i--;)(elem=matcherOut[i])&&temp.push(matcherIn[i]=elem);postFinder(null,matcherOut=[],temp,xml)}for(i=matcherOut.length;i--;)(elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1&&(seed[temp]=!(results[temp]=elem))}}else matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut),postFinder?postFinder(null,results,matcherOut,xml):push.apply(results,matcherOut)})}function matcherFromTokens(tokens){for(var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,!0),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,!0),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));return checkContext=null,ret}];i<len;i++)if(matcher=Expr.relative[tokens[i].type])matchers=[addCombinator(elementMatcher(matchers),matcher)];else{if(matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches),matcher[expando]){for(j=++i;j<len&&!Expr.relative[tokens[j].type];j++);return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:" "===tokens[i-2].type?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&matcherFromTokens(tokens=tokens.slice(j)),j<len&&toSelector(tokens))}matchers.push(matcher)}return elementMatcher(matchers)}function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find.TAG("*",outermost),dirrunsUnique=dirruns+=null==contextBackup?1:Math.random()||.1,len=elems.length;for(outermost&&(outermostContext=context===document||context||outermost);i!==len&&null!=(elem=elems[i]);i++){if(byElement&&elem){for(j=0,context||elem.ownerDocument===document||(setDocument(elem),xml=!documentIsHTML);matcher=elementMatchers[j++];)if(matcher(elem,context||document,xml)){results.push(elem);break}outermost&&(dirruns=dirrunsUnique)}bySet&&((elem=!matcher&&elem)&&matchedCount--,seed&&unmatched.push(elem))}if(matchedCount+=i,bySet&&i!==matchedCount){for(j=0;matcher=setMatchers[j++];)matcher(unmatched,setMatched,context,xml);if(seed){if(matchedCount>0)for(;i--;)unmatched[i]||setMatched[i]||(setMatched[i]=pop.call(results));setMatched=condense(setMatched)}push.apply(results,setMatched),outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1&&Sizzle.uniqueSort(results)}return outermost&&(dirruns=dirrunsUnique,outermostContext=contextBackup),unmatched};return bySet?markFunction(superMatcher):superMatcher}var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){return a===b&&(hasDuplicate=!0),0},MAX_NEGATIVE=1<<31,hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){for(var i=0,len=list.length;i<len;i++)if(list[i]===elem)return i;return-1},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",identifier="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",attributes="\\["+whitespace+"*("+identifier+")(?:"+whitespace+"*([*^$|!~]?=)"+whitespace+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+whitespace+"*\\]",pseudos=":("+identifier+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|.*)\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+identifier+")"),CLASS:new RegExp("^\\.("+identifier+")"),TAG:new RegExp("^("+identifier+"|[*])"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,1023&high|56320)},unloadHandler=function(){setDocument()};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes),arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){for(var j=target.length,i=0;target[j++]=els[i++];);target.length=j-1}}}support=Sizzle.support={},isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return!!documentElement&&"HTML"!==documentElement.nodeName},setDocument=Sizzle.setDocument=function(node){var hasCompare,parent,doc=node?node.ownerDocument||node:preferredDoc;return doc!==document&&9===doc.nodeType&&doc.documentElement?(document=doc,docElem=document.documentElement,documentIsHTML=!isXML(document),(parent=document.defaultView)&&parent.top!==parent&&(parent.addEventListener?parent.addEventListener("unload",unloadHandler,!1):parent.attachEvent&&parent.attachEvent("onunload",unloadHandler)),support.attributes=assert(function(div){return div.className="i",!div.getAttribute("className")}),support.getElementsByTagName=assert(function(div){return div.appendChild(document.createComment("")),!div.getElementsByTagName("*").length}),support.getElementsByClassName=rnative.test(document.getElementsByClassName),support.getById=assert(function(div){return docElem.appendChild(div).id=expando,!document.getElementsByName||!document.getElementsByName(expando).length}),support.getById?(Expr.find.ID=function(id,context){if(void 0!==context.getElementById&&documentIsHTML){var m=context.getElementById(id);return m?[m]:[]}},Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}):(delete Expr.find.ID,Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=void 0!==elem.getAttributeNode&&elem.getAttributeNode("id");return node&&node.value===attrId}}),Expr.find.TAG=support.getElementsByTagName?function(tag,context){return void 0!==context.getElementsByTagName?context.getElementsByTagName(tag):support.qsa?context.querySelectorAll(tag):void 0}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if("*"===tag){for(;elem=results[i++];)1===elem.nodeType&&tmp.push(elem);return tmp}return results},Expr.find.CLASS=support.getElementsByClassName&&function(className,context){if(void 0!==context.getElementsByClassName&&documentIsHTML)return context.getElementsByClassName(className)},rbuggyMatches=[],rbuggyQSA=[],(support.qsa=rnative.test(document.querySelectorAll))&&(assert(function(div){docElem.appendChild(div).innerHTML="<a id='"+expando+"'></a><select id='"+expando+"-\r\\' msallowcapture=''><option selected=''></option></select>",div.querySelectorAll("[msallowcapture^='']").length&&rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")"),div.querySelectorAll("[selected]").length||rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")"),div.querySelectorAll("[id~="+expando+"-]").length||rbuggyQSA.push("~="),div.querySelectorAll(":checked").length||rbuggyQSA.push(":checked"),div.querySelectorAll("a#"+expando+"+*").length||rbuggyQSA.push(".#.+[+~]")}),assert(function(div){var input=document.createElement("input");input.setAttribute("type","hidden"),div.appendChild(input).setAttribute("name","D"),div.querySelectorAll("[name=d]").length&&rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?="),div.querySelectorAll(":enabled").length||rbuggyQSA.push(":enabled",":disabled"),div.querySelectorAll("*,:x"),rbuggyQSA.push(",.*:")})),(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector))&&assert(function(div){support.disconnectedMatch=matches.call(div,"div"),matches.call(div,"[s!='']:x"),rbuggyMatches.push("!=",pseudos)}),rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|")),rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|")),hasCompare=rnative.test(docElem.compareDocumentPosition),contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=9===a.nodeType?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!(!bup||1!==bup.nodeType||!(adown.contains?adown.contains(bup):a.compareDocumentPosition&&16&a.compareDocumentPosition(bup)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},sortOrder=hasCompare?function(a,b){if(a===b)return hasDuplicate=!0,0;var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;return compare||(compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&compare||!support.sortDetached&&b.compareDocumentPosition(a)===compare?a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)?-1:b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0:4&compare?-1:1)}:function(a,b){if(a===b)return hasDuplicate=!0,0;var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup)return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0;if(aup===bup)return siblingCheck(a,b);for(cur=a;cur=cur.parentNode;)ap.unshift(cur);for(cur=b;cur=cur.parentNode;)bp.unshift(cur);for(;ap[i]===bp[i];)i++;return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0},document):document},Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)},Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document&&setDocument(elem),expr=expr.replace(rattributeQuotes,"='$1']"),support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr)))try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&11!==elem.document.nodeType)return ret}catch(e){}return Sizzle(expr,document,null,[elem]).length>0},Sizzle.contains=function(context,elem){return(context.ownerDocument||context)!==document&&setDocument(context),contains(context,elem)},Sizzle.attr=function(elem,name){(elem.ownerDocument||elem)!==document&&setDocument(elem);var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):void 0;return void 0!==val?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null},Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)},Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;if(hasDuplicate=!support.detectDuplicates,sortInput=!support.sortStable&&results.slice(0),results.sort(sortOrder),hasDuplicate){for(;elem=results[i++];)elem===results[i]&&(j=duplicates.push(i));for(;j--;)results.splice(duplicates[j],1)}return sortInput=null,results},getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(nodeType){if(1===nodeType||9===nodeType||11===nodeType){if("string"==typeof elem.textContent)return elem.textContent;for(elem=elem.firstChild;elem;elem=elem.nextSibling)ret+=getText(elem)}else if(3===nodeType||4===nodeType)return elem.nodeValue}else for(;node=elem[i++];)ret+=getText(node);return ret},Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){return match[1]=match[1].replace(runescape,funescape),match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape),"~="===match[2]&&(match[3]=" "+match[3]+" "),match.slice(0,4)},CHILD:function(match){return match[1]=match[1].toLowerCase(),"nth"===match[1].slice(0,3)?(match[3]||Sizzle.error(match[0]),match[4]=+(match[4]?match[5]+(match[6]||1):2*("even"===match[3]||"odd"===match[3])),match[5]=+(match[7]+match[8]||"odd"===match[3])):match[3]&&Sizzle.error(match[0]),match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];return matchExpr.CHILD.test(match[0])?null:(match[3]?match[2]=match[4]||match[5]||"":unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,!0))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)&&(match[0]=match[0].slice(0,excess),match[2]=unquoted.slice(0,excess)),match.slice(0,3))}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return"*"===nodeNameSelector?function(){return!0}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test("string"==typeof elem.className&&elem.className||void 0!==elem.getAttribute&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);return null==result?"!="===operator:!operator||(result+="","="===operator?result===check:"!="===operator?result!==check:"^="===operator?check&&0===result.indexOf(check):"*="===operator?check&&result.indexOf(check)>-1:"$="===operator?check&&result.slice(-check.length)===check:"~="===operator?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:"|="===operator&&(result===check||result.slice(0,check.length+1)===check+"-"))}},CHILD:function(type,what,argument,first,last){var simple="nth"!==type.slice(0,3),forward="last"!==type.slice(-4),ofType="of-type"===what;return 1===first&&0===last?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=!1;if(parent){if(simple){for(;dir;){for(node=elem;node=node[dir];)if(ofType?node.nodeName.toLowerCase()===name:1===node.nodeType)return!1;start=dir="only"===type&&!start&&"nextSibling"}return!0}if(start=[forward?parent.firstChild:parent.lastChild],forward&&useCache){for(node=parent,outerCache=node[expando]||(node[expando]={}),uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={}),cache=uniqueCache[type]||[],nodeIndex=cache[0]===dirruns&&cache[1],diff=nodeIndex&&cache[2],node=nodeIndex&&parent.childNodes[nodeIndex];node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop();)if(1===node.nodeType&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break}}else if(useCache&&(node=elem,outerCache=node[expando]||(node[expando]={}),uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={}),cache=uniqueCache[type]||[],nodeIndex=cache[0]===dirruns&&cache[1],diff=nodeIndex),!1===diff)for(;(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())&&((ofType?node.nodeName.toLowerCase()!==name:1!==node.nodeType)||!++diff||(useCache&&(outerCache=node[expando]||(node[expando]={}),uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={}),uniqueCache[type]=[dirruns,diff]),node!==elem)););return(diff-=last)===first||diff%first==0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);return fn[expando]?fn(argument):fn.length>1?(args=[pseudo,pseudo,"",argument],Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){for(var idx,matched=fn(seed,argument),i=matched.length;i--;)idx=indexOf(seed,matched[i]),seed[idx]=!(matches[idx]=matched[i])}):function(elem){return fn(elem,0,args)}):fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){for(var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;i--;)(elem=unmatched[i])&&(seed[i]=!(matches[i]=elem))}):function(elem,context,xml){return input[0]=elem,matcher(input,null,xml,results),input[0]=null,!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return text=text.replace(runescape,funescape),function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){return ridentifier.test(lang||"")||Sizzle.error("unsupported lang: "+lang),lang=lang.replace(runescape,funescape).toLowerCase(),function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang"))return(elemLang=elemLang.toLowerCase())===lang||0===elemLang.indexOf(lang+"-")}while((elem=elem.parentNode)&&1===elem.nodeType);return!1}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return!1===elem.disabled},disabled:function(elem){return!0===elem.disabled},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return"input"===nodeName&&!!elem.checked||"option"===nodeName&&!!elem.selected},selected:function(elem){return elem.parentNode&&elem.parentNode.selectedIndex,!0===elem.selected},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling)if(elem.nodeType<6)return!1;return!0},parent:function(elem){return!Expr.pseudos.empty(elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&"button"===elem.type||"button"===name},text:function(elem){var attr;return"input"===elem.nodeName.toLowerCase()&&"text"===elem.type&&(null==(attr=elem.getAttribute("type"))||"text"===attr.toLowerCase())},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){for(var i=0;i<length;i+=2)matchIndexes.push(i);return matchIndexes}),odd:createPositionalPseudo(function(matchIndexes,length){for(var i=1;i<length;i+=2)matchIndexes.push(i);return matchIndexes}),lt:createPositionalPseudo(function(matchIndexes,length,argument){for(var i=argument<0?argument+length:argument;--i>=0;)matchIndexes.push(i);return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){for(var i=argument<0?argument+length:argument;++i<length;)matchIndexes.push(i);return matchIndexes})}},Expr.pseudos.nth=Expr.pseudos.eq;for(i in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})Expr.pseudos[i]=createInputPseudo(i);for(i in{submit:!0,reset:!0})Expr.pseudos[i]=createButtonPseudo(i);return setFilters.prototype=Expr.filters=Expr.pseudos,Expr.setFilters=new setFilters,tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached)return parseOnly?0:cached.slice(0);for(soFar=selector,groups=[],preFilters=Expr.preFilter;soFar;){matched&&!(match=rcomma.exec(soFar))||(match&&(soFar=soFar.slice(match[0].length)||soFar),groups.push(tokens=[])),matched=!1,(match=rcombinators.exec(soFar))&&(matched=match.shift(),tokens.push({value:matched,type:match[0].replace(rtrim," ")}),soFar=soFar.slice(matched.length));for(type in Expr.filter)!(match=matchExpr[type].exec(soFar))||preFilters[type]&&!(match=preFilters[type](match))||(matched=match.shift(),tokens.push({value:matched,type:type,matches:match}),soFar=soFar.slice(matched.length));if(!matched)break}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)},compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){for(match||(match=tokenize(selector)),i=match.length;i--;)cached=matcherFromTokens(match[i]),cached[expando]?setMatchers.push(cached):elementMatchers.push(cached);cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers)),cached.selector=selector}return cached},select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled="function"==typeof selector&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);if(results=results||[],1===match.length){if(tokens=match[0]=match[0].slice(0),tokens.length>2&&"ID"===(token=tokens[0]).type&&support.getById&&9===context.nodeType&&documentIsHTML&&Expr.relative[tokens[1].type]){if(!(context=(Expr.find.ID(token.matches[0].replace(runescape,funescape),context)||[])[0]))return results;compiled&&(context=context.parentNode),selector=selector.slice(tokens.shift().value.length)}for(i=matchExpr.needsContext.test(selector)?0:tokens.length;i--&&(token=tokens[i],!Expr.relative[type=token.type]);)if((find=Expr.find[type])&&(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context))){if(tokens.splice(i,1),!(selector=seed.length&&toSelector(tokens)))return push.apply(results,seed),results;break}}return(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context),results},support.sortStable=expando.split("").sort(sortOrder).join("")===expando,support.detectDuplicates=!!hasDuplicate,setDocument(),support.sortDetached=assert(function(div1){return 1&div1.compareDocumentPosition(document.createElement("div"))}),assert(function(div){return div.innerHTML="<a href='#'></a>","#"===div.firstChild.getAttribute("href")})||addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML)return elem.getAttribute(name,"type"===name.toLowerCase()?1:2)}),support.attributes&&assert(function(div){return div.innerHTML="<input/>",div.firstChild.setAttribute("value",""),""===div.firstChild.getAttribute("value")})||addHandle("value",function(elem,name,isXML){if(!isXML&&"input"===elem.nodeName.toLowerCase())return elem.defaultValue}),assert(function(div){return null==div.getAttribute("disabled")})||addHandle(booleans,function(elem,name,isXML){var val;if(!isXML)return!0===elem[name]?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}),Sizzle}(window);jQuery.find=Sizzle,jQuery.expr=Sizzle.selectors,jQuery.expr[":"]=jQuery.expr.pseudos,jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort,jQuery.text=Sizzle.getText,jQuery.isXMLDoc=Sizzle.isXML,jQuery.contains=Sizzle.contains;var dir=function(elem,dir,until){for(var matched=[],truncate=void 0!==until;(elem=elem[dir])&&9!==elem.nodeType;)if(1===elem.nodeType){if(truncate&&jQuery(elem).is(until))break;matched.push(elem)}return matched},siblings=function(n,elem){for(var matched=[];n;n=n.nextSibling)1===n.nodeType&&n!==elem&&matched.push(n);return matched},rneedsContext=jQuery.expr.match.needsContext,rsingleTag=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,risSimple=/^.[^:#\[\.,]*$/;jQuery.filter=function(expr,elems,not){var elem=elems[0];return not&&(expr=":not("+expr+")"),1===elems.length&&1===elem.nodeType?jQuery.find.matchesSelector(elem,expr)?[elem]:[]:jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return 1===elem.nodeType}))},jQuery.fn.extend({find:function(selector){var i,ret=[],self=this,len=self.length;if("string"!=typeof selector)return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++)if(jQuery.contains(self[i],this))return!0}));for(i=0;i<len;i++)jQuery.find(selector,self[i],ret);return ret=this.pushStack(len>1?jQuery.unique(ret):ret),ret.selector=this.selector?this.selector+" "+selector:selector,ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],!1))},not:function(selector){return this.pushStack(winnow(this,selector||[],!0))},is:function(selector){return!!winnow(this,"string"==typeof selector&&rneedsContext.test(selector)?jQuery(selector):selector||[],!1).length}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector)return this;if(root=root||rootjQuery,"string"==typeof selector){if(!(match="<"===selector.charAt(0)&&">"===selector.charAt(selector.length-1)&&selector.length>=3?[null,selector,null]:rquickExpr.exec(selector))||!match[1]&&context)return!context||context.jquery?(context||root).find(selector):this.constructor(context).find(selector);if(match[1]){if(context=context instanceof jQuery?context[0]:context,jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,!0)),rsingleTag.test(match[1])&&jQuery.isPlainObject(context))for(match in context)jQuery.isFunction(this[match])?this[match](context[match]):this.attr(match,context[match]);return this}if((elem=document.getElementById(match[2]))&&elem.parentNode){if(elem.id!==match[2])return rootjQuery.find(selector);this.length=1,this[0]=elem}return this.context=document,this.selector=selector,this}return selector.nodeType?(this.context=this[0]=selector,this.length=1,this):jQuery.isFunction(selector)?void 0!==root.ready?root.ready(selector):selector(jQuery):(void 0!==selector.selector&&(this.selector=selector.selector,this.context=selector.context),jQuery.makeArray(selector,this))}).prototype=jQuery.fn,rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:!0,contents:!0,next:!0,prev:!0};jQuery.fn.extend({has:function(target){var i,targets=jQuery(target,this),len=targets.length;return this.filter(function(){for(i=0;i<len;i++)if(jQuery.contains(this,targets[i]))return!0})},closest:function(selectors,context){for(var cur,i=0,l=this.length,matched=[],pos=rneedsContext.test(selectors)||"string"!=typeof selectors?jQuery(selectors,context||this.context):0;i<l;i++)for(cur=this[i];cur&&cur!==context;cur=cur.parentNode)if(cur.nodeType<11&&(pos?pos.index(cur)>-1:1===cur.nodeType&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched)},index:function(elem){return elem?"string"==typeof elem?jQuery.inArray(this[0],jQuery(elem)):jQuery.inArray(elem.jquery?elem[0]:elem,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(null==selector?this.prevObject:this.prevObject.filter(selector))}}),jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&11!==parent.nodeType?parent:null},parents:function(elem){return dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return dir(elem,"nextSibling")},prevAll:function(elem){return dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return dir(elem,"previousSibling",until)},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem)},children:function(elem){return siblings(elem.firstChild)},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);return"Until"!==name.slice(-5)&&(selector=until),selector&&"string"==typeof selector&&(ret=jQuery.filter(selector,ret)),this.length>1&&(guaranteedUnique[name]||(ret=jQuery.uniqueSort(ret)),rparentsprev.test(name)&&(ret=ret.reverse())),this.pushStack(ret)}});var rnotwhite=/\S+/g;jQuery.Callbacks=function(options){options="string"==typeof options?createOptions(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){for(locked=options.once,fired=firing=!0;queue.length;firingIndex=-1)for(memory=queue.shift();++firingIndex<list.length;)!1===list[firingIndex].apply(memory[0],memory[1])&&options.stopOnFalse&&(firingIndex=list.length,memory=!1);options.memory||(memory=!1),firing=!1,locked&&(list=memory?[]:"")},self={add:function(){return list&&(memory&&!firing&&(firingIndex=list.length-1,queue.push(memory)),function add(args){jQuery.each(args,function(_,arg){jQuery.isFunction(arg)?options.unique&&self.has(arg)||list.push(arg):arg&&arg.length&&"string"!==jQuery.type(arg)&&add(arg)})}(arguments),memory&&!firing&&fire()),this},remove:function(){return jQuery.each(arguments,function(_,arg){for(var index;(index=jQuery.inArray(arg,list,index))>-1;)list.splice(index,1),index<=firingIndex&&firingIndex--}),this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0},empty:function(){return list&&(list=[]),this},disable:function(){return locked=queue=[],list=memory="",this},disabled:function(){return!list},lock:function(){return locked=!0,memory||self.disable(),this},locked:function(){return!!locked},fireWith:function(context,args){return locked||(args=args||[],args=[context,args.slice?args.slice():args],queue.push(args),firing||fire()),this},fire:function(){return self.fireWith(this,arguments),this},fired:function(){return!!fired}};return self},jQuery.extend({Deferred:function(func){var tuples=[["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],state="pending",promise={state:function(){return state},always:function(){return deferred.done(arguments).fail(arguments),this},then:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[i])&&fns[i];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);returned&&jQuery.isFunction(returned.promise)?returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject):newDefer[tuple[0]+"With"](this===promise?newDefer.promise():this,fn?[returned]:arguments)})}),fns=null}).promise()},promise:function(obj){return null!=obj?jQuery.extend(obj,promise):promise}},deferred={};return promise.pipe=promise.then,jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];promise[tuple[1]]=list.add,stateString&&list.add(function(){state=stateString},tuples[1^i][2].disable,tuples[2][2].lock),deferred[tuple[0]]=function(){return deferred[tuple[0]+"With"](this===deferred?promise:this,arguments),this},deferred[tuple[0]+"With"]=list.fireWith}),promise.promise(deferred),func&&func.call(deferred,deferred),deferred},when:function(subordinate){var progressValues,progressContexts,resolveContexts,i=0,resolveValues=slice.call(arguments),length=resolveValues.length,remaining=1!==length||subordinate&&jQuery.isFunction(subordinate.promise)?length:0,deferred=1===remaining?subordinate:jQuery.Deferred(),updateFunc=function(i,contexts,values){return function(value){contexts[i]=this,values[i]=arguments.length>1?slice.call(arguments):value,values===progressValues?deferred.notifyWith(contexts,values):--remaining||deferred.resolveWith(contexts,values)}};if(length>1)for(progressValues=new Array(length),progressContexts=new Array(length),resolveContexts=new Array(length);i<length;i++)resolveValues[i]&&jQuery.isFunction(resolveValues[i].promise)?resolveValues[i].promise().progress(updateFunc(i,progressContexts,progressValues)).done(updateFunc(i,resolveContexts,resolveValues)).fail(deferred.reject):--remaining;return remaining||deferred.resolveWith(resolveContexts,resolveValues),deferred.promise()}});var readyList;jQuery.fn.ready=function(fn){return jQuery.ready.promise().done(fn),this},jQuery.extend({isReady:!1,readyWait:1,holdReady:function(hold){hold?jQuery.readyWait++:jQuery.ready(!0)},ready:function(wait){(!0===wait?--jQuery.readyWait:jQuery.isReady)||(jQuery.isReady=!0,!0!==wait&&--jQuery.readyWait>0||(readyList.resolveWith(document,[jQuery]),jQuery.fn.triggerHandler&&(jQuery(document).triggerHandler("ready"),jQuery(document).off("ready"))))}}),jQuery.ready.promise=function(obj){if(!readyList)if(readyList=jQuery.Deferred(),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll)window.setTimeout(jQuery.ready);else if(document.addEventListener)document.addEventListener("DOMContentLoaded",completed),window.addEventListener("load",completed);else{document.attachEvent("onreadystatechange",completed),window.attachEvent("onload",completed);var top=!1;try{top=null==window.frameElement&&document.documentElement}catch(e){}top&&top.doScroll&&function doScrollCheck(){if(!jQuery.isReady){try{top.doScroll("left")}catch(e){return window.setTimeout(doScrollCheck,50)}detach(),jQuery.ready()}}()}return readyList.promise(obj)},jQuery.ready.promise();var i;for(i in jQuery(support))break;support.ownFirst="0"===i,support.inlineBlockNeedsLayout=!1,jQuery(function(){var val,div,body,container;(body=document.getElementsByTagName("body")[0])&&body.style&&(div=document.createElement("div"),container=document.createElement("div"),container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",body.appendChild(container).appendChild(div),void 0!==div.style.zoom&&(div.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",support.inlineBlockNeedsLayout=val=3===div.offsetWidth,val&&(body.style.zoom=1)),body.removeChild(container))}),function(){var div=document.createElement("div");support.deleteExpando=!0;try{delete div.test}catch(e){support.deleteExpando=!1}div=null}();var acceptData=function(elem){var noData=jQuery.noData[(elem.nodeName+" ").toLowerCase()],nodeType=+elem.nodeType||1;return(1===nodeType||9===nodeType)&&(!noData||!0!==noData&&elem.getAttribute("classid")===noData)},rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/([A-Z])/g;jQuery.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(elem){return!!(elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando])&&!isEmptyDataObject(elem)},data:function(elem,name,data){return internalData(elem,name,data)},removeData:function(elem,name){return internalRemoveData(elem,name)},_data:function(elem,name,data){return internalData(elem,name,data,!0)},_removeData:function(elem,name){return internalRemoveData(elem,name,!0)}}),jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(void 0===key){if(this.length&&(data=jQuery.data(elem),1===elem.nodeType&&!jQuery._data(elem,"parsedAttrs"))){for(i=attrs.length;i--;)attrs[i]&&(name=attrs[i].name,0===name.indexOf("data-")&&(name=jQuery.camelCase(name.slice(5)),dataAttr(elem,name,data[name])));jQuery._data(elem,"parsedAttrs",!0)}return data}return"object"==typeof key?this.each(function(){jQuery.data(this,key)}):arguments.length>1?this.each(function(){jQuery.data(this,key,value)}):elem?dataAttr(elem,key,jQuery.data(elem,key)):void 0},removeData:function(key){return this.each(function(){jQuery.removeData(this,key)})}}),jQuery.extend({queue:function(elem,type,data){var queue;if(elem)return type=(type||"fx")+"queue",queue=jQuery._data(elem,type),data&&(!queue||jQuery.isArray(data)?queue=jQuery._data(elem,type,jQuery.makeArray(data)):queue.push(data)),queue||[]},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};"inprogress"===fn&&(fn=queue.shift(),startLength--),fn&&("fx"===type&&queue.unshift("inprogress"),delete hooks.stop,fn.call(elem,next,hooks)),!startLength&&hooks&&hooks.empty.fire()},_queueHooks:function(elem,type){var key=type+"queueHooks";return jQuery._data(elem,key)||jQuery._data(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){jQuery._removeData(elem,type+"queue"),jQuery._removeData(elem,key)})})}}),jQuery.fn.extend({queue:function(type,data){var setter=2;return"string"!=typeof type&&(data=type,type="fx",setter--),arguments.length<setter?jQuery.queue(this[0],type):void 0===data?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type),"fx"===type&&"inprogress"!==queue[0]&&jQuery.dequeue(this,type)})},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type)})},clearQueue:function(type){return this.queue(type||"fx",[])},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){--count||defer.resolveWith(elements,[elements])};for("string"!=typeof type&&(obj=type,type=void 0),type=type||"fx";i--;)(tmp=jQuery._data(elements[i],type+"queueHooks"))&&tmp.empty&&(count++,tmp.empty.add(resolve));return resolve(),defer.promise(obj)}}),function(){var shrinkWrapBlocksVal;support.shrinkWrapBlocks=function(){if(null!=shrinkWrapBlocksVal)return shrinkWrapBlocksVal;shrinkWrapBlocksVal=!1;var div,body,container;return(body=document.getElementsByTagName("body")[0])&&body.style?(div=document.createElement("div"),container=document.createElement("div"),container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",body.appendChild(container).appendChild(div),void 0!==div.style.zoom&&(div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",div.appendChild(document.createElement("div")).style.width="5px",shrinkWrapBlocksVal=3!==div.offsetWidth),body.removeChild(container),shrinkWrapBlocksVal):void 0}}();var pnum=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,rcssNum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i"),cssExpand=["Top","Right","Bottom","Left"],isHidden=function(elem,el){return elem=el||elem,"none"===jQuery.css(elem,"display")||!jQuery.contains(elem.ownerDocument,elem)},access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,length=elems.length,bulk=null==key;if("object"===jQuery.type(key)){chainable=!0;for(i in key)access(elems,fn,i,key[i],!0,emptyGet,raw)}else if(void 0!==value&&(chainable=!0,jQuery.isFunction(value)||(raw=!0),bulk&&(raw?(fn.call(elems,value),fn=null):(bulk=fn,fn=function(elem,key,value){return bulk.call(jQuery(elem),value)})),fn))for(;i<length;i++)fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)));return chainable?elems:bulk?fn.call(elems):length?fn(elems[0],key):emptyGet},rcheckableType=/^(?:checkbox|radio)$/i,rtagName=/<([\w:-]+)/,rscriptType=/^$|\/(?:java|ecma)script/i,rleadingWhitespace=/^\s+/,nodeNames="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";!function(){var div=document.createElement("div"),fragment=document.createDocumentFragment(),input=document.createElement("input");div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",support.leadingWhitespace=3===div.firstChild.nodeType,support.tbody=!div.getElementsByTagName("tbody").length,support.htmlSerialize=!!div.getElementsByTagName("link").length,support.html5Clone="<:nav></:nav>"!==document.createElement("nav").cloneNode(!0).outerHTML,input.type="checkbox",input.checked=!0,fragment.appendChild(input),support.appendChecked=input.checked,div.innerHTML="<textarea>x</textarea>",support.noCloneChecked=!!div.cloneNode(!0).lastChild.defaultValue,fragment.appendChild(div),input=document.createElement("input"),input.setAttribute("type","radio"),input.setAttribute("checked","checked"),input.setAttribute("name","t"),div.appendChild(input),support.checkClone=div.cloneNode(!0).cloneNode(!0).lastChild.checked,support.noCloneEvent=!!div.addEventListener,div[jQuery.expando]=1,support.attributes=!div.getAttribute(jQuery.expando)}();var wrapMap={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};wrapMap.optgroup=wrapMap.option,wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead,wrapMap.th=wrapMap.td;var rhtml=/<|&#?\w+;/,rtbody=/<tbody/i;!function(){var i,eventName,div=document.createElement("div");for(i in{submit:!0,change:!0,focusin:!0})eventName="on"+i,(support[i]=eventName in window)||(div.setAttribute(eventName,"t"),support[i]=!1===div.attributes[eventName].expando);div=null}();var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;jQuery.event={global:{},add:function(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=jQuery._data(elem);if(elemData){for(handler.handler&&(handleObjIn=handler,handler=handleObjIn.handler,selector=handleObjIn.selector),handler.guid||(handler.guid=jQuery.guid++),(events=elemData.events)||(events=elemData.events={}),(eventHandle=elemData.handle)||(eventHandle=elemData.handle=function(e){return void 0===jQuery||e&&jQuery.event.triggered===e.type?void 0:jQuery.event.dispatch.apply(eventHandle.elem,arguments)},eventHandle.elem=elem),types=(types||"").match(rnotwhite)||[""],t=types.length;t--;)tmp=rtypenamespace.exec(types[t])||[],type=origType=tmp[1],namespaces=(tmp[2]||"").split(".").sort(),type&&(special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,special=jQuery.event.special[type]||{},handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn),(handlers=events[type])||(handlers=events[type]=[],handlers.delegateCount=0,special.setup&&!1!==special.setup.call(elem,data,namespaces,eventHandle)||(elem.addEventListener?elem.addEventListener(type,eventHandle,!1):elem.attachEvent&&elem.attachEvent("on"+type,eventHandle))),special.add&&(special.add.call(elem,handleObj),handleObj.handler.guid||(handleObj.handler.guid=handler.guid)),selector?handlers.splice(handlers.delegateCount++,0,handleObj):handlers.push(handleObj),jQuery.event.global[type]=!0);elem=null}},remove:function(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=jQuery.hasData(elem)&&jQuery._data(elem);if(elemData&&(events=elemData.events)){for(types=(types||"").match(rnotwhite)||[""],t=types.length;t--;)if(tmp=rtypenamespace.exec(types[t])||[],type=origType=tmp[1],namespaces=(tmp[2]||"").split(".").sort(),type){for(special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,handlers=events[type]||[],tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"),origCount=j=handlers.length;j--;)handleObj=handlers[j],!mappedTypes&&origType!==handleObj.origType||handler&&handler.guid!==handleObj.guid||tmp&&!tmp.test(handleObj.namespace)||selector&&selector!==handleObj.selector&&("**"!==selector||!handleObj.selector)||(handlers.splice(j,1),handleObj.selector&&handlers.delegateCount--,special.remove&&special.remove.call(elem,handleObj));origCount&&!handlers.length&&(special.teardown&&!1!==special.teardown.call(elem,namespaces,elemData.handle)||jQuery.removeEvent(elem,type,elemData.handle),delete events[type])}else for(type in events)jQuery.event.remove(elem,type+types[t],handler,selector,!0);jQuery.isEmptyObject(events)&&(delete elemData.handle,jQuery._removeData(elem,"events"))}},trigger:function(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];if(cur=tmp=elem=elem||document,3!==elem.nodeType&&8!==elem.nodeType&&!rfocusMorph.test(type+jQuery.event.triggered)&&(type.indexOf(".")>-1&&(namespaces=type.split("."),type=namespaces.shift(),namespaces.sort()),ontype=type.indexOf(":")<0&&"on"+type,event=event[jQuery.expando]?event:new jQuery.Event(type,"object"==typeof event&&event),event.isTrigger=onlyHandlers?2:3,event.namespace=namespaces.join("."),event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,event.result=void 0,event.target||(event.target=elem),data=null==data?[event]:jQuery.makeArray(data,[event]),special=jQuery.event.special[type]||{},onlyHandlers||!special.trigger||!1!==special.trigger.apply(elem,data))){if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){for(bubbleType=special.delegateType||type,rfocusMorph.test(bubbleType+type)||(cur=cur.parentNode);cur;cur=cur.parentNode)eventPath.push(cur),tmp=cur;tmp===(elem.ownerDocument||document)&&eventPath.push(tmp.defaultView||tmp.parentWindow||window)}for(i=0;(cur=eventPath[i++])&&!event.isPropagationStopped();)event.type=i>1?bubbleType:special.bindType||type,handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle"),handle&&handle.apply(cur,data),(handle=ontype&&cur[ontype])&&handle.apply&&acceptData(cur)&&(event.result=handle.apply(cur,data),!1===event.result&&event.preventDefault());if(event.type=type,!onlyHandlers&&!event.isDefaultPrevented()&&(!special._default||!1===special._default.apply(eventPath.pop(),data))&&acceptData(elem)&&ontype&&elem[type]&&!jQuery.isWindow(elem)){tmp=elem[ontype],tmp&&(elem[ontype]=null),jQuery.event.triggered=type;try{elem[type]()}catch(e){}jQuery.event.triggered=void 0,tmp&&(elem[ontype]=tmp)}return event.result}},dispatch:function(event){event=jQuery.event.fix(event);var i,j,ret,matched,handleObj,handlerQueue=[],args=slice.call(arguments),handlers=(jQuery._data(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};if(args[0]=event,event.delegateTarget=this,!special.preDispatch||!1!==special.preDispatch.call(this,event)){for(handlerQueue=jQuery.event.handlers.call(this,event,handlers),i=0;(matched=handlerQueue[i++])&&!event.isPropagationStopped();)for(event.currentTarget=matched.elem,j=0;(handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped();)event.rnamespace&&!event.rnamespace.test(handleObj.namespace)||(event.handleObj=handleObj,event.data=handleObj.data,void 0!==(ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args))&&!1===(event.result=ret)&&(event.preventDefault(),event.stopPropagation()));return special.postDispatch&&special.postDispatch.call(this,event),event.result}},handlers:function(event,handlers){var i,matches,sel,handleObj,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&("click"!==event.type||isNaN(event.button)||event.button<1))for(;cur!=this;cur=cur.parentNode||this)if(1===cur.nodeType&&(!0!==cur.disabled||"click"!==event.type)){for(matches=[],i=0;i<delegateCount;i++)handleObj=handlers[i],sel=handleObj.selector+" ",void 0===matches[sel]&&(matches[sel]=handleObj.needsContext?jQuery(sel,this).index(cur)>-1:jQuery.find(sel,this,null,[cur]).length),matches[sel]&&matches.push(handleObj);matches.length&&handlerQueue.push({elem:cur,handlers:matches})}return delegateCount<handlers.length&&handlerQueue.push({elem:this,handlers:handlers.slice(delegateCount)}),handlerQueue},fix:function(event){if(event[jQuery.expando])return event;var i,prop,copy,type=event.type,originalEvent=event,fixHook=this.fixHooks[type];for(fixHook||(this.fixHooks[type]=fixHook=rmouseEvent.test(type)?this.mouseHooks:rkeyEvent.test(type)?this.keyHooks:{}),copy=fixHook.props?this.props.concat(fixHook.props):this.props,event=new jQuery.Event(originalEvent),i=copy.length;i--;)prop=copy[i],event[prop]=originalEvent[prop];return event.target||(event.target=originalEvent.srcElement||document),3===event.target.nodeType&&(event.target=event.target.parentNode),event.metaKey=!!event.metaKey,fixHook.filter?fixHook.filter(event,originalEvent):event},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(event,original){return null==event.which&&(event.which=null!=original.charCode?original.charCode:original.keyCode),event}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(event,original){var body,eventDoc,doc,button=original.button,fromElement=original.fromElement;return null==event.pageX&&null!=original.clientX&&(eventDoc=event.target.ownerDocument||document,doc=eventDoc.documentElement,body=eventDoc.body,event.pageX=original.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0),event.pageY=original.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0)),!event.relatedTarget&&fromElement&&(event.relatedTarget=fromElement===event.target?original.toElement:fromElement),event.which||void 0===button||(event.which=1&button?1:2&button?3:4&button?2:0),event}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==safeActiveElement()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){if(this===safeActiveElement()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(jQuery.nodeName(this,"input")&&"checkbox"===this.type&&this.click)return this.click(),!1},_default:function(event){return jQuery.nodeName(event.target,"a")}},beforeunload:{postDispatch:function(event){void 0!==event.result&&event.originalEvent&&(event.originalEvent.returnValue=event.result)}}},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:!0});jQuery.event.trigger(e,null,elem),e.isDefaultPrevented()&&event.preventDefault()}},jQuery.removeEvent=document.removeEventListener?function(elem,type,handle){elem.removeEventListener&&elem.removeEventListener(type,handle)}:function(elem,type,handle){var name="on"+type;elem.detachEvent&&(void 0===elem[name]&&(elem[name]=null),elem.detachEvent(name,handle))},jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event))return new jQuery.Event(src,props);src&&src.type?(this.originalEvent=src,this.type=src.type,this.isDefaultPrevented=src.defaultPrevented||void 0===src.defaultPrevented&&!1===src.returnValue?returnTrue:returnFalse):this.type=src,props&&jQuery.extend(this,props),this.timeStamp=src&&src.timeStamp||jQuery.now(),this[jQuery.expando]=!0},jQuery.Event.prototype={constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue,e&&!this.isSimulated&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;return related&&(related===target||jQuery.contains(target,related))||(event.type=handleObj.origType,ret=handleObj.handler.apply(this,arguments),event.type=fix),ret}}}),support.submit||(jQuery.event.special.submit={setup:function(){if(jQuery.nodeName(this,"form"))return!1;jQuery.event.add(this,"click._submit keypress._submit",function(e){var elem=e.target,form=jQuery.nodeName(elem,"input")||jQuery.nodeName(elem,"button")?jQuery.prop(elem,"form"):void 0;form&&!jQuery._data(form,"submit")&&(jQuery.event.add(form,"submit._submit",function(event){event._submitBubble=!0}),jQuery._data(form,"submit",!0))})},postDispatch:function(event){event._submitBubble&&(delete event._submitBubble,this.parentNode&&!event.isTrigger&&jQuery.event.simulate("submit",this.parentNode,event))},teardown:function(){if(jQuery.nodeName(this,"form"))return!1;jQuery.event.remove(this,"._submit")}}),support.change||(jQuery.event.special.change={setup:function(){if(rformElems.test(this.nodeName))return"checkbox"!==this.type&&"radio"!==this.type||(jQuery.event.add(this,"propertychange._change",function(event){"checked"===event.originalEvent.propertyName&&(this._justChanged=!0)}),jQuery.event.add(this,"click._change",function(event){this._justChanged&&!event.isTrigger&&(this._justChanged=!1),jQuery.event.simulate("change",this,event)})),!1;jQuery.event.add(this,"beforeactivate._change",function(e){var elem=e.target;rformElems.test(elem.nodeName)&&!jQuery._data(elem,"change")&&(jQuery.event.add(elem,"change._change",function(event){!this.parentNode||event.isSimulated||event.isTrigger||jQuery.event.simulate("change",this.parentNode,event)}),jQuery._data(elem,"change",!0))})},handle:function(event){var elem=event.target;if(this!==elem||event.isSimulated||event.isTrigger||"radio"!==elem.type&&"checkbox"!==elem.type)return event.handleObj.handler.apply(this,arguments)},teardown:function(){return jQuery.event.remove(this,"._change"),!rformElems.test(this.nodeName)}}),support.focusin||jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event))};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=jQuery._data(doc,fix);attaches||doc.addEventListener(orig,handler,!0),jQuery._data(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=jQuery._data(doc,fix)-1;attaches?jQuery._data(doc,fix,attaches):(doc.removeEventListener(orig,handler,!0),jQuery._removeData(doc,fix))}}}),jQuery.fn.extend({on:function(types,selector,data,fn){return on(this,types,selector,data,fn)},one:function(types,selector,data,fn){return on(this,types,selector,data,fn,1)},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj)return handleObj=types.handleObj,jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler),this;if("object"==typeof types){for(type in types)this.off(type,selector,types[type]);return this}return!1!==selector&&"function"!=typeof selector||(fn=selector,selector=void 0),!1===fn&&(fn=returnFalse),this.each(function(){jQuery.event.remove(this,types,fn,selector)})},trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem)return jQuery.event.trigger(type,data,elem,!0)}});var rinlinejQuery=/ jQuery\d+="(?:null|\d+)"/g,rnoshimcache=new RegExp("<(?:"+nodeNames+")[\\s/>]","i"),rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,rnoInnerhtml=/<script|<style|<link/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rscriptTypeMasked=/^true\/(.*)/,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));jQuery.extend({htmlPrefilter:function(html){return html.replace(rxhtmlTag,"<$1></$2>")},clone:function(elem,dataAndEvents,deepDataAndEvents){var destElements,node,clone,i,srcElements,inPage=jQuery.contains(elem.ownerDocument,elem);if(support.html5Clone||jQuery.isXMLDoc(elem)||!rnoshimcache.test("<"+elem.nodeName+">")?clone=elem.cloneNode(!0):(fragmentDiv.innerHTML=elem.outerHTML,fragmentDiv.removeChild(clone=fragmentDiv.firstChild)),!(support.noCloneEvent&&support.noCloneChecked||1!==elem.nodeType&&11!==elem.nodeType||jQuery.isXMLDoc(elem)))for(destElements=getAll(clone),srcElements=getAll(elem),i=0;null!=(node=srcElements[i]);++i)destElements[i]&&fixCloneNodeIssues(node,destElements[i]);if(dataAndEvents)if(deepDataAndEvents)for(srcElements=srcElements||getAll(elem),destElements=destElements||getAll(clone),i=0;null!=(node=srcElements[i]);i++)cloneCopyEvent(node,destElements[i]);else cloneCopyEvent(elem,clone);return destElements=getAll(clone,"script"),destElements.length>0&&setGlobalEval(destElements,!inPage&&getAll(elem,"script")),destElements=srcElements=node=null,clone},cleanData:function(elems,forceAcceptData){for(var elem,type,id,data,i=0,internalKey=jQuery.expando,cache=jQuery.cache,attributes=support.attributes,special=jQuery.event.special;null!=(elem=elems[i]);i++)if((forceAcceptData||acceptData(elem))&&(id=elem[internalKey],data=id&&cache[id])){if(data.events)for(type in data.events)special[type]?jQuery.event.remove(elem,type):jQuery.removeEvent(elem,type,data.handle);cache[id]&&(delete cache[id],attributes||void 0===elem.removeAttribute?elem[internalKey]=void 0:elem.removeAttribute(internalKey),deletedIds.push(id))}}}),jQuery.fn.extend({domManip:domManip,detach:function(selector){return remove(this,selector,!0)},remove:function(selector){return remove(this,selector)},text:function(value){return access(this,function(value){return void 0===value?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},append:function(){return domManip(this,arguments,function(elem){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){manipulationTarget(this,elem).appendChild(elem)}})},prepend:function(){return domManip(this,arguments,function(elem){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return domManip(this,arguments,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this)})},after:function(){return domManip(this,arguments,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this.nextSibling)})},empty:function(){for(var elem,i=0;null!=(elem=this[i]);i++){for(1===elem.nodeType&&jQuery.cleanData(getAll(elem,!1));elem.firstChild;)elem.removeChild(elem.firstChild);elem.options&&jQuery.nodeName(elem,"select")&&(elem.options.length=0)}return this},clone:function(dataAndEvents,deepDataAndEvents){return dataAndEvents=null!=dataAndEvents&&dataAndEvents,deepDataAndEvents=null==deepDataAndEvents?dataAndEvents:deepDataAndEvents,this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(void 0===value)return 1===elem.nodeType?elem.innerHTML.replace(rinlinejQuery,""):void 0;if("string"==typeof value&&!rnoInnerhtml.test(value)&&(support.htmlSerialize||!rnoshimcache.test(value))&&(support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i<l;i++)elem=this[i]||{},1===elem.nodeType&&(jQuery.cleanData(getAll(elem,!1)),elem.innerHTML=value);elem=0}catch(e){}}elem&&this.empty().append(value)},null,value,arguments.length)},replaceWith:function(){var ignored=[];return domManip(this,arguments,function(elem){var parent=this.parentNode;jQuery.inArray(this,ignored)<0&&(jQuery.cleanData(getAll(this)),parent&&parent.replaceChild(elem,this))},ignored)}}),jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){for(var elems,i=0,ret=[],insert=jQuery(selector),last=insert.length-1;i<=last;i++)elems=i===last?this:this.clone(!0),jQuery(insert[i])[original](elems),push.apply(ret,elems.get());return this.pushStack(ret)}});var iframe,elemdisplay={HTML:"block",BODY:"block"},rmargin=/^margin/,rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i"),swap=function(elem,options,callback,args){var ret,name,old={};for(name in options)old[name]=elem.style[name],elem.style[name]=options[name];ret=callback.apply(elem,args||[]);for(name in options)elem.style[name]=old[name];return ret},documentElement=document.documentElement;!function(){function computeStyleTests(){var contents,divStyle,documentElement=document.documentElement;documentElement.appendChild(container),div.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",pixelPositionVal=boxSizingReliableVal=reliableMarginLeftVal=!1,pixelMarginRightVal=reliableMarginRightVal=!0,window.getComputedStyle&&(divStyle=window.getComputedStyle(div),pixelPositionVal="1%"!==(divStyle||{}).top,reliableMarginLeftVal="2px"===(divStyle||{}).marginLeft,boxSizingReliableVal="4px"===(divStyle||{width:"4px"}).width,div.style.marginRight="50%",pixelMarginRightVal="4px"===(divStyle||{marginRight:"4px"}).marginRight,contents=div.appendChild(document.createElement("div")),contents.style.cssText=div.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",contents.style.marginRight=contents.style.width="0",div.style.width="1px",reliableMarginRightVal=!parseFloat((window.getComputedStyle(contents)||{}).marginRight),div.removeChild(contents)),div.style.display="none",reliableHiddenOffsetsVal=0===div.getClientRects().length,reliableHiddenOffsetsVal&&(div.style.display="",div.innerHTML="<table><tr><td></td><td>t</td></tr></table>",div.childNodes[0].style.borderCollapse="separate",contents=div.getElementsByTagName("td"),contents[0].style.cssText="margin:0;border:0;padding:0;display:none",(reliableHiddenOffsetsVal=0===contents[0].offsetHeight)&&(contents[0].style.display="",contents[1].style.display="none",reliableHiddenOffsetsVal=0===contents[0].offsetHeight)),documentElement.removeChild(container)}var pixelPositionVal,pixelMarginRightVal,boxSizingReliableVal,reliableHiddenOffsetsVal,reliableMarginRightVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");div.style&&(div.style.cssText="float:left;opacity:.5",support.opacity="0.5"===div.style.opacity,support.cssFloat=!!div.style.cssFloat,div.style.backgroundClip="content-box",div.cloneNode(!0).style.backgroundClip="",support.clearCloneStyle="content-box"===div.style.backgroundClip,container=document.createElement("div"),container.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",div.innerHTML="",container.appendChild(div),support.boxSizing=""===div.style.boxSizing||""===div.style.MozBoxSizing||""===div.style.WebkitBoxSizing,jQuery.extend(support,{reliableHiddenOffsets:function(){return null==pixelPositionVal&&computeStyleTests(),reliableHiddenOffsetsVal},boxSizingReliable:function(){return null==pixelPositionVal&&computeStyleTests(),boxSizingReliableVal},pixelMarginRight:function(){return null==pixelPositionVal&&computeStyleTests(),pixelMarginRightVal},pixelPosition:function(){return null==pixelPositionVal&&computeStyleTests(),pixelPositionVal},reliableMarginRight:function(){return null==pixelPositionVal&&computeStyleTests(),reliableMarginRightVal},reliableMarginLeft:function(){return null==pixelPositionVal&&computeStyleTests(),reliableMarginLeftVal}}))}();var getStyles,curCSS,rposition=/^(top|right|bottom|left)$/;window.getComputedStyle?(getStyles=function(elem){var view=elem.ownerDocument.defaultView;return view&&view.opener||(view=window),view.getComputedStyle(elem)},curCSS=function(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;return computed=computed||getStyles(elem),ret=computed?computed.getPropertyValue(name)||computed[name]:void 0,""!==ret&&void 0!==ret||jQuery.contains(elem.ownerDocument,elem)||(ret=jQuery.style(elem,name)),computed&&!support.pixelMarginRight()&&rnumnonpx.test(ret)&&rmargin.test(name)&&(width=style.width,minWidth=style.minWidth,maxWidth=style.maxWidth,style.minWidth=style.maxWidth=style.width=ret,ret=computed.width,style.width=width,style.minWidth=minWidth,style.maxWidth=maxWidth),void 0===ret?ret:ret+""}):documentElement.currentStyle&&(getStyles=function(elem){return elem.currentStyle},curCSS=function(elem,name,computed){var left,rs,rsLeft,ret,style=elem.style;return computed=computed||getStyles(elem),ret=computed?computed[name]:void 0,null==ret&&style&&style[name]&&(ret=style[name]),rnumnonpx.test(ret)&&!rposition.test(name)&&(left=style.left,rs=elem.runtimeStyle,rsLeft=rs&&rs.left,rsLeft&&(rs.left=elem.currentStyle.left),style.left="fontSize"===name?"1em":ret,ret=style.pixelLeft+"px",style.left=left,rsLeft&&(rs.left=rsLeft)),void 0===ret?ret:ret+""||"auto"});var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/i,rdisplayswap=/^(none|table(?!-c[ea]).+)/,rnumsplit=new RegExp("^("+pnum+")(.*)$","i"),cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","O","Moz","ms"],emptyStyle=document.createElement("div").style;jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return""===ret?"1":ret}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:support.cssFloat?"cssFloat":"styleFloat"},style:function(elem,name,value,extra){if(elem&&3!==elem.nodeType&&8!==elem.nodeType&&elem.style){var ret,type,hooks,origName=jQuery.camelCase(name),style=elem.style;if(name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(origName)||origName),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],void 0===value)return hooks&&"get"in hooks&&void 0!==(ret=hooks.get(elem,!1,extra))?ret:style[name];if(type=typeof value,"string"===type&&(ret=rcssNum.exec(value))&&ret[1]&&(value=adjustCSS(elem,name,ret),type="number"),null!=value&&value===value&&("number"===type&&(value+=ret&&ret[3]||(jQuery.cssNumber[origName]?"":"px")),support.clearCloneStyle||""!==value||0!==name.indexOf("background")||(style[name]="inherit"),!(hooks&&"set"in hooks&&void 0===(value=hooks.set(elem,value,extra)))))try{style[name]=value}catch(e){}}},css:function(elem,name,extra,styles){var num,val,hooks,origName=jQuery.camelCase(name);return name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(origName)||origName),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],hooks&&"get"in hooks&&(val=hooks.get(elem,!0,extra)),void 0===val&&(val=curCSS(elem,name,styles)),"normal"===val&&name in cssNormalTransform&&(val=cssNormalTransform[name]),""===extra||extra?(num=parseFloat(val),!0===extra||isFinite(num)?num||0:val):val}}),jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function(elem,computed,extra){if(computed)return rdisplayswap.test(jQuery.css(elem,"display"))&&0===elem.offsetWidth?swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra)}):getWidthOrHeight(elem,name,extra)},set:function(elem,value,extra){var styles=extra&&getStyles(elem);return setPositiveNumber(elem,value,extra?augmentWidthOrHeight(elem,name,extra,support.boxSizing&&"border-box"===jQuery.css(elem,"boxSizing",!1,styles),styles):0)}}}),support.opacity||(jQuery.cssHooks.opacity={get:function(elem,computed){return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":computed?"1":""},set:function(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+100*value+")":"",filter=currentStyle&&currentStyle.filter||style.filter||"";style.zoom=1,(value>=1||""===value)&&""===jQuery.trim(filter.replace(ralpha,""))&&style.removeAttribute&&(style.removeAttribute("filter"),""===value||currentStyle&&!currentStyle.filter)||(style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity)}}),jQuery.cssHooks.marginRight=addGetHookIf(support.reliableMarginRight,function(elem,computed){if(computed)return swap(elem,{display:"inline-block"},curCSS,[elem,"marginRight"])}),jQuery.cssHooks.marginLeft=addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed)return(parseFloat(curCSS(elem,"marginLeft"))||(jQuery.contains(elem.ownerDocument,elem)?elem.getBoundingClientRect().left-swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left}):0))+"px"}),jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){for(var i=0,expanded={},parts="string"==typeof value?value.split(" "):[value];i<4;i++)expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];return expanded}},rmargin.test(prefix)||(jQuery.cssHooks[prefix+suffix].set=setPositiveNumber)}),jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(jQuery.isArray(name)){for(styles=getStyles(elem),len=name.length;i<len;i++)map[name[i]]=jQuery.css(elem,name[i],!1,styles);return map}return void 0!==value?jQuery.style(elem,name,value):jQuery.css(elem,name)},name,value,arguments.length>1)},show:function(){return showHide(this,!0)},hide:function(){return showHide(this)},toggle:function(state){return"boolean"==typeof state?state?this.show():this.hide():this.each(function(){isHidden(this)?jQuery(this).show():jQuery(this).hide()})}}),jQuery.Tween=Tween,Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem,this.prop=prop,this.easing=easing||jQuery.easing._default,this.options=options,this.start=this.now=this.cur(),this.end=end,this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];return this.options.duration?this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration):this.pos=eased=percent,this.now=(this.end-this.start)*eased+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),hooks&&hooks.set?hooks.set(this):Tween.propHooks._default.set(this),this}},Tween.prototype.init.prototype=Tween.prototype,Tween.propHooks={_default:{get:function(tween){var result;return 1!==tween.elem.nodeType||null!=tween.elem[tween.prop]&&null==tween.elem.style[tween.prop]?tween.elem[tween.prop]:(result=jQuery.css(tween.elem,tween.prop,""),result&&"auto"!==result?result:0)},set:function(tween){jQuery.fx.step[tween.prop]?jQuery.fx.step[tween.prop](tween):1!==tween.elem.nodeType||null==tween.elem.style[jQuery.cssProps[tween.prop]]&&!jQuery.cssHooks[tween.prop]?tween.elem[tween.prop]=tween.now:jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}}},Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){tween.elem.nodeType&&tween.elem.parentNode&&(tween.elem[tween.prop]=tween.now)}},jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2},_default:"swing"},jQuery.fx=Tween.prototype.init,jQuery.fx.step={};var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;jQuery.Animation=jQuery.extend(Animation,{tweeners:{"*":[function(prop,value){var tween=this.createTween(prop,value);return adjustCSS(tween.elem,prop,rcssNum.exec(value),tween),tween}]},tweener:function(props,callback){jQuery.isFunction(props)?(callback=props,props=["*"]):props=props.match(rnotwhite);for(var prop,index=0,length=props.length;index<length;index++)prop=props[index],Animation.tweeners[prop]=Animation.tweeners[prop]||[],Animation.tweeners[prop].unshift(callback)},prefilters:[defaultPrefilter],prefilter:function(callback,prepend){prepend?Animation.prefilters.unshift(callback):Animation.prefilters.push(callback)}}),jQuery.speed=function(speed,easing,fn){var opt=speed&&"object"==typeof speed?jQuery.extend({},speed):{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};return opt.duration=jQuery.fx.off?0:"number"==typeof opt.duration?opt.duration:opt.duration in jQuery.fx.speeds?jQuery.fx.speeds[opt.duration]:jQuery.fx.speeds._default,null!=opt.queue&&!0!==opt.queue||(opt.queue="fx"),opt.old=opt.complete,opt.complete=function(){jQuery.isFunction(opt.old)&&opt.old.call(this),opt.queue&&jQuery.dequeue(this,opt.queue)},opt},jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHidden).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback)},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);(empty||jQuery._data(this,"finish"))&&anim.stop(!0)};return doAnimation.finish=doAnimation,empty||!1===optall.queue?this.each(doAnimation):this.queue(optall.queue,doAnimation)},stop:function(type,clearQueue,gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop,stop(gotoEnd)};return"string"!=typeof type&&(gotoEnd=clearQueue,clearQueue=type,type=void 0),clearQueue&&!1!==type&&this.queue(type||"fx",[]),this.each(function(){var dequeue=!0,index=null!=type&&type+"queueHooks",timers=jQuery.timers,data=jQuery._data(this);if(index)data[index]&&data[index].stop&&stopQueue(data[index]);else for(index in data)data[index]&&data[index].stop&&rrun.test(index)&&stopQueue(data[index]);for(index=timers.length;index--;)timers[index].elem!==this||null!=type&&timers[index].queue!==type||(timers[index].anim.stop(gotoEnd),dequeue=!1,timers.splice(index,1));!dequeue&&gotoEnd||jQuery.dequeue(this,type)})},finish:function(type){return!1!==type&&(type=type||"fx"),this.each(function(){var index,data=jQuery._data(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;for(data.finish=!0,jQuery.queue(this,type,[]),hooks&&hooks.stop&&hooks.stop.call(this,!0),index=timers.length;index--;)timers[index].elem===this&&timers[index].queue===type&&(timers[index].anim.stop(!0),timers.splice(index,1));for(index=0;index<length;index++)queue[index]&&queue[index].finish&&queue[index].finish.call(this);delete data.finish})}}),jQuery.each(["toggle","show","hide"],function(i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return null==speed||"boolean"==typeof speed?cssFn.apply(this,arguments):this.animate(genFx(name,!0),speed,easing,callback)}}),jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback)}}),jQuery.timers=[],jQuery.fx.tick=function(){var timer,timers=jQuery.timers,i=0;for(fxNow=jQuery.now();i<timers.length;i++)(timer=timers[i])()||timers[i]!==timer||timers.splice(i--,1);timers.length||jQuery.fx.stop(),fxNow=void 0},jQuery.fx.timer=function(timer){jQuery.timers.push(timer),timer()?jQuery.fx.start():jQuery.timers.pop()},jQuery.fx.interval=13,jQuery.fx.start=function(){timerId||(timerId=window.setInterval(jQuery.fx.tick,jQuery.fx.interval))},jQuery.fx.stop=function(){window.clearInterval(timerId),timerId=null},jQuery.fx.speeds={slow:600,fast:200,_default:400},jQuery.fn.delay=function(time,type){return time=jQuery.fx?jQuery.fx.speeds[time]||time:time,type=type||"fx",this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop=function(){window.clearTimeout(timeout)}})},function(){var a,input=document.createElement("input"),div=document.createElement("div"),select=document.createElement("select"),opt=select.appendChild(document.createElement("option"));div=document.createElement("div"),div.setAttribute("className","t"),div.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=div.getElementsByTagName("a")[0],input.setAttribute("type","checkbox"),div.appendChild(input),a=div.getElementsByTagName("a")[0],a.style.cssText="top:1px",support.getSetAttribute="t"!==div.className,support.style=/top/.test(a.getAttribute("style")),support.hrefNormalized="/a"===a.getAttribute("href"),support.checkOn=!!input.value,support.optSelected=opt.selected,support.enctype=!!document.createElement("form").enctype,select.disabled=!0,support.optDisabled=!opt.disabled,input=document.createElement("input"),input.setAttribute("value",""),support.input=""===input.getAttribute("value"),input.value="t",input.setAttribute("type","radio"),support.radioValue="t"===input.value}();var rreturn=/\r/g,rspaces=/[\x20\t\r\n\f]+/g;jQuery.fn.extend({val:function(value){var hooks,ret,isFunction,elem=this[0];{if(arguments.length)return isFunction=jQuery.isFunction(value),this.each(function(i){var val;1===this.nodeType&&(val=isFunction?value.call(this,i,jQuery(this).val()):value,null==val?val="":"number"==typeof val?val+="":jQuery.isArray(val)&&(val=jQuery.map(val,function(value){return null==value?"":value+""})),(hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()])&&"set"in hooks&&void 0!==hooks.set(this,val,"value")||(this.value=val))});if(elem)return(hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()])&&"get"in hooks&&void 0!==(ret=hooks.get(elem,"value"))?ret:(ret=elem.value,"string"==typeof ret?ret.replace(rreturn,""):null==ret?"":ret)}}}),jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return null!=val?val:jQuery.trim(jQuery.text(elem)).replace(rspaces," ")}},select:{get:function(elem){for(var value,option,options=elem.options,index=elem.selectedIndex,one="select-one"===elem.type||index<0,values=one?null:[],max=one?index+1:options.length,i=index<0?max:one?index:0;i<max;i++)if(option=options[i],(option.selected||i===index)&&(support.optDisabled?!option.disabled:null===option.getAttribute("disabled"))&&(!option.parentNode.disabled||!jQuery.nodeName(option.parentNode,"optgroup"))){if(value=jQuery(option).val(),one)return value;values.push(value)}return values},set:function(elem,value){for(var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;i--;)if(option=options[i],jQuery.inArray(jQuery.valHooks.option.get(option),values)>-1)try{option.selected=optionSet=!0}catch(_){option.scrollHeight}else option.selected=!1;return optionSet||(elem.selectedIndex=-1),options}}}}),jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(jQuery.isArray(value))return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1}},support.checkOn||(jQuery.valHooks[this].get=function(elem){return null===elem.getAttribute("value")?"on":elem.value})});var nodeHook,boolHook,attrHandle=jQuery.expr.attrHandle,ruseDefault=/^(?:checked|selected)$/i,getSetAttribute=support.getSetAttribute,getSetInput=support.input;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}}),jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(3!==nType&&8!==nType&&2!==nType)return void 0===elem.getAttribute?jQuery.prop(elem,name,value):(1===nType&&jQuery.isXMLDoc(elem)||(name=name.toLowerCase(),hooks=jQuery.attrHooks[name]||(jQuery.expr.match.bool.test(name)?boolHook:nodeHook)),void 0!==value?null===value?void jQuery.removeAttr(elem,name):hooks&&"set"in hooks&&void 0!==(ret=hooks.set(elem,value,name))?ret:(elem.setAttribute(name,value+""),value):hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:(ret=jQuery.find.attr(elem,name),null==ret?void 0:ret))},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&"radio"===value&&jQuery.nodeName(elem,"input")){var val=elem.value;return elem.setAttribute("type",value),val&&(elem.value=val),value}}}},removeAttr:function(elem,value){var name,propName,i=0,attrNames=value&&value.match(rnotwhite);if(attrNames&&1===elem.nodeType)for(;name=attrNames[i++];)propName=jQuery.propFix[name]||name,jQuery.expr.match.bool.test(name)?getSetInput&&getSetAttribute||!ruseDefault.test(name)?elem[propName]=!1:elem[jQuery.camelCase("default-"+name)]=elem[propName]=!1:jQuery.attr(elem,name,""),elem.removeAttribute(getSetAttribute?name:propName)}}),boolHook={set:function(elem,value,name){return!1===value?jQuery.removeAttr(elem,name):getSetInput&&getSetAttribute||!ruseDefault.test(name)?elem.setAttribute(!getSetAttribute&&jQuery.propFix[name]||name,name):elem[jQuery.camelCase("default-"+name)]=elem[name]=!0,name}},jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;getSetInput&&getSetAttribute||!ruseDefault.test(name)?attrHandle[name]=function(elem,name,isXML){var ret,handle;return isXML||(handle=attrHandle[name],attrHandle[name]=ret,ret=null!=getter(elem,name,isXML)?name.toLowerCase():null,attrHandle[name]=handle),ret}:attrHandle[name]=function(elem,name,isXML){if(!isXML)return elem[jQuery.camelCase("default-"+name)]?name.toLowerCase():null}}),getSetInput&&getSetAttribute||(jQuery.attrHooks.value={set:function(elem,value,name){if(!jQuery.nodeName(elem,"input"))return nodeHook&&nodeHook.set(elem,value,name);elem.defaultValue=value}}),getSetAttribute||(nodeHook={set:function(elem,value,name){var ret=elem.getAttributeNode(name);if(ret||elem.setAttributeNode(ret=elem.ownerDocument.createAttribute(name)),ret.value=value+="","value"===name||value===elem.getAttribute(name))return value}},attrHandle.id=attrHandle.name=attrHandle.coords=function(elem,name,isXML){var ret;if(!isXML)return(ret=elem.getAttributeNode(name))&&""!==ret.value?ret.value:null},jQuery.valHooks.button={get:function(elem,name){var ret=elem.getAttributeNode(name);if(ret&&ret.specified)return ret.value},set:nodeHook.set},jQuery.attrHooks.contenteditable={set:function(elem,value,name){nodeHook.set(elem,""!==value&&value,name)}},jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]={set:function(elem,value){if(""===value)return elem.setAttribute(name,"auto"),value}}})),support.style||(jQuery.attrHooks.style={get:function(elem){return elem.style.cssText||void 0},set:function(elem,value){return elem.style.cssText=value+""}});var rfocusable=/^(?:input|select|textarea|button|object)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return name=jQuery.propFix[name]||name,this.each(function(){try{this[name]=void 0,delete this[name]}catch(e){}})}}),jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(3!==nType&&8!==nType&&2!==nType)return 1===nType&&jQuery.isXMLDoc(elem)||(name=jQuery.propFix[name]||name,hooks=jQuery.propHooks[name]),void 0!==value?hooks&&"set"in hooks&&void 0!==(ret=hooks.set(elem,value,name))?ret:elem[name]=value:hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:elem[name]},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");return tabindex?parseInt(tabindex,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),support.hrefNormalized||jQuery.each(["href","src"],function(i,name){jQuery.propHooks[name]={get:function(elem){return elem.getAttribute(name,4)}}}),support.optSelected||(jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;return parent&&(parent.selectedIndex,parent.parentNode&&parent.parentNode.selectedIndex),null},set:function(elem){var parent=elem.parentNode;parent&&(parent.selectedIndex,parent.parentNode&&parent.parentNode.selectedIndex)}}),jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this}),support.enctype||(jQuery.propFix.enctype="encoding");var rclass=/[\t\r\n\f]/g;jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value))return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)))});if("string"==typeof value&&value)for(classes=value.match(rnotwhite)||[];elem=this[i++];)if(curValue=getClass(elem),cur=1===elem.nodeType&&(" "+curValue+" ").replace(rclass," ")){for(j=0;clazz=classes[j++];)cur.indexOf(" "+clazz+" ")<0&&(cur+=clazz+" ");finalValue=jQuery.trim(cur),curValue!==finalValue&&jQuery.attr(elem,"class",finalValue)}return this},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value))return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof value&&value)for(classes=value.match(rnotwhite)||[];elem=this[i++];)if(curValue=getClass(elem),cur=1===elem.nodeType&&(" "+curValue+" ").replace(rclass," ")){for(j=0;clazz=classes[j++];)for(;cur.indexOf(" "+clazz+" ")>-1;)cur=cur.replace(" "+clazz+" "," ");finalValue=jQuery.trim(cur),curValue!==finalValue&&jQuery.attr(elem,"class",finalValue)}return this},toggleClass:function(value,stateVal){var type=typeof value;return"boolean"==typeof stateVal&&"string"===type?stateVal?this.addClass(value):this.removeClass(value):jQuery.isFunction(value)?this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal)}):this.each(function(){var className,i,self,classNames;if("string"===type)for(i=0,self=jQuery(this),classNames=value.match(rnotwhite)||[];className=classNames[i++];)self.hasClass(className)?self.removeClass(className):self.addClass(className);else void 0!==value&&"boolean"!==type||(className=getClass(this),className&&jQuery._data(this,"__className__",className),jQuery.attr(this,"class",className||!1===value?"":jQuery._data(this,"__className__")||""))})},hasClass:function(selector){var className,elem,i=0;for(className=" "+selector+" ";elem=this[i++];)if(1===elem.nodeType&&(" "+getClass(elem)+" ").replace(rclass," ").indexOf(className)>-1)return!0;return!1}}),jQuery.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}}),jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}});var location=window.location,nonce=jQuery.now(),rquery=/\?/,rvalidtokens=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;jQuery.parseJSON=function(data){if(window.JSON&&window.JSON.parse)return window.JSON.parse(data+"");var requireNonComma,depth=null,str=jQuery.trim(data+"");return str&&!jQuery.trim(str.replace(rvalidtokens,function(token,comma,open,close){return requireNonComma&&comma&&(depth=0),0===depth?token:(requireNonComma=open||comma,depth+=!close-!open,"")}))?Function("return "+str)():jQuery.error("Invalid JSON: "+data)},jQuery.parseXML=function(data){var xml,tmp;if(!data||"string"!=typeof data)return null;try{window.DOMParser?(tmp=new window.DOMParser,xml=tmp.parseFromString(data,"text/xml")):(xml=new window.ActiveXObject("Microsoft.XMLDOM"),xml.async="false",xml.loadXML(data))}catch(e){xml=void 0}return xml&&xml.documentElement&&!xml.getElementsByTagName("parsererror").length||jQuery.error("Invalid XML: "+data),xml};var rhash=/#.*$/,rts=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rurl=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,prefilters={},transports={},allTypes="*/".concat("*"),ajaxLocation=location.href,ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[];jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ajaxLocation,type:"GET",isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":jQuery.parseJSON,"text xml":jQuery.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;2!==state&&(state=2,timeoutTimer&&window.clearTimeout(timeoutTimer),transport=void 0,responseHeadersString=headers||"",jqXHR.readyState=status>0?4:0,isSuccess=status>=200&&status<300||304===status,responses&&(response=ajaxHandleResponses(s,jqXHR,responses)),response=ajaxConvert(s,response,jqXHR,isSuccess),isSuccess?(s.ifModified&&(modified=jqXHR.getResponseHeader("Last-Modified"),modified&&(jQuery.lastModified[cacheURL]=modified),(modified=jqXHR.getResponseHeader("etag"))&&(jQuery.etag[cacheURL]=modified)),204===status||"HEAD"===s.type?statusText="nocontent":304===status?statusText="notmodified":(statusText=response.state,success=response.data,error=response.error,isSuccess=!error)):(error=statusText,!status&&statusText||(statusText="error",status<0&&(status=0))),jqXHR.status=status,jqXHR.statusText=(nativeStatusText||statusText)+"",isSuccess?deferred.resolveWith(callbackContext,[success,statusText,jqXHR]):deferred.rejectWith(callbackContext,[jqXHR,statusText,error]),jqXHR.statusCode(statusCode),statusCode=void 0,fireGlobals&&globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]),completeDeferred.fireWith(callbackContext,[jqXHR,statusText]),fireGlobals&&(globalEventContext.trigger("ajaxComplete",[jqXHR,s]),--jQuery.active||jQuery.event.trigger("ajaxStop")))}"object"==typeof url&&(options=url,url=void 0),options=options||{};var parts,i,cacheURL,responseHeadersString,timeoutTimer,fireGlobals,transport,responseHeaders,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},state=0,strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(2===state){if(!responseHeaders)for(responseHeaders={};match=rheaders.exec(responseHeadersString);)responseHeaders[match[1].toLowerCase()]=match[2];match=responseHeaders[key.toLowerCase()]}return null==match?null:match},getAllResponseHeaders:function(){return 2===state?responseHeadersString:null},setRequestHeader:function(name,value){var lname=name.toLowerCase();return state||(name=requestHeadersNames[lname]=requestHeadersNames[lname]||name,requestHeaders[name]=value),this},overrideMimeType:function(type){return state||(s.mimeType=type),this},statusCode:function(map){var code;if(map)if(state<2)for(code in map)statusCode[code]=[statusCode[code],map[code]];else jqXHR.always(map[jqXHR.status]);return this},abort:function(statusText){var finalText=statusText||strAbort;return transport&&transport.abort(finalText),done(0,finalText),this}};if(deferred.promise(jqXHR).complete=completeDeferred.add,jqXHR.success=jqXHR.done,jqXHR.error=jqXHR.fail,s.url=((url||s.url||ajaxLocation)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//"),s.type=options.method||options.type||s.method||s.type,s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().match(rnotwhite)||[""],null==s.crossDomain&&(parts=rurl.exec(s.url.toLowerCase()),s.crossDomain=!(!parts||parts[1]===ajaxLocParts[1]&&parts[2]===ajaxLocParts[2]&&(parts[3]||("http:"===parts[1]?"80":"443"))===(ajaxLocParts[3]||("http:"===ajaxLocParts[1]?"80":"443")))),s.data&&s.processData&&"string"!=typeof s.data&&(s.data=jQuery.param(s.data,s.traditional)),inspectPrefiltersOrTransports(prefilters,s,options,jqXHR),2===state)return jqXHR;fireGlobals=jQuery.event&&s.global,fireGlobals&&0==jQuery.active++&&jQuery.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!rnoContent.test(s.type),cacheURL=s.url,s.hasContent||(s.data&&(cacheURL=s.url+=(rquery.test(cacheURL)?"&":"?")+s.data,delete s.data),!1===s.cache&&(s.url=rts.test(cacheURL)?cacheURL.replace(rts,"$1_="+nonce++):cacheURL+(rquery.test(cacheURL)?"&":"?")+"_="+nonce++)),s.ifModified&&(jQuery.lastModified[cacheURL]&&jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL]),jQuery.etag[cacheURL]&&jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])),(s.data&&s.hasContent&&!1!==s.contentType||options.contentType)&&jqXHR.setRequestHeader("Content-Type",s.contentType),jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers)jqXHR.setRequestHeader(i,s.headers[i]);if(s.beforeSend&&(!1===s.beforeSend.call(callbackContext,jqXHR,s)||2===state))return jqXHR.abort();strAbort="abort";for(i in{success:1,error:1,complete:1})jqXHR[i](s[i]);if(transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR)){if(jqXHR.readyState=1,fireGlobals&&globalEventContext.trigger("ajaxSend",[jqXHR,s]),2===state)return jqXHR;s.async&&s.timeout>0&&(timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout")},s.timeout));try{state=1,transport.send(requestHeaders,done)}catch(e){if(!(state<2))throw e;done(-1,e)}}else done(-1,"No Transport");return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,void 0,callback,"script")}}),jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){return jQuery.isFunction(data)&&(type=type||callback,callback=data,data=void 0),jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url))}}),jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},jQuery.fn.extend({wrapAll:function(html){if(jQuery.isFunction(html))return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))});if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&wrap.insertBefore(this[0]),wrap.map(function(){for(var elem=this;elem.firstChild&&1===elem.firstChild.nodeType;)elem=elem.firstChild;return elem}).append(this)}return this},wrapInner:function(html){return jQuery.isFunction(html)?this.each(function(i){jQuery(this).wrapInner(html.call(this,i))}):this.each(function(){var self=jQuery(this),contents=self.contents();contents.length?contents.wrapAll(html):self.append(html)})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(){return this.parent().each(function(){jQuery.nodeName(this,"body")||jQuery(this).replaceWith(this.childNodes)}).end()}}),jQuery.expr.filters.hidden=function(elem){return support.reliableHiddenOffsets()?elem.offsetWidth<=0&&elem.offsetHeight<=0&&!elem.getClientRects().length:filterHidden(elem)},jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)};var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,value){value=jQuery.isFunction(value)?value():null==value?"":value,s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};if(void 0===traditional&&(traditional=jQuery.ajaxSettings&&jQuery.ajaxSettings.traditional),jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a))jQuery.each(a,function(){add(this.name,this.value)});else for(prefix in a)buildParams(prefix,a[prefix],traditional,add);return s.join("&").replace(r20,"+")},jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();return null==val?null:jQuery.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}}),jQuery.ajaxSettings.xhr=void 0!==window.ActiveXObject?function(){return this.isLocal?createActiveXHR():document.documentMode>8?createStandardXHR():/^(get|post|head|put|delete|options)$/i.test(this.type)&&createStandardXHR()||createActiveXHR()}:createStandardXHR;var xhrId=0,xhrCallbacks={},xhrSupported=jQuery.ajaxSettings.xhr();window.attachEvent&&window.attachEvent("onunload",function(){for(var key in xhrCallbacks)xhrCallbacks[key](void 0,!0)}),support.cors=!!xhrSupported&&"withCredentials"in xhrSupported,xhrSupported=support.ajax=!!xhrSupported,xhrSupported&&jQuery.ajaxTransport(function(options){if(!options.crossDomain||support.cors){var callback;return{send:function(headers,complete){var i,xhr=options.xhr(),id=++xhrId;if(xhr.open(options.type,options.url,options.async,options.username,options.password),options.xhrFields)for(i in options.xhrFields)xhr[i]=options.xhrFields[i];options.mimeType&&xhr.overrideMimeType&&xhr.overrideMimeType(options.mimeType),options.crossDomain||headers["X-Requested-With"]||(headers["X-Requested-With"]="XMLHttpRequest");for(i in headers)void 0!==headers[i]&&xhr.setRequestHeader(i,headers[i]+"");xhr.send(options.hasContent&&options.data||null),callback=function(_,isAbort){var status,statusText,responses;if(callback&&(isAbort||4===xhr.readyState))if(delete xhrCallbacks[id],callback=void 0,xhr.onreadystatechange=jQuery.noop,isAbort)4!==xhr.readyState&&xhr.abort();else{responses={},status=xhr.status,"string"==typeof xhr.responseText&&(responses.text=xhr.responseText);try{statusText=xhr.statusText}catch(e){statusText=""}status||!options.isLocal||options.crossDomain?1223===status&&(status=204):status=responses.text?200:404}responses&&complete(status,statusText,responses,xhr.getAllResponseHeaders())},options.async?4===xhr.readyState?window.setTimeout(callback):xhr.onreadystatechange=xhrCallbacks[id]=callback:callback()},abort:function(){callback&&callback(void 0,!0)}}}}),jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){return jQuery.globalEval(text),text}}}),jQuery.ajaxPrefilter("script",function(s){void 0===s.cache&&(s.cache=!1),s.crossDomain&&(s.type="GET",s.global=!1)}),jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||jQuery("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script"),script.async=!0,s.scriptCharset&&(script.charset=s.scriptCharset),script.src=s.url,script.onload=script.onreadystatechange=function(_,isAbort){(isAbort||!script.readyState||/loaded|complete/.test(script.readyState))&&(script.onload=script.onreadystatechange=null,script.parentNode&&script.parentNode.removeChild(script),script=null,isAbort||callback(200,"success"))},head.insertBefore(script,head.firstChild)},abort:function(){script&&script.onload(void 0,!0)}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+nonce++;return this[callback]=!0,callback}}),jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=!1!==s.jsonp&&(rjsonp.test(s.url)?"url":"string"==typeof s.data&&0===(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&rjsonp.test(s.data)&&"data");if(jsonProp||"jsonp"===s.dataTypes[0])return callbackName=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback,jsonProp?s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName):!1!==s.jsonp&&(s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName),s.converters["script json"]=function(){return responseContainer||jQuery.error(callbackName+" was not called"),responseContainer[0]},s.dataTypes[0]="json",overwritten=window[callbackName],window[callbackName]=function(){responseContainer=arguments},jqXHR.always(function(){void 0===overwritten?jQuery(window).removeProp(callbackName):window[callbackName]=overwritten,s[callbackName]&&(s.jsonpCallback=originalSettings.jsonpCallback,oldCallbacks.push(callbackName)),responseContainer&&jQuery.isFunction(overwritten)&&overwritten(responseContainer[0]),responseContainer=overwritten=void 0}),"script"}),jQuery.parseHTML=function(data,context,keepScripts){if(!data||"string"!=typeof data)return null;"boolean"==typeof context&&(keepScripts=context,context=!1),context=context||document;var parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];return parsed?[context.createElement(parsed[1])]:(parsed=buildFragment([data],context,scripts),scripts&&scripts.length&&jQuery(scripts).remove(),jQuery.merge([],parsed.childNodes))};var _load=jQuery.fn.load;return jQuery.fn.load=function(url,params,callback){if("string"!=typeof url&&_load)return _load.apply(this,arguments);var selector,type,response,self=this,off=url.indexOf(" ");return off>-1&&(selector=jQuery.trim(url.slice(off,url.length)),url=url.slice(0,off)),jQuery.isFunction(params)?(callback=params,params=void 0):params&&"object"==typeof params&&(type="POST"),self.length>0&&jQuery.ajax({url:url,type:type||"GET",dataType:"html",data:params}).done(function(responseText){response=arguments,self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).always(callback&&function(jqXHR,status){self.each(function(){callback.apply(this,response||[jqXHR.responseText,status,jqXHR])})}),this},jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}}),jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length},jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};"static"===position&&(elem.style.position="relative"),curOffset=curElem.offset(),curCSSTop=jQuery.css(elem,"top"),curCSSLeft=jQuery.css(elem,"left"),calculatePosition=("absolute"===position||"fixed"===position)&&jQuery.inArray("auto",[curCSSTop,curCSSLeft])>-1,calculatePosition?(curPosition=curElem.position(),curTop=curPosition.top,curLeft=curPosition.left):(curTop=parseFloat(curCSSTop)||0,curLeft=parseFloat(curCSSLeft)||0),jQuery.isFunction(options)&&(options=options.call(elem,i,jQuery.extend({},curOffset))),null!=options.top&&(props.top=options.top-curOffset.top+curTop),null!=options.left&&(props.left=options.left-curOffset.left+curLeft),"using"in options?options.using.call(elem,props):curElem.css(props)}},jQuery.fn.extend({offset:function(options){if(arguments.length)return void 0===options?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)});var docElem,win,box={top:0,left:0},elem=this[0],doc=elem&&elem.ownerDocument;if(doc)return docElem=doc.documentElement,jQuery.contains(docElem,elem)?(void 0!==elem.getBoundingClientRect&&(box=elem.getBoundingClientRect()),win=getWindow(doc),{top:box.top+(win.pageYOffset||docElem.scrollTop)-(docElem.clientTop||0),left:box.left+(win.pageXOffset||docElem.scrollLeft)-(docElem.clientLeft||0)}):box},position:function(){if(this[0]){var offsetParent,offset,parentOffset={top:0,left:0},elem=this[0];return"fixed"===jQuery.css(elem,"position")?offset=elem.getBoundingClientRect():(offsetParent=this.offsetParent(),offset=this.offset(),jQuery.nodeName(offsetParent[0],"html")||(parentOffset=offsetParent.offset()),parentOffset.top+=jQuery.css(offsetParent[0],"borderTopWidth",!0),parentOffset.left+=jQuery.css(offsetParent[0],"borderLeftWidth",!0)),{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",!0),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var offsetParent=this.offsetParent;offsetParent&&!jQuery.nodeName(offsetParent,"html")&&"static"===jQuery.css(offsetParent,"position");)offsetParent=offsetParent.offsetParent;return offsetParent||documentElement})}}),jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win=getWindow(elem);if(void 0===val)return win?prop in win?win[prop]:win.document.documentElement[method]:elem[method];win?win.scrollTo(top?jQuery(win).scrollLeft():val,top?val:jQuery(win).scrollTop()):elem[method]=val},method,val,arguments.length,null)}}),jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed)return computed=curCSS(elem,prop),rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed})}),jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||"boolean"!=typeof margin),extra=defaultExtra||(!0===margin||!0===value?"margin":"border");return access(this,function(elem,type,value){var doc;return jQuery.isWindow(elem)?elem.document.documentElement["client"+name]:9===elem.nodeType?(doc=elem.documentElement,Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])):void 0===value?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:void 0,chainable,null)}})}),jQuery.fn.extend({bind:function(types,data,fn){return this.on(types,null,data,fn)},unbind:function(types,fn){return this.off(types,null,fn)},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function(selector,types,fn){return 1===arguments.length?this.off(selector,"**"):this.off(types,selector||"**",fn)}}),jQuery.fn.size=function(){return this.length},jQuery.fn.andSelf=jQuery.fn.addBack,jQuery}),function(factory){factory(jQuery)}(function($){$.ui=$.ui||{};var widgetUuid=($.ui.version="1.12.1",0),widgetSlice=Array.prototype.slice;$.cleanData=function(orig){return function(elems){var events,elem,i;for(i=0;null!=(elem=elems[i]);i++)try{events=$._data(elem,"events"),events&&events.remove&&$(elem).triggerHandler("remove")}catch(e){}orig(elems)}}($.cleanData),$.widget=function(name,base,prototype){var existingConstructor,constructor,basePrototype,proxiedPrototype={},namespace=name.split(".")[0];name=name.split(".")[1];var fullName=namespace+"-"+name;return prototype||(prototype=base,base=$.Widget),$.isArray(prototype)&&(prototype=$.extend.apply(null,[{}].concat(prototype))),$.expr[":"][fullName.toLowerCase()]=function(elem){return!!$.data(elem,fullName)},$[namespace]=$[namespace]||{},existingConstructor=$[namespace][name],constructor=$[namespace][name]=function(options,element){if(!this._createWidget)return new constructor(options,element);arguments.length&&this._createWidget(options,element)},$.extend(constructor,existingConstructor,{version:prototype.version,_proto:$.extend({},prototype),_childConstructors:[]}),basePrototype=new base,basePrototype.options=$.widget.extend({},basePrototype.options),$.each(prototype,function(prop,value){if(!$.isFunction(value))return void(proxiedPrototype[prop]=value);proxiedPrototype[prop]=function(){function _super(){return base.prototype[prop].apply(this,arguments)}function _superApply(args){return base.prototype[prop].apply(this,args)}return function(){var returnValue,__super=this._super,__superApply=this._superApply;return this._super=_super,this._superApply=_superApply,returnValue=value.apply(this,arguments),this._super=__super,this._superApply=__superApply,returnValue}}()}),constructor.prototype=$.widget.extend(basePrototype,{widgetEventPrefix:existingConstructor?basePrototype.widgetEventPrefix||name:name},proxiedPrototype,{constructor:constructor,namespace:namespace,widgetName:name,widgetFullName:fullName}),existingConstructor?($.each(existingConstructor._childConstructors,function(i,child){var childPrototype=child.prototype;$.widget(childPrototype.namespace+"."+childPrototype.widgetName,constructor,child._proto)}),delete existingConstructor._childConstructors):base._childConstructors.push(constructor),$.widget.bridge(name,constructor),constructor},$.widget.extend=function(target){for(var key,value,input=widgetSlice.call(arguments,1),inputIndex=0,inputLength=input.length;inputIndex<inputLength;inputIndex++)for(key in input[inputIndex])value=input[inputIndex][key],input[inputIndex].hasOwnProperty(key)&&void 0!==value&&($.isPlainObject(value)?target[key]=$.isPlainObject(target[key])?$.widget.extend({},target[key],value):$.widget.extend({},value):target[key]=value);return target},$.widget.bridge=function(name,object){var fullName=object.prototype.widgetFullName||name;$.fn[name]=function(options){var isMethodCall="string"==typeof options,args=widgetSlice.call(arguments,1),returnValue=this;return isMethodCall?this.length||"instance"!==options?this.each(function(){var methodValue,instance=$.data(this,fullName);return"instance"===options?(returnValue=instance,!1):instance?$.isFunction(instance[options])&&"_"!==options.charAt(0)?(methodValue=instance[options].apply(instance,args),methodValue!==instance&&void 0!==methodValue?(returnValue=methodValue&&methodValue.jquery?returnValue.pushStack(methodValue.get()):methodValue,!1):void 0):$.error("no such method '"+options+"' for "+name+" widget instance"):$.error("cannot call methods on "+name+" prior to initialization; attempted to call method '"+options+"'")}):returnValue=void 0:(args.length&&(options=$.widget.extend.apply(null,[options].concat(args))),this.each(function(){var instance=$.data(this,fullName);instance?(instance.option(options||{}),instance._init&&instance._init()):$.data(this,fullName,new object(options,this))})),returnValue}},$.Widget=function(){},$.Widget._childConstructors=[],$.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(options,element){element=$(element||this.defaultElement||this)[0],this.element=$(element),this.uuid=widgetUuid++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=$(),this.hoverable=$(),this.focusable=$(),this.classesElementLookup={},element!==this&&($.data(element,this.widgetFullName,this),this._on(!0,this.element,{remove:function(event){event.target===element&&this.destroy()}}),this.document=$(element.style?element.ownerDocument:element.document||element),this.window=$(this.document[0].defaultView||this.document[0].parentWindow)),this.options=$.widget.extend({},this.options,this._getCreateOptions(),options),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:$.noop,_create:$.noop,_init:$.noop,destroy:function(){var that=this;this._destroy(),$.each(this.classesElementLookup,function(key,value){that._removeClass(value,key)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:$.noop,widget:function(){return this.element},option:function(key,value){var parts,curOption,i,options=key;if(0===arguments.length)return $.widget.extend({},this.options);if("string"==typeof key)if(options={},parts=key.split("."),key=parts.shift(),parts.length){for(curOption=options[key]=$.widget.extend({},this.options[key]),i=0;i<parts.length-1;i++)curOption[parts[i]]=curOption[parts[i]]||{},curOption=curOption[parts[i]];if(key=parts.pop(),1===arguments.length)return void 0===curOption[key]?null:curOption[key];curOption[key]=value}else{if(1===arguments.length)return void 0===this.options[key]?null:this.options[key];options[key]=value}return this._setOptions(options),this},_setOptions:function(options){var key;for(key in options)this._setOption(key,options[key]);return this},_setOption:function(key,value){return"classes"===key&&this._setOptionClasses(value),this.options[key]=value,"disabled"===key&&this._setOptionDisabled(value),this},_setOptionClasses:function(value){var classKey,elements,currentElements;for(classKey in value)currentElements=this.classesElementLookup[classKey],value[classKey]!==this.options.classes[classKey]&&currentElements&&currentElements.length&&(elements=$(currentElements.get()),this._removeClass(currentElements,classKey),elements.addClass(this._classes({element:elements,keys:classKey,classes:value,add:!0})))},_setOptionDisabled:function(value){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!value),value&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(options){function processClassString(classes,checkOption){var current,i;for(i=0;i<classes.length;i++)current=that.classesElementLookup[classes[i]]||$(),current=$(options.add?$.unique(current.get().concat(options.element.get())):current.not(options.element).get()),that.classesElementLookup[classes[i]]=current,full.push(classes[i]),checkOption&&options.classes[classes[i]]&&full.push(options.classes[classes[i]])}var full=[],that=this;return options=$.extend({element:this.element,classes:this.options.classes||{}},options),this._on(options.element,{remove:"_untrackClassesElement"}),options.keys&&processClassString(options.keys.match(/\S+/g)||[],!0),options.extra&&processClassString(options.extra.match(/\S+/g)||[]),full.join(" ")},_untrackClassesElement:function(event){var that=this;$.each(that.classesElementLookup,function(key,value){-1!==$.inArray(event.target,value)&&(that.classesElementLookup[key]=$(value.not(event.target).get()))})},_removeClass:function(element,keys,extra){return this._toggleClass(element,keys,extra,!1)},_addClass:function(element,keys,extra){return this._toggleClass(element,keys,extra,!0)},_toggleClass:function(element,keys,extra,add){add="boolean"==typeof add?add:extra;var shift="string"==typeof element||null===element,options={extra:shift?keys:extra,keys:shift?element:keys,element:shift?this.element:element,add:add};return options.element.toggleClass(this._classes(options),add),this},_on:function(suppressDisabledCheck,element,handlers){var delegateElement,instance=this;"boolean"!=typeof suppressDisabledCheck&&(handlers=element,element=suppressDisabledCheck,suppressDisabledCheck=!1),handlers?(element=delegateElement=$(element),this.bindings=this.bindings.add(element)):(handlers=element,element=this.element,delegateElement=this.widget()),$.each(handlers,function(event,handler){function handlerProxy(){if(suppressDisabledCheck||!0!==instance.options.disabled&&!$(this).hasClass("ui-state-disabled"))return("string"==typeof handler?instance[handler]:handler).apply(instance,arguments)}"string"!=typeof handler&&(handlerProxy.guid=handler.guid=handler.guid||handlerProxy.guid||$.guid++);var match=event.match(/^([\w:-]*)\s*(.*)$/),eventName=match[1]+instance.eventNamespace,selector=match[2];selector?delegateElement.on(eventName,selector,handlerProxy):element.on(eventName,handlerProxy)})},_off:function(element,eventName){eventName=(eventName||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,element.off(eventName).off(eventName),this.bindings=$(this.bindings.not(element).get()),this.focusable=$(this.focusable.not(element).get()),this.hoverable=$(this.hoverable.not(element).get())},_delay:function(handler,delay){function handlerProxy(){return("string"==typeof handler?instance[handler]:handler).apply(instance,arguments)}var instance=this;return setTimeout(handlerProxy,delay||0)},_hoverable:function(element){this.hoverable=this.hoverable.add(element),this._on(element,{mouseenter:function(event){this._addClass($(event.currentTarget),null,"ui-state-hover")},mouseleave:function(event){this._removeClass($(event.currentTarget),null,"ui-state-hover")}})},_focusable:function(element){this.focusable=this.focusable.add(element),this._on(element,{focusin:function(event){this._addClass($(event.currentTarget),null,"ui-state-focus")},focusout:function(event){this._removeClass($(event.currentTarget),null,"ui-state-focus")}})},_trigger:function(type,event,data){var prop,orig,callback=this.options[type];if(data=data||{},event=$.Event(event),event.type=(type===this.widgetEventPrefix?type:this.widgetEventPrefix+type).toLowerCase(),event.target=this.element[0],orig=event.originalEvent)for(prop in orig)prop in event||(event[prop]=orig[prop]);return this.element.trigger(event,data),!($.isFunction(callback)&&!1===callback.apply(this.element[0],[event].concat(data))||event.isDefaultPrevented())}},$.each({show:"fadeIn",hide:"fadeOut"},function(method,defaultEffect){$.Widget.prototype["_"+method]=function(element,options,callback){"string"==typeof options&&(options={effect:options});var hasOptions,effectName=options?!0===options||"number"==typeof options?defaultEffect:options.effect||defaultEffect:method;options=options||{},"number"==typeof options&&(options={duration:options}),hasOptions=!$.isEmptyObject(options),options.complete=callback,options.delay&&element.delay(options.delay),hasOptions&&$.effects&&$.effects.effect[effectName]?element[method](options):effectName!==method&&element[effectName]?element[effectName](options.duration,options.easing,callback):element.queue(function(next){$(this)[method](),callback&&callback.call(element[0]),next()})}});var mouseHandled=($.widget,$.extend($.expr[":"],{data:$.expr.createPseudo?$.expr.createPseudo(function(dataName){return function(elem){return!!$.data(elem,dataName)}}):function(elem,i,match){return!!$.data(elem,match[3])}}),$.fn.scrollParent=function(includeHidden){var position=this.css("position"),excludeStaticParent="absolute"===position,overflowRegex=includeHidden?/(auto|scroll|hidden)/:/(auto|scroll)/,scrollParent=this.parents().filter(function(){var parent=$(this);return(!excludeStaticParent||"static"!==parent.css("position"))&&overflowRegex.test(parent.css("overflow")+parent.css("overflow-y")+parent.css("overflow-x"))}).eq(0);return"fixed"!==position&&scrollParent.length?scrollParent:$(this[0].ownerDocument||document)},$.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),!1);$(document).on("mouseup",function(){mouseHandled=!1});$.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var that=this;this.element.on("mousedown."+this.widgetName,function(event){return that._mouseDown(event)}).on("click."+this.widgetName,function(event){if(!0===$.data(event.target,that.widgetName+".preventClickEvent"))return $.removeData(event.target,that.widgetName+".preventClickEvent"),event.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(event){if(!mouseHandled){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(event),this._mouseDownEvent=event;var that=this,btnIsLeft=1===event.which,elIsCancel=!("string"!=typeof this.options.cancel||!event.target.nodeName)&&$(event.target).closest(this.options.cancel).length;return!(btnIsLeft&&!elIsCancel&&this._mouseCapture(event))||(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){that.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(event)&&this._mouseDelayMet(event)&&(this._mouseStarted=!1!==this._mouseStart(event),!this._mouseStarted)?(event.preventDefault(),!0):(!0===$.data(event.target,this.widgetName+".preventClickEvent")&&$.removeData(event.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(event){return that._mouseMove(event)},this._mouseUpDelegate=function(event){return that._mouseUp(event)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),event.preventDefault(),mouseHandled=!0,!0))}},_mouseMove:function(event){if(this._mouseMoved){if($.ui.ie&&(!document.documentMode||document.documentMode<9)&&!event.button)return this._mouseUp(event);if(!event.which)if(event.originalEvent.altKey||event.originalEvent.ctrlKey||event.originalEvent.metaKey||event.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(event)}return(event.which||event.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(event),event.preventDefault()):(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,event),this._mouseStarted?this._mouseDrag(event):this._mouseUp(event)),!this._mouseStarted)},_mouseUp:function(event){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,event.target===this._mouseDownEvent.target&&$.data(event.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(event)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,mouseHandled=!1,event.preventDefault()},_mouseDistanceMet:function(event){return Math.max(Math.abs(this._mouseDownEvent.pageX-event.pageX),Math.abs(this._mouseDownEvent.pageY-event.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),$.ui.plugin={add:function(module,option,set){var i,proto=$.ui[module].prototype;for(i in set)proto.plugins[i]=proto.plugins[i]||[],proto.plugins[i].push([option,set[i]])},call:function(instance,name,args,allowDisconnected){var i,set=instance.plugins[name];if(set&&(allowDisconnected||instance.element[0].parentNode&&11!==instance.element[0].parentNode.nodeType))for(i=0;i<set.length;i++)instance.options[set[i][0]]&&set[i][1].apply(instance.element,args)}},$.ui.safeActiveElement=function(document){var activeElement;try{activeElement=document.activeElement}catch(error){activeElement=document.body}return activeElement||(activeElement=document.body),activeElement.nodeName||(activeElement=document.body),activeElement},$.ui.safeBlur=function(element){element&&"body"!==element.nodeName.toLowerCase()&&$(element).trigger("blur")};$.widget("ui.draggable",$.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(key,value){this._super(key,value),"handle"===key&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){if((this.helper||this.element).is(".ui-draggable-dragging"))return void(this.destroyOnClear=!0);this._removeHandleClassName(),this._mouseDestroy()},_mouseCapture:function(event){var o=this.options;return!(this.helper||o.disabled||$(event.target).closest(".ui-resizable-handle").length>0)&&(this.handle=this._getHandle(event),!!this.handle&&(this._blurActiveElement(event),this._blockFrames(!0===o.iframeFix?"iframe":o.iframeFix),!0))},_blockFrames:function(selector){this.iframeBlocks=this.document.find(selector).map(function(){var iframe=$(this);return $("<div>").css("position","absolute").appendTo(iframe.parent()).outerWidth(iframe.outerWidth()).outerHeight(iframe.outerHeight()).offset(iframe.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(event){var activeElement=$.ui.safeActiveElement(this.document[0]);$(event.target).closest(activeElement).length||$.ui.safeBlur(activeElement)},_mouseStart:function(event){var o=this.options;return this.helper=this._createHelper(event),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),$.ui.ddmanager&&($.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===$(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(event),this.originalPosition=this.position=this._generatePosition(event,!1),this.originalPageX=event.pageX,this.originalPageY=event.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this._setContainment(),!1===this._trigger("start",event)?(this._clear(),!1):(this._cacheHelperProportions(),$.ui.ddmanager&&!o.dropBehaviour&&$.ui.ddmanager.prepareOffsets(this,event),this._mouseDrag(event,!0),$.ui.ddmanager&&$.ui.ddmanager.dragStart(this,event),!0)},_refreshOffsets:function(event){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:event.pageX-this.offset.left,top:event.pageY-this.offset.top}},_mouseDrag:function(event,noPropagation){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(event,!0),this.positionAbs=this._convertPositionTo("absolute"),!noPropagation){var ui=this._uiHash();if(!1===this._trigger("drag",event,ui))return this._mouseUp(new $.Event("mouseup",event)),!1;this.position=ui.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",$.ui.ddmanager&&$.ui.ddmanager.drag(this,event),!1},_mouseStop:function(event){var that=this,dropped=!1;return $.ui.ddmanager&&!this.options.dropBehaviour&&(dropped=$.ui.ddmanager.drop(this,event)),this.dropped&&(dropped=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!dropped||"valid"===this.options.revert&&dropped||!0===this.options.revert||$.isFunction(this.options.revert)&&this.options.revert.call(this.element,dropped)?$(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==that._trigger("stop",event)&&that._clear()}):!1!==this._trigger("stop",event)&&this._clear(),!1},_mouseUp:function(event){return this._unblockFrames(),$.ui.ddmanager&&$.ui.ddmanager.dragStop(this,event),this.handleElement.is(event.target)&&this.element.trigger("focus"),$.ui.mouse.prototype._mouseUp.call(this,event)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new $.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(event){return!this.options.handle||!!$(event.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(event){var o=this.options,helperIsFunction=$.isFunction(o.helper),helper=helperIsFunction?$(o.helper.apply(this.element[0],[event])):"clone"===o.helper?this.element.clone().removeAttr("id"):this.element;return helper.parents("body").length||helper.appendTo("parent"===o.appendTo?this.element[0].parentNode:o.appendTo),helperIsFunction&&helper[0]===this.element[0]&&this._setPositionRelative(),helper[0]===this.element[0]||/(fixed|absolute)/.test(helper.css("position"))||helper.css("position","absolute"),helper},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(obj){"string"==typeof obj&&(obj=obj.split(" ")),$.isArray(obj)&&(obj={left:+obj[0],top:+obj[1]||0}),"left"in obj&&(this.offset.click.left=obj.left+this.margins.left),"right"in obj&&(this.offset.click.left=this.helperProportions.width-obj.right+this.margins.left),"top"in obj&&(this.offset.click.top=obj.top+this.margins.top),"bottom"in obj&&(this.offset.click.top=this.helperProportions.height-obj.bottom+this.margins.top)},_isRootNode:function(element){return/(html|body)/i.test(element.tagName)||element===this.document[0]},_getParentOffset:function(){var po=this.offsetParent.offset(),document=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&$.contains(this.scrollParent[0],this.offsetParent[0])&&(po.left+=this.scrollParent.scrollLeft(),po.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(po={top:0,left:0}),{top:po.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:po.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var p=this.element.position(),scrollIsRootNode=this._isRootNode(this.scrollParent[0]);return{top:p.top-(parseInt(this.helper.css("top"),10)||0)+(scrollIsRootNode?0:this.scrollParent.scrollTop()),left:p.left-(parseInt(this.helper.css("left"),10)||0)+(scrollIsRootNode?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var isUserScrollable,c,ce,o=this.options,document=this.document[0];return this.relativeContainer=null,o.containment?"window"===o.containment?void(this.containment=[$(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,$(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,$(window).scrollLeft()+$(window).width()-this.helperProportions.width-this.margins.left,$(window).scrollTop()+($(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):"document"===o.containment?void(this.containment=[0,0,$(document).width()-this.helperProportions.width-this.margins.left,($(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):o.containment.constructor===Array?void(this.containment=o.containment):("parent"===o.containment&&(o.containment=this.helper[0].parentNode),c=$(o.containment),void((ce=c[0])&&(isUserScrollable=/(scroll|auto)/.test(c.css("overflow")),this.containment=[(parseInt(c.css("borderLeftWidth"),10)||0)+(parseInt(c.css("paddingLeft"),10)||0),(parseInt(c.css("borderTopWidth"),10)||0)+(parseInt(c.css("paddingTop"),10)||0),(isUserScrollable?Math.max(ce.scrollWidth,ce.offsetWidth):ce.offsetWidth)-(parseInt(c.css("borderRightWidth"),10)||0)-(parseInt(c.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(isUserScrollable?Math.max(ce.scrollHeight,ce.offsetHeight):ce.offsetHeight)-(parseInt(c.css("borderBottomWidth"),10)||0)-(parseInt(c.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=c))):void(this.containment=null)},_convertPositionTo:function(d,pos){pos||(pos=this.position);var mod="absolute"===d?1:-1,scrollIsRootNode=this._isRootNode(this.scrollParent[0]);return{top:pos.top+this.offset.relative.top*mod+this.offset.parent.top*mod-("fixed"===this.cssPosition?-this.offset.scroll.top:scrollIsRootNode?0:this.offset.scroll.top)*mod,left:pos.left+this.offset.relative.left*mod+this.offset.parent.left*mod-("fixed"===this.cssPosition?-this.offset.scroll.left:scrollIsRootNode?0:this.offset.scroll.left)*mod}},_generatePosition:function(event,constrainPosition){var containment,co,top,left,o=this.options,scrollIsRootNode=this._isRootNode(this.scrollParent[0]),pageX=event.pageX,pageY=event.pageY;return scrollIsRootNode&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),constrainPosition&&(this.containment&&(this.relativeContainer?(co=this.relativeContainer.offset(),containment=[this.containment[0]+co.left,this.containment[1]+co.top,this.containment[2]+co.left,this.containment[3]+co.top]):containment=this.containment,event.pageX-this.offset.click.left<containment[0]&&(pageX=containment[0]+this.offset.click.left),event.pageY-this.offset.click.top<containment[1]&&(pageY=containment[1]+this.offset.click.top),event.pageX-this.offset.click.left>containment[2]&&(pageX=containment[2]+this.offset.click.left),event.pageY-this.offset.click.top>containment[3]&&(pageY=containment[3]+this.offset.click.top)),o.grid&&(top=o.grid[1]?this.originalPageY+Math.round((pageY-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,pageY=containment?top-this.offset.click.top>=containment[1]||top-this.offset.click.top>containment[3]?top:top-this.offset.click.top>=containment[1]?top-o.grid[1]:top+o.grid[1]:top,left=o.grid[0]?this.originalPageX+Math.round((pageX-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,pageX=containment?left-this.offset.click.left>=containment[0]||left-this.offset.click.left>containment[2]?left:left-this.offset.click.left>=containment[0]?left-o.grid[0]:left+o.grid[0]:left),"y"===o.axis&&(pageX=this.originalPageX),"x"===o.axis&&(pageY=this.originalPageY)),{top:pageY-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:scrollIsRootNode?0:this.offset.scroll.top),left:pageX-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:scrollIsRootNode?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(type,event,ui){return ui=ui||this._uiHash(),$.ui.plugin.call(this,type,[event,ui,this],!0),/^(drag|start|stop)/.test(type)&&(this.positionAbs=this._convertPositionTo("absolute"),ui.offset=this.positionAbs),$.Widget.prototype._trigger.call(this,type,event,ui)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),$.ui.plugin.add("draggable","connectToSortable",{start:function(event,ui,draggable){var uiSortable=$.extend({},ui,{item:draggable.element});draggable.sortables=[],$(draggable.options.connectToSortable).each(function(){var sortable=$(this).sortable("instance");sortable&&!sortable.options.disabled&&(draggable.sortables.push(sortable),sortable.refreshPositions(),sortable._trigger("activate",event,uiSortable))})},stop:function(event,ui,draggable){var uiSortable=$.extend({},ui,{item:draggable.element});draggable.cancelHelperRemoval=!1,$.each(draggable.sortables,function(){var sortable=this;sortable.isOver?(sortable.isOver=0,draggable.cancelHelperRemoval=!0,sortable.cancelHelperRemoval=!1,sortable._storedCSS={position:sortable.placeholder.css("position"),top:sortable.placeholder.css("top"),left:sortable.placeholder.css("left")},sortable._mouseStop(event),sortable.options.helper=sortable.options._helper):(sortable.cancelHelperRemoval=!0,sortable._trigger("deactivate",event,uiSortable))})},drag:function(event,ui,draggable){$.each(draggable.sortables,function(){var innermostIntersecting=!1,sortable=this;sortable.positionAbs=draggable.positionAbs,sortable.helperProportions=draggable.helperProportions,sortable.offset.click=draggable.offset.click,sortable._intersectsWith(sortable.containerCache)&&(innermostIntersecting=!0,$.each(draggable.sortables,function(){return this.positionAbs=draggable.positionAbs,this.helperProportions=draggable.helperProportions,this.offset.click=draggable.offset.click,this!==sortable&&this._intersectsWith(this.containerCache)&&$.contains(sortable.element[0],this.element[0])&&(innermostIntersecting=!1),innermostIntersecting})),innermostIntersecting?(sortable.isOver||(sortable.isOver=1,draggable._parent=ui.helper.parent(),sortable.currentItem=ui.helper.appendTo(sortable.element).data("ui-sortable-item",!0),sortable.options._helper=sortable.options.helper,sortable.options.helper=function(){return ui.helper[0]},event.target=sortable.currentItem[0],sortable._mouseCapture(event,!0),sortable._mouseStart(event,!0,!0),sortable.offset.click.top=draggable.offset.click.top,sortable.offset.click.left=draggable.offset.click.left,sortable.offset.parent.left-=draggable.offset.parent.left-sortable.offset.parent.left,sortable.offset.parent.top-=draggable.offset.parent.top-sortable.offset.parent.top,draggable._trigger("toSortable",event),draggable.dropped=sortable.element,$.each(draggable.sortables,function(){this.refreshPositions()}),draggable.currentItem=draggable.element,sortable.fromOutside=draggable),sortable.currentItem&&(sortable._mouseDrag(event),ui.position=sortable.position)):sortable.isOver&&(sortable.isOver=0,sortable.cancelHelperRemoval=!0,sortable.options._revert=sortable.options.revert,sortable.options.revert=!1,sortable._trigger("out",event,sortable._uiHash(sortable)),sortable._mouseStop(event,!0),sortable.options.revert=sortable.options._revert,sortable.options.helper=sortable.options._helper,sortable.placeholder&&sortable.placeholder.remove(),ui.helper.appendTo(draggable._parent),draggable._refreshOffsets(event),ui.position=draggable._generatePosition(event,!0),draggable._trigger("fromSortable",event),draggable.dropped=!1,$.each(draggable.sortables,function(){this.refreshPositions()}))})}}),$.ui.plugin.add("draggable","cursor",{start:function(event,ui,instance){var t=$("body"),o=instance.options;t.css("cursor")&&(o._cursor=t.css("cursor")),t.css("cursor",o.cursor)},stop:function(event,ui,instance){var o=instance.options;o._cursor&&$("body").css("cursor",o._cursor)}}),$.ui.plugin.add("draggable","opacity",{start:function(event,ui,instance){var t=$(ui.helper),o=instance.options;t.css("opacity")&&(o._opacity=t.css("opacity")),t.css("opacity",o.opacity)},stop:function(event,ui,instance){var o=instance.options;o._opacity&&$(ui.helper).css("opacity",o._opacity)}}),$.ui.plugin.add("draggable","scroll",{start:function(event,ui,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(event,ui,i){var o=i.options,scrolled=!1,scrollParent=i.scrollParentNotHidden[0],document=i.document[0];scrollParent!==document&&"HTML"!==scrollParent.tagName?(o.axis&&"x"===o.axis||(i.overflowOffset.top+scrollParent.offsetHeight-event.pageY<o.scrollSensitivity?scrollParent.scrollTop=scrolled=scrollParent.scrollTop+o.scrollSpeed:event.pageY-i.overflowOffset.top<o.scrollSensitivity&&(scrollParent.scrollTop=scrolled=scrollParent.scrollTop-o.scrollSpeed)),o.axis&&"y"===o.axis||(i.overflowOffset.left+scrollParent.offsetWidth-event.pageX<o.scrollSensitivity?scrollParent.scrollLeft=scrolled=scrollParent.scrollLeft+o.scrollSpeed:event.pageX-i.overflowOffset.left<o.scrollSensitivity&&(scrollParent.scrollLeft=scrolled=scrollParent.scrollLeft-o.scrollSpeed))):(o.axis&&"x"===o.axis||(event.pageY-$(document).scrollTop()<o.scrollSensitivity?scrolled=$(document).scrollTop($(document).scrollTop()-o.scrollSpeed):$(window).height()-(event.pageY-$(document).scrollTop())<o.scrollSensitivity&&(scrolled=$(document).scrollTop($(document).scrollTop()+o.scrollSpeed))),o.axis&&"y"===o.axis||(event.pageX-$(document).scrollLeft()<o.scrollSensitivity?scrolled=$(document).scrollLeft($(document).scrollLeft()-o.scrollSpeed):$(window).width()-(event.pageX-$(document).scrollLeft())<o.scrollSensitivity&&(scrolled=$(document).scrollLeft($(document).scrollLeft()+o.scrollSpeed)))),!1!==scrolled&&$.ui.ddmanager&&!o.dropBehaviour&&$.ui.ddmanager.prepareOffsets(i,event)}}),$.ui.plugin.add("draggable","snap",{start:function(event,ui,i){var o=i.options;i.snapElements=[],$(o.snap.constructor!==String?o.snap.items||":data(ui-draggable)":o.snap).each(function(){var $t=$(this),$o=$t.offset();this!==i.element[0]&&i.snapElements.push({item:this,width:$t.outerWidth(),height:$t.outerHeight(),top:$o.top,left:$o.left})})},drag:function(event,ui,inst){var ts,bs,ls,rs,l,r,t,b,i,first,o=inst.options,d=o.snapTolerance,x1=ui.offset.left,x2=x1+inst.helperProportions.width,y1=ui.offset.top,y2=y1+inst.helperProportions.height;for(i=inst.snapElements.length-1;i>=0;i--)l=inst.snapElements[i].left-inst.margins.left,r=l+inst.snapElements[i].width,t=inst.snapElements[i].top-inst.margins.top,b=t+inst.snapElements[i].height,x2<l-d||x1>r+d||y2<t-d||y1>b+d||!$.contains(inst.snapElements[i].item.ownerDocument,inst.snapElements[i].item)?(inst.snapElements[i].snapping&&inst.options.snap.release&&inst.options.snap.release.call(inst.element,event,$.extend(inst._uiHash(),{snapItem:inst.snapElements[i].item})),inst.snapElements[i].snapping=!1):("inner"!==o.snapMode&&(ts=Math.abs(t-y2)<=d,bs=Math.abs(b-y1)<=d,ls=Math.abs(l-x2)<=d,rs=Math.abs(r-x1)<=d,ts&&(ui.position.top=inst._convertPositionTo("relative",{top:t-inst.helperProportions.height,left:0}).top),bs&&(ui.position.top=inst._convertPositionTo("relative",{top:b,left:0}).top),ls&&(ui.position.left=inst._convertPositionTo("relative",{top:0,left:l-inst.helperProportions.width}).left),rs&&(ui.position.left=inst._convertPositionTo("relative",{top:0,left:r}).left)),first=ts||bs||ls||rs,"outer"!==o.snapMode&&(ts=Math.abs(t-y1)<=d,bs=Math.abs(b-y2)<=d,ls=Math.abs(l-x1)<=d,rs=Math.abs(r-x2)<=d,ts&&(ui.position.top=inst._convertPositionTo("relative",{top:t,left:0}).top),bs&&(ui.position.top=inst._convertPositionTo("relative",{top:b-inst.helperProportions.height,left:0}).top),ls&&(ui.position.left=inst._convertPositionTo("relative",{top:0,left:l}).left),rs&&(ui.position.left=inst._convertPositionTo("relative",{top:0,left:r-inst.helperProportions.width}).left)),!inst.snapElements[i].snapping&&(ts||bs||ls||rs||first)&&inst.options.snap.snap&&inst.options.snap.snap.call(inst.element,event,$.extend(inst._uiHash(),{snapItem:inst.snapElements[i].item})),inst.snapElements[i].snapping=ts||bs||ls||rs||first)}}),$.ui.plugin.add("draggable","stack",{start:function(event,ui,instance){var min,o=instance.options,group=$.makeArray($(o.stack)).sort(function(a,b){return(parseInt($(a).css("zIndex"),10)||0)-(parseInt($(b).css("zIndex"),10)||0)});group.length&&(min=parseInt($(group[0]).css("zIndex"),10)||0,$(group).each(function(i){$(this).css("zIndex",min+i)}),this.css("zIndex",min+group.length))}}),$.ui.plugin.add("draggable","zIndex",{start:function(event,ui,instance){var t=$(ui.helper),o=instance.options;t.css("zIndex")&&(o._zIndex=t.css("zIndex")),t.css("zIndex",o.zIndex)},stop:function(event,ui,instance){var o=instance.options;o._zIndex&&$(ui.helper).css("zIndex",o._zIndex)}});$.ui.draggable});var _=function(obj){return obj instanceof _?obj:this instanceof _?void(this._wrapped=obj):new _(obj)};!function(){function createReduce(dir){function iterator(obj,iteratee,memo,keys,index,length){for(;index>=0&&index<length;index+=dir){var currentKey=keys?keys[index]:index;memo=iteratee(memo,obj[currentKey],currentKey,obj)}return memo}return function(obj,iteratee,memo,context){iteratee=optimizeCb(iteratee,context,4);var keys=!isArrayLike(obj)&&_.keys(obj),length=(keys||obj).length,index=dir>0?0:length-1;return arguments.length<3&&(memo=obj[keys?keys[index]:index],index+=dir),iterator(obj,iteratee,memo,keys,index,length)}}function createPredicateIndexFinder(dir){return function(array,predicate,context){predicate=cb(predicate,context);for(var length=getLength(array),index=dir>0?0:length-1;index>=0&&index<length;index+=dir)if(predicate(array[index],index,array))return index;return-1}}function createIndexFinder(dir,predicateFind,sortedIndex){return function(array,item,idx){var i=0,length=getLength(array);if("number"==typeof idx)dir>0?i=idx>=0?idx:Math.max(idx+length,i):length=idx>=0?Math.min(idx+1,length):idx+length+1;else if(sortedIndex&&idx&&length)return idx=sortedIndex(array,item),array[idx]===item?idx:-1;if(item!==item)return idx=predicateFind(slice.call(array,i,length),_.isNaN),idx>=0?idx+i:-1;for(idx=dir>0?i:length-1;idx>=0&&idx<length;idx+=dir)if(array[idx]===item)return idx;return-1}}function collectNonEnumProps(obj,keys){var nonEnumIdx=nonEnumerableProps.length,constructor=obj.constructor,proto=_.isFunction(constructor)&&constructor.prototype||ObjProto,prop="constructor";for(_.has(obj,prop)&&!_.contains(keys,prop)&&keys.push(prop);nonEnumIdx--;)(prop=nonEnumerableProps[nonEnumIdx])in obj&&obj[prop]!==proto[prop]&&!_.contains(keys,prop)&&keys.push(prop)}var ArrayProto=Array.prototype,ObjProto=Object.prototype,FuncProto=Function.prototype,push=ArrayProto.push,slice=ArrayProto.slice,toString=ObjProto.toString,hasOwnProperty=ObjProto.hasOwnProperty,nativeIsArray=Array.isArray,nativeKeys=Object.keys,nativeBind=FuncProto.bind,nativeCreate=Object.create,Ctor=function(){};_.VERSION="1.8.3";var optimizeCb=function(func,context,argCount){if(void 0===context)return func;switch(null==argCount?3:argCount){case 1:return function(value){return func.call(context,value)};case 2:return function(value,other){return func.call(context,value,other)};case 3:return function(value,index,collection){return func.call(context,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(context,accumulator,value,index,collection)}}return function(){return func.apply(context,arguments)}},cb=function(value,context,argCount){return null==value?_.identity:_.isFunction(value)?optimizeCb(value,context,argCount):_.isObject(value)?_.matcher(value):_.property(value)};_.iteratee=function(value,context){return cb(value,context,1/0)};var createAssigner=function(keysFunc,undefinedOnly){return function(obj){var length=arguments.length;if(length<2||null==obj)return obj;for(var index=1;index<length;index++)for(var source=arguments[index],keys=keysFunc(source),l=keys.length,i=0;i<l;i++){var key=keys[i];undefinedOnly&&void 0!==obj[key]||(obj[key]=source[key])}return obj}},baseCreate=function(prototype){if(!_.isObject(prototype))return{};if(nativeCreate)return nativeCreate(prototype);Ctor.prototype=prototype;var result=new Ctor;return Ctor.prototype=null,result},property=function(key){return function(obj){return null==obj?void 0:obj[key]}},MAX_ARRAY_INDEX=Math.pow(2,53)-1,getLength=property("length"),isArrayLike=function(collection){var length=getLength(collection);return"number"==typeof length&&length>=0&&length<=MAX_ARRAY_INDEX};_.each=_.forEach=function(obj,iteratee,context){iteratee=optimizeCb(iteratee,context);var i,length;if(isArrayLike(obj))for(i=0,length=obj.length;i<length;i++)iteratee(obj[i],i,obj);else{var keys=_.keys(obj);for(i=0,length=keys.length;i<length;i++)iteratee(obj[keys[i]],keys[i],obj)}return obj},_.map=_.collect=function(obj,iteratee,context){iteratee=cb(iteratee,context);for(var keys=!isArrayLike(obj)&&_.keys(obj),length=(keys||obj).length,results=Array(length),index=0;index<length;index++){var currentKey=keys?keys[index]:index;results[index]=iteratee(obj[currentKey],currentKey,obj)}return results},_.reduce=_.foldl=_.inject=createReduce(1),_.reduceRight=_.foldr=createReduce(-1),_.find=_.detect=function(obj,predicate,context){var key;if(void 0!==(key=isArrayLike(obj)?_.findIndex(obj,predicate,context):_.findKey(obj,predicate,context))&&-1!==key)return obj[key]},_.filter=_.select=function(obj,predicate,context){var results=[];return predicate=cb(predicate,context),_.each(obj,function(value,index,list){predicate(value,index,list)&&results.push(value)}),results},_.reject=function(obj,predicate,context){return _.filter(obj,_.negate(cb(predicate)),context)},_.every=_.all=function(obj,predicate,context){predicate=cb(predicate,context);for(var keys=!isArrayLike(obj)&&_.keys(obj),length=(keys||obj).length,index=0;index<length;index++){var currentKey=keys?keys[index]:index;if(!predicate(obj[currentKey],currentKey,obj))return!1}return!0},_.some=_.any=function(obj,predicate,context){predicate=cb(predicate,context);for(var keys=!isArrayLike(obj)&&_.keys(obj),length=(keys||obj).length,index=0;index<length;index++){var currentKey=keys?keys[index]:index;if(predicate(obj[currentKey],currentKey,obj))return!0}return!1},_.contains=_.includes=_.include=function(obj,item,fromIndex,guard){return isArrayLike(obj)||(obj=_.values(obj)),("number"!=typeof fromIndex||guard)&&(fromIndex=0),_.indexOf(obj,item,fromIndex)>=0},_.invoke=function(obj,method){var args=slice.call(arguments,2),isFunc=_.isFunction(method);return _.map(obj,function(value){var func=isFunc?method:value[method];return null==func?func:func.apply(value,args)})},_.pluck=function(obj,key){return _.map(obj,_.property(key))},_.where=function(obj,attrs){return _.filter(obj,_.matcher(attrs))},_.findWhere=function(obj,attrs){return _.find(obj,_.matcher(attrs))},_.max=function(obj,iteratee,context){var value,computed,result=-1/0,lastComputed=-1/0;if(null==iteratee&&null!=obj){obj=isArrayLike(obj)?obj:_.values(obj);for(var i=0,length=obj.length;i<length;i++)(value=obj[i])>result&&(result=value)}else iteratee=cb(iteratee,context),_.each(obj,function(value,index,list){((computed=iteratee(value,index,list))>lastComputed||computed===-1/0&&result===-1/0)&&(result=value,lastComputed=computed)});return result},_.min=function(obj,iteratee,context){var value,computed,result=1/0,lastComputed=1/0;if(null==iteratee&&null!=obj){obj=isArrayLike(obj)?obj:_.values(obj);for(var i=0,length=obj.length;i<length;i++)(value=obj[i])<result&&(result=value)}else iteratee=cb(iteratee,context),_.each(obj,function(value,index,list){((computed=iteratee(value,index,list))<lastComputed||computed===1/0&&result===1/0)&&(result=value,lastComputed=computed)});return result},_.shuffle=function(obj){for(var rand,set=isArrayLike(obj)?obj:_.values(obj),length=set.length,shuffled=Array(length),index=0;index<length;index++)rand=_.random(0,index),rand!==index&&(shuffled[index]=shuffled[rand]),shuffled[rand]=set[index];return shuffled},_.sample=function(obj,n,guard){return null==n||guard?(isArrayLike(obj)||(obj=_.values(obj)),obj[_.random(obj.length-1)]):_.shuffle(obj).slice(0,Math.max(0,n))},_.sortBy=function(obj,iteratee,context){return iteratee=cb(iteratee,context),_.pluck(_.map(obj,function(value,index,list){return{value:value,index:index,criteria:iteratee(value,index,list)}}).sort(function(left,right){var a=left.criteria,b=right.criteria;if(a!==b){if(a>b||void 0===a)return 1;if(a<b||void 0===b)return-1}return left.index-right.index}),"value")};var group=function(behavior){return function(obj,iteratee,context){var result={};return iteratee=cb(iteratee,context),_.each(obj,function(value,index){var key=iteratee(value,index,obj);behavior(result,value,key)}),result}};_.groupBy=group(function(result,value,key){_.has(result,key)?result[key].push(value):result[key]=[value]}),_.indexBy=group(function(result,value,key){result[key]=value}),_.countBy=group(function(result,value,key){_.has(result,key)?result[key]++:result[key]=1}),_.toArray=function(obj){return obj?_.isArray(obj)?slice.call(obj):isArrayLike(obj)?_.map(obj,_.identity):_.values(obj):[]},_.size=function(obj){return null==obj?0:isArrayLike(obj)?obj.length:_.keys(obj).length},_.partition=function(obj,predicate,context){predicate=cb(predicate,context);var pass=[],fail=[];return _.each(obj,function(value,key,obj){(predicate(value,key,obj)?pass:fail).push(value)}),[pass,fail]},_.first=_.head=_.take=function(array,n,guard){if(null!=array)return null==n||guard?array[0]:_.initial(array,array.length-n)},_.initial=function(array,n,guard){return slice.call(array,0,Math.max(0,array.length-(null==n||guard?1:n)))},_.last=function(array,n,guard){if(null!=array)return null==n||guard?array[array.length-1]:_.rest(array,Math.max(0,array.length-n))},_.rest=_.tail=_.drop=function(array,n,guard){return slice.call(array,null==n||guard?1:n)},_.compact=function(array){return _.filter(array,_.identity)};var flatten=function(input,shallow,strict,startIndex){for(var output=[],idx=0,i=startIndex||0,length=getLength(input);i<length;i++){var value=input[i];if(isArrayLike(value)&&(_.isArray(value)||_.isArguments(value))){shallow||(value=flatten(value,shallow,strict));var j=0,len=value.length;for(output.length+=len;j<len;)output[idx++]=value[j++]}else strict||(output[idx++]=value)}return output};_.flatten=function(array,shallow){return flatten(array,shallow,!1)},_.without=function(array){return _.difference(array,slice.call(arguments,1))},_.uniq=_.unique=function(array,isSorted,iteratee,context){_.isBoolean(isSorted)||(context=iteratee,iteratee=isSorted,isSorted=!1),null!=iteratee&&(iteratee=cb(iteratee,context));for(var result=[],seen=[],i=0,length=getLength(array);i<length;i++){var value=array[i],computed=iteratee?iteratee(value,i,array):value;isSorted?(i&&seen===computed||result.push(value),seen=computed):iteratee?_.contains(seen,computed)||(seen.push(computed),result.push(value)):_.contains(result,value)||result.push(value)}return result},_.union=function(){return _.uniq(flatten(arguments,!0,!0))},_.intersection=function(array){for(var result=[],argsLength=arguments.length,i=0,length=getLength(array);i<length;i++){var item=array[i];if(!_.contains(result,item)){for(var j=1;j<argsLength&&_.contains(arguments[j],item);j++);j===argsLength&&result.push(item)}}return result},_.difference=function(array){var rest=flatten(arguments,!0,!0,1);return _.filter(array,function(value){return!_.contains(rest,value)})},_.zip=function(){return _.unzip(arguments)},_.unzip=function(array){for(var length=array&&_.max(array,getLength).length||0,result=Array(length),index=0;index<length;index++)result[index]=_.pluck(array,index);return result},_.object=function(list,values){for(var result={},i=0,length=getLength(list);i<length;i++)values?result[list[i]]=values[i]:result[list[i][0]]=list[i][1];return result},_.findIndex=createPredicateIndexFinder(1),_.findLastIndex=createPredicateIndexFinder(-1),_.sortedIndex=function(array,obj,iteratee,context){iteratee=cb(iteratee,context,1);for(var value=iteratee(obj),low=0,high=getLength(array);low<high;){var mid=Math.floor((low+high)/2);iteratee(array[mid])<value?low=mid+1:high=mid}return low},_.indexOf=createIndexFinder(1,_.findIndex,_.sortedIndex),_.lastIndexOf=createIndexFinder(-1,_.findLastIndex),_.range=function(start,stop,step){null==stop&&(stop=start||0,start=0),step=step||1;for(var length=Math.max(Math.ceil((stop-start)/step),0),range=Array(length),idx=0;idx<length;idx++,start+=step)range[idx]=start;return range};var executeBound=function(sourceFunc,boundFunc,context,callingContext,args){if(!(callingContext instanceof boundFunc))return sourceFunc.apply(context,args);var self=baseCreate(sourceFunc.prototype),result=sourceFunc.apply(self,args);return _.isObject(result)?result:self};_.bind=function(func,context){if(nativeBind&&func.bind===nativeBind)return nativeBind.apply(func,slice.call(arguments,1));if(!_.isFunction(func))throw new TypeError("Bind must be called on a function");var args=slice.call(arguments,2),bound=function(){return executeBound(func,bound,context,this,args.concat(slice.call(arguments)))};return bound},_.partial=function(func){var boundArgs=slice.call(arguments,1),bound=function(){for(var position=0,length=boundArgs.length,args=Array(length),i=0;i<length;i++)args[i]=boundArgs[i]===_?arguments[position++]:boundArgs[i];for(;position<arguments.length;)args.push(arguments[position++]);return executeBound(func,bound,this,this,args)};return bound},_.bindAll=function(obj){var i,key,length=arguments.length;if(length<=1)throw new Error("bindAll must be passed function names");for(i=1;i<length;i++)key=arguments[i],obj[key]=_.bind(obj[key],obj);return obj},_.memoize=function(func,hasher){var memoize=function(key){var cache=memoize.cache,address=""+(hasher?hasher.apply(this,arguments):key);return _.has(cache,address)||(cache[address]=func.apply(this,arguments)),cache[address]};return memoize.cache={},memoize},_.delay=function(func,wait){var args=slice.call(arguments,2);return setTimeout(function(){return func.apply(null,args)},wait)},_.defer=_.partial(_.delay,_,1),_.throttle=function(func,wait,options){var context,args,result,timeout=null,previous=0;options||(options={});var later=function(){previous=!1===options.leading?0:_.now(),timeout=null,result=func.apply(context,args),timeout||(context=args=null)};return function(){var now=_.now();previous||!1!==options.leading||(previous=now);var remaining=wait-(now-previous);return context=this,args=arguments,remaining<=0||remaining>wait?(timeout&&(clearTimeout(timeout),timeout=null),previous=now,result=func.apply(context,args),timeout||(context=args=null)):timeout||!1===options.trailing||(timeout=setTimeout(later,remaining)),result}},_.debounce=function(func,wait,immediate){var timeout,args,context,timestamp,result,later=function(){var last=_.now()-timestamp;last<wait&&last>=0?timeout=setTimeout(later,wait-last):(timeout=null,immediate||(result=func.apply(context,args),timeout||(context=args=null)))};return function(){context=this,args=arguments,timestamp=_.now();var callNow=immediate&&!timeout;return timeout||(timeout=setTimeout(later,wait)),callNow&&(result=func.apply(context,args),context=args=null),result}},_.wrap=function(func,wrapper){return _.partial(wrapper,func)},_.negate=function(predicate){return function(){return!predicate.apply(this,arguments)}},_.compose=function(){var args=arguments,start=args.length-1;return function(){for(var i=start,result=args[start].apply(this,arguments);i--;)result=args[i].call(this,result);return result}},_.after=function(times,func){return function(){if(--times<1)return func.apply(this,arguments)}},_.before=function(times,func){var memo;return function(){return--times>0&&(memo=func.apply(this,arguments)),times<=1&&(func=null),memo}},_.once=_.partial(_.before,2);var hasEnumBug=!{toString:null}.propertyIsEnumerable("toString"),nonEnumerableProps=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];_.keys=function(obj){if(!_.isObject(obj))return[];if(nativeKeys)return nativeKeys(obj);var keys=[];for(var key in obj)_.has(obj,key)&&keys.push(key);return hasEnumBug&&collectNonEnumProps(obj,keys),keys},_.allKeys=function(obj){if(!_.isObject(obj))return[];var keys=[];for(var key in obj)keys.push(key);return hasEnumBug&&collectNonEnumProps(obj,keys),keys},_.values=function(obj){for(var keys=_.keys(obj),length=keys.length,values=Array(length),i=0;i<length;i++)values[i]=obj[keys[i]];return values},_.mapObject=function(obj,iteratee,context){iteratee=cb(iteratee,context);for(var currentKey,keys=_.keys(obj),length=keys.length,results={},index=0;index<length;index++)currentKey=keys[index],results[currentKey]=iteratee(obj[currentKey],currentKey,obj);return results},_.pairs=function(obj){for(var keys=_.keys(obj),length=keys.length,pairs=Array(length),i=0;i<length;i++)pairs[i]=[keys[i],obj[keys[i]]];return pairs},_.invert=function(obj){for(var result={},keys=_.keys(obj),i=0,length=keys.length;i<length;i++)result[obj[keys[i]]]=keys[i];return result},_.functions=_.methods=function(obj){var names=[];for(var key in obj)_.isFunction(obj[key])&&names.push(key);return names.sort()},_.extend=createAssigner(_.allKeys),_.extendOwn=_.assign=createAssigner(_.keys),_.findKey=function(obj,predicate,context){predicate=cb(predicate,context);for(var key,keys=_.keys(obj),i=0,length=keys.length;i<length;i++)if(key=keys[i],predicate(obj[key],key,obj))return key},_.pick=function(object,oiteratee,context){var iteratee,keys,result={},obj=object;if(null==obj)return result;_.isFunction(oiteratee)?(keys=_.allKeys(obj),iteratee=optimizeCb(oiteratee,context)):(keys=flatten(arguments,!1,!1,1),iteratee=function(value,key,obj){return key in obj},obj=Object(obj));for(var i=0,length=keys.length;i<length;i++){var key=keys[i],value=obj[key];iteratee(value,key,obj)&&(result[key]=value)}return result},_.omit=function(obj,iteratee,context){if(_.isFunction(iteratee))iteratee=_.negate(iteratee);else{var keys=_.map(flatten(arguments,!1,!1,1),String);iteratee=function(value,key){return!_.contains(keys,key)}}return _.pick(obj,iteratee,context)},_.defaults=createAssigner(_.allKeys,!0),_.create=function(prototype,props){var result=baseCreate(prototype);return props&&_.extendOwn(result,props),result},_.clone=function(obj){return _.isObject(obj)?_.isArray(obj)?obj.slice():_.extend({},obj):obj},_.tap=function(obj,interceptor){return interceptor(obj),obj},_.isMatch=function(object,attrs){var keys=_.keys(attrs),length=keys.length;if(null==object)return!length;for(var obj=Object(object),i=0;i<length;i++){var key=keys[i];if(attrs[key]!==obj[key]||!(key in obj))return!1}return!0};var eq=function(a,b,aStack,bStack){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof _&&(a=a._wrapped),b instanceof _&&(b=b._wrapped);var className=toString.call(a);if(className!==toString.call(b))return!1;switch(className){case"[object RegExp]":case"[object String]":return""+a==""+b;case"[object Number]":return+a!=+a?+b!=+b:0==+a?1/+a==1/b:+a==+b;case"[object Date]":case"[object Boolean]":return+a==+b}var areArrays="[object Array]"===className;if(!areArrays){if("object"!=typeof a||"object"!=typeof b)return!1;var aCtor=a.constructor,bCtor=b.constructor;if(aCtor!==bCtor&&!(_.isFunction(aCtor)&&aCtor instanceof aCtor&&_.isFunction(bCtor)&&bCtor instanceof bCtor)&&"constructor"in a&&"constructor"in b)return!1}aStack=aStack||[],bStack=bStack||[];for(var length=aStack.length;length--;)if(aStack[length]===a)return bStack[length]===b;if(aStack.push(a),bStack.push(b),areArrays){if((length=a.length)!==b.length)return!1;for(;length--;)if(!eq(a[length],b[length],aStack,bStack))return!1}else{var key,keys=_.keys(a);if(length=keys.length,_.keys(b).length!==length)return!1;for(;length--;)if(key=keys[length],!_.has(b,key)||!eq(a[key],b[key],aStack,bStack))return!1}return aStack.pop(),bStack.pop(),!0};_.isEqual=function(a,b){return eq(a,b)},_.isEmpty=function(obj){return null==obj||(isArrayLike(obj)&&(_.isArray(obj)||_.isString(obj)||_.isArguments(obj))?0===obj.length:0===_.keys(obj).length)},_.isElement=function(obj){return!(!obj||1!==obj.nodeType)},_.isArray=nativeIsArray||function(obj){return"[object Array]"===toString.call(obj)},_.isObject=function(obj){var type=typeof obj;return"function"===type||"object"===type&&!!obj},_.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(name){_["is"+name]=function(obj){return toString.call(obj)==="[object "+name+"]"}}),_.isArguments(arguments)||(_.isArguments=function(obj){return _.has(obj,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(_.isFunction=function(obj){return"function"==typeof obj||!1}),_.isFinite=function(obj){return isFinite(obj)&&!isNaN(parseFloat(obj))},_.isNaN=function(obj){return _.isNumber(obj)&&obj!==+obj},_.isBoolean=function(obj){return!0===obj||!1===obj||"[object Boolean]"===toString.call(obj)},_.isNull=function(obj){return null===obj},_.isUndefined=function(obj){return void 0===obj},_.has=function(obj,key){return null!=obj&&hasOwnProperty.call(obj,key)},_.identity=function(value){return value},_.constant=function(value){return function(){return value}},_.noop=function(){},_.property=property,_.propertyOf=function(obj){return null==obj?function(){}:function(key){return obj[key]}},_.matcher=_.matches=function(attrs){return attrs=_.extendOwn({},attrs),function(obj){return _.isMatch(obj,attrs)}},_.times=function(n,iteratee,context){var accum=Array(Math.max(0,n));iteratee=optimizeCb(iteratee,context,1);for(var i=0;i<n;i++)accum[i]=iteratee(i);return accum},_.random=function(min,max){return null==max&&(max=min,min=0),min+Math.floor(Math.random()*(max-min+1))},_.now=Date.now||function(){return(new Date).getTime()};var escapeMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},unescapeMap=_.invert(escapeMap),createEscaper=function(map){var escaper=function(match){return map[match]},source="(?:"+_.keys(map).join("|")+")",testRegexp=RegExp(source),replaceRegexp=RegExp(source,"g");return function(string){return string=null==string?"":""+string,testRegexp.test(string)?string.replace(replaceRegexp,escaper):string}};_.escape=createEscaper(escapeMap),_.unescape=createEscaper(unescapeMap),_.result=function(object,property,fallback){var value=null==object?void 0:object[property];return void 0===value&&(value=fallback),_.isFunction(value)?value.call(object):value};var idCounter=0;_.uniqueId=function(prefix){var id=++idCounter+"";return prefix?prefix+id:id},_.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var noMatch=/(.)^/,escapes={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},escaper=/\\|'|\r|\n|\u2028|\u2029/g,escapeChar=function(match){return"\\"+escapes[match]};_.template=function(text,settings,oldSettings){!settings&&oldSettings&&(settings=oldSettings),settings=_.defaults({},settings,_.templateSettings);var matcher=RegExp([(settings.escape||noMatch).source,(settings.interpolate||noMatch).source,(settings.evaluate||noMatch).source].join("|")+"|$","g"),index=0,source="__p+='";text.replace(matcher,function(match,escape,interpolate,evaluate,offset){return source+=text.slice(index,offset).replace(escaper,escapeChar),index=offset+match.length,escape?source+="'+\n((__t=("+escape+"))==null?'':_.escape(__t))+\n'":interpolate?source+="'+\n((__t=("+interpolate+"))==null?'':__t)+\n'":evaluate&&(source+="';\n"+evaluate+"\n__p+='"),match}),source+="';\n",settings.variable||(source="with(obj||{}){\n"+source+"}\n"),source="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+source+"return __p;\n";try{var render=new Function(settings.variable||"obj","_",source)}catch(e){throw e.source=source,e}var template=function(data){return render.call(this,data,_)},argument=settings.variable||"obj";return template.source="function("+argument+"){\n"+source+"}",template},_.chain=function(obj){var instance=_(obj);return instance._chain=!0,instance};var result=function(instance,obj){return instance._chain?_(obj).chain():obj};_.mixin=function(obj){_.each(_.functions(obj),function(name){var func=_[name]=obj[name];_.prototype[name]=function(){var args=[this._wrapped];return push.apply(args,arguments),result(this,func.apply(_,args))}})},_.mixin(_),_.each(["pop","push","reverse","shift","sort","splice","unshift"],function(name){var method=ArrayProto[name];_.prototype[name]=function(){var obj=this._wrapped;return method.apply(obj,arguments),"shift"!==name&&"splice"!==name||0!==obj.length||delete obj[0],result(this,obj)}}),_.each(["concat","join","slice"],function(name){var method=ArrayProto[name];_.prototype[name]=function(){return result(this,method.apply(this._wrapped,arguments))}}),_.prototype.value=function(){return this._wrapped},_.prototype.valueOf=_.prototype.toJSON=_.prototype.value,_.prototype.toString=function(){return""+this._wrapped}}();var USE_TYPEDARRAY=!0,Zlib={Huffman:{},Util:{},CRC32:{}};Zlib.CompressionMethod={DEFLATE:8,RESERVED:15},Zlib.Zip=function(opt_params){opt_params=opt_params||{},this.files=[],this.comment=opt_params.comment,this.password},Zlib.Zip.CompressionMethod={STORE:0,DEFLATE:8},Zlib.Zip.OperatingSystem={MSDOS:0,UNIX:3,MACINTOSH:7},Zlib.Zip.Flags={ENCRYPT:1,DESCRIPTOR:8,UTF8:2048},Zlib.Zip.FileHeaderSignature=[80,75,1,2],Zlib.Zip.LocalFileHeaderSignature=[80,75,3,4],Zlib.Zip.CentralDirectorySignature=[80,75,5,6],Zlib.Zip.prototype.addFile=function(input,opt_params){opt_params=opt_params||{};var compressed,size=(opt_params.filename,input.length),crc32=0;if(USE_TYPEDARRAY&&input instanceof Array&&(input=new Uint8Array(input)),"number"!=typeof opt_params.compressionMethod&&(opt_params.compressionMethod=Zlib.Zip.CompressionMethod.DEFLATE),opt_params.compress)switch(opt_params.compressionMethod){case Zlib.Zip.CompressionMethod.STORE:break;case Zlib.Zip.CompressionMethod.DEFLATE:crc32=Zlib.CRC32.calc(input),input=this.deflateWithOption(input,opt_params),compressed=!0;break;default:throw new Error("unknown compression method:"+opt_params.compressionMethod)}this.files.push({buffer:input,option:opt_params,compressed:compressed,encrypted:!1,size:size,crc32:crc32})},Zlib.Zip.prototype.setPassword=function(password){this.password=password},Zlib.Zip.prototype.compress=function(){var file,output,op1,op2,op3,endOfCentralDirectorySize,offset,needVersion,flags,compressionMethod,date,crc32,size,plainSize,filenameLength,extraFieldLength,commentLength,filename,extraField,comment,buffer,tmp,key,i,il,j,jl,files=this.files,localFileSize=0,centralDirectorySize=0;for(i=0,il=files.length;i<il;++i){if(file=files[i],filenameLength=file.option.filename?file.option.filename.length:0,extraFieldLength=file.option.extraField?file.option.extraField.length:0,commentLength=file.option.comment?file.option.comment.length:0,!file.compressed)switch(file.crc32=Zlib.CRC32.calc(file.buffer),file.option.compressionMethod){case Zlib.Zip.CompressionMethod.STORE:break;case Zlib.Zip.CompressionMethod.DEFLATE:file.buffer=this.deflateWithOption(file.buffer,file.option),file.compressed=!0;break;default:throw new Error("unknown compression method:"+file.option.compressionMethod)}if(void 0!==file.option.password||void 0!==this.password){for(key=this.createEncryptionKey(file.option.password||this.password),buffer=file.buffer,USE_TYPEDARRAY?(tmp=new Uint8Array(buffer.length+12),tmp.set(buffer,12),buffer=tmp):buffer.unshift(0,0,0,0,0,0,0,0,0,0,0,0),j=0;j<12;++j)buffer[j]=this.encode(key,11===i?255&file.crc32:256*Math.random()|0);for(jl=buffer.length;j<jl;++j)buffer[j]=this.encode(key,buffer[j]);file.buffer=buffer}localFileSize+=30+filenameLength+file.buffer.length,centralDirectorySize+=46+filenameLength+commentLength}for(endOfCentralDirectorySize=22+(this.comment?this.comment.length:0),output=new(USE_TYPEDARRAY?Uint8Array:Array)(localFileSize+centralDirectorySize+endOfCentralDirectorySize),op1=0,op2=localFileSize,op3=op2+centralDirectorySize,i=0,il=files.length;i<il;++i){if(file=files[i],filenameLength=file.option.filename?file.option.filename.length:0,extraFieldLength=0,commentLength=file.option.comment?file.option.comment.length:0,offset=op1,output[op1++]=Zlib.Zip.LocalFileHeaderSignature[0],output[op1++]=Zlib.Zip.LocalFileHeaderSignature[1],output[op1++]=Zlib.Zip.LocalFileHeaderSignature[2],output[op1++]=Zlib.Zip.LocalFileHeaderSignature[3],output[op2++]=Zlib.Zip.FileHeaderSignature[0],output[op2++]=Zlib.Zip.FileHeaderSignature[1],output[op2++]=Zlib.Zip.FileHeaderSignature[2],output[op2++]=Zlib.Zip.FileHeaderSignature[3],needVersion=20,output[op2++]=255&needVersion,output[op2++]=file.option.os||Zlib.Zip.OperatingSystem.MSDOS,output[op1++]=output[op2++]=255&needVersion,output[op1++]=output[op2++]=needVersion>>8&255,flags=0,(file.option.password||this.password)&&(flags|=Zlib.Zip.Flags.ENCRYPT),output[op1++]=output[op2++]=255&flags,output[op1++]=output[op2++]=flags>>8&255,compressionMethod=file.option.compressionMethod,output[op1++]=output[op2++]=255&compressionMethod,output[op1++]=output[op2++]=compressionMethod>>8&255,date=file.option.date||new Date,output[op1++]=output[op2++]=(7&date.getMinutes())<<5|date.getSeconds()/2|0,output[op1++]=output[op2++]=date.getHours()<<3|date.getMinutes()>>3,output[op1++]=output[op2++]=(date.getMonth()+1&7)<<5|date.getDate(),output[op1++]=output[op2++]=(date.getFullYear()-1980&127)<<1|date.getMonth()+1>>3,crc32=file.crc32,output[op1++]=output[op2++]=255&crc32,output[op1++]=output[op2++]=crc32>>8&255,output[op1++]=output[op2++]=crc32>>16&255,output[op1++]=output[op2++]=crc32>>24&255,size=file.buffer.length,output[op1++]=output[op2++]=255&size,output[op1++]=output[op2++]=size>>8&255,output[op1++]=output[op2++]=size>>16&255,output[op1++]=output[op2++]=size>>24&255,plainSize=file.size,output[op1++]=output[op2++]=255&plainSize,output[op1++]=output[op2++]=plainSize>>8&255,output[op1++]=output[op2++]=plainSize>>16&255,output[op1++]=output[op2++]=plainSize>>24&255,output[op1++]=output[op2++]=255&filenameLength,output[op1++]=output[op2++]=filenameLength>>8&255,output[op1++]=output[op2++]=255&extraFieldLength,output[op1++]=output[op2++]=extraFieldLength>>8&255,output[op2++]=255&commentLength,output[op2++]=commentLength>>8&255,output[op2++]=0,output[op2++]=0,output[op2++]=0,output[op2++]=0,output[op2++]=0,output[op2++]=0,output[op2++]=0,output[op2++]=0,output[op2++]=255&offset,output[op2++]=offset>>8&255,output[op2++]=offset>>16&255,output[op2++]=offset>>24&255,filename=file.option.filename)if(USE_TYPEDARRAY)output.set(filename,op1),output.set(filename,op2),op1+=filenameLength,op2+=filenameLength;else for(j=0;j<filenameLength;++j)output[op1++]=output[op2++]=filename[j];if(extraField=file.option.extraField)if(USE_TYPEDARRAY)output.set(extraField,op1),output.set(extraField,op2),op1+=extraFieldLength,op2+=extraFieldLength;else for(j=0;j<commentLength;++j)output[op1++]=output[op2++]=extraField[j];if(comment=file.option.comment)if(USE_TYPEDARRAY)output.set(comment,op2),op2+=commentLength;else for(j=0;j<commentLength;++j)output[op2++]=comment[j];if(USE_TYPEDARRAY)output.set(file.buffer,op1),op1+=file.buffer.length;else for(j=0,jl=file.buffer.length;j<jl;++j)output[op1++]=file.buffer[j]}if(output[op3++]=Zlib.Zip.CentralDirectorySignature[0],output[op3++]=Zlib.Zip.CentralDirectorySignature[1],output[op3++]=Zlib.Zip.CentralDirectorySignature[2],output[op3++]=Zlib.Zip.CentralDirectorySignature[3],output[op3++]=0,output[op3++]=0,output[op3++]=0,output[op3++]=0,output[op3++]=255&il,output[op3++]=il>>8&255,output[op3++]=255&il,output[op3++]=il>>8&255,output[op3++]=255&centralDirectorySize,output[op3++]=centralDirectorySize>>8&255,output[op3++]=centralDirectorySize>>16&255,output[op3++]=centralDirectorySize>>24&255,output[op3++]=255&localFileSize,output[op3++]=localFileSize>>8&255,output[op3++]=localFileSize>>16&255,output[op3++]=localFileSize>>24&255,commentLength=this.comment?this.comment.length:0,output[op3++]=255&commentLength,output[op3++]=commentLength>>8&255,this.comment)if(USE_TYPEDARRAY)output.set(this.comment,op3),op3+=commentLength;else for(j=0,jl=commentLength;j<jl;++j)output[op3++]=this.comment[j];return output},Zlib.Zip.prototype.deflateWithOption=function(input,opt_params){return new Zlib.RawDeflate(input,opt_params.deflateOption).compress()},Zlib.Zip.prototype.getByte=function(key){var tmp=65535&key[2]|2;return tmp*(1^tmp)>>8&255},Zlib.Zip.prototype.encode=function(key,n){var tmp=this.getByte(key);return this.updateKeys(key,n),tmp^n},Zlib.Zip.prototype.updateKeys=function(key,n){key[0]=Zlib.CRC32.single(key[0],n),key[1]=1+(6681*(20173*(key[1]+(255&key[0]))>>>0)>>>0)>>>0,key[2]=Zlib.CRC32.single(key[2],key[1]>>>24)},Zlib.Zip.prototype.createEncryptionKey=function(password){var i,il,key=[305419896,591751049,878082192];for(USE_TYPEDARRAY&&(key=new Uint32Array(key)),i=0,il=password.length;i<il;++i)this.updateKeys(key,255&password[i]);return key},Zlib.Huffman.buildHuffmanTable=function(lengths){var size,table,bitLength,code,skip,reversed,rtemp,i,il,j,value,listSize=lengths.length,maxCodeLength=0,minCodeLength=Number.POSITIVE_INFINITY;for(i=0,il=listSize;i<il;++i)lengths[i]>maxCodeLength&&(maxCodeLength=lengths[i]),lengths[i]<minCodeLength&&(minCodeLength=lengths[i]);for(size=1<<maxCodeLength,table=new(USE_TYPEDARRAY?Uint32Array:Array)(size),bitLength=1,code=0,skip=2;bitLength<=maxCodeLength;){for(i=0;i<listSize;++i)if(lengths[i]===bitLength){for(reversed=0,rtemp=code,j=0;j<bitLength;++j)reversed=reversed<<1|1&rtemp,rtemp>>=1;for(value=bitLength<<16|i,j=reversed;j<size;j+=skip)table[j]=value;++code}++bitLength,code<<=1,skip<<=1}return[table,maxCodeLength,minCodeLength]};var buildHuffmanTable=Zlib.Huffman.buildHuffmanTable;Zlib.RawInflate=function(input,opt_params){switch(this.buffer,this.blocks=[],this.bufferSize=32768,this.totalpos=0,this.ip=0,this.bitsbuf=0,this.bitsbuflen=0,this.input=USE_TYPEDARRAY?new Uint8Array(input):input,this.output,this.op,this.bfinal=!1,this.bufferType=Zlib.RawInflate.BufferType.ADAPTIVE,this.resize=!1,!opt_params&&(opt_params={})||(opt_params.index&&(this.ip=opt_params.index),opt_params.bufferSize&&(this.bufferSize=opt_params.bufferSize),opt_params.bufferType&&(this.bufferType=opt_params.bufferType),opt_params.resize&&(this.resize=opt_params.resize)),this.bufferType){case Zlib.RawInflate.BufferType.BLOCK:this.op=Zlib.RawInflate.MaxBackwardLength,this.output=new(USE_TYPEDARRAY?Uint8Array:Array)(Zlib.RawInflate.MaxBackwardLength+this.bufferSize+Zlib.RawInflate.MaxCopyLength);break;case Zlib.RawInflate.BufferType.ADAPTIVE:this.op=0,this.output=new(USE_TYPEDARRAY?Uint8Array:Array)(this.bufferSize);break;default:throw new Error("invalid inflate mode")}},Zlib.RawInflate.BufferType={BLOCK:0,ADAPTIVE:1},Zlib.RawInflate.prototype.decompress=function(){for(;!this.bfinal;)this.parseBlock();switch(this.bufferType){case Zlib.RawInflate.BufferType.BLOCK:return this.concatBufferBlock();case Zlib.RawInflate.BufferType.ADAPTIVE:return this.concatBufferDynamic();default:throw new Error("invalid inflate mode")}},Zlib.RawInflate.MaxBackwardLength=32768,Zlib.RawInflate.MaxCopyLength=258,Zlib.RawInflate.Order=function(table){return USE_TYPEDARRAY?new Uint16Array(table):table}([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Zlib.RawInflate.LengthCodeTable=function(table){return USE_TYPEDARRAY?new Uint16Array(table):table}([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258]),Zlib.RawInflate.LengthExtraTable=function(table){return USE_TYPEDARRAY?new Uint8Array(table):table}([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0]),Zlib.RawInflate.DistCodeTable=function(table){return USE_TYPEDARRAY?new Uint16Array(table):table}([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577]),Zlib.RawInflate.DistExtraTable=function(table){return USE_TYPEDARRAY?new Uint8Array(table):table}([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Zlib.RawInflate.FixedLiteralLengthTable=function(table){return table}(function(){var i,il,lengths=new(USE_TYPEDARRAY?Uint8Array:Array)(288);for(i=0,il=lengths.length;i<il;++i)lengths[i]=i<=143?8:i<=255?9:i<=279?7:8;return buildHuffmanTable(lengths)}()),Zlib.RawInflate.FixedDistanceTable=function(table){return table}(function(){var i,il,lengths=new(USE_TYPEDARRAY?Uint8Array:Array)(30);for(i=0,il=lengths.length;i<il;++i)lengths[i]=5;return buildHuffmanTable(lengths)}()),Zlib.RawInflate.prototype.parseBlock=function(){var hdr=this.readBits(3);switch(1&hdr&&(this.bfinal=!0),hdr>>>=1){case 0:this.parseUncompressedBlock();break;case 1:this.parseFixedHuffmanBlock();break;case 2:this.parseDynamicHuffmanBlock();break;default:throw new Error("unknown BTYPE: "+hdr)}},Zlib.RawInflate.prototype.readBits=function(length){var octet,bitsbuf=this.bitsbuf,bitsbuflen=this.bitsbuflen,input=this.input,ip=this.ip;if(ip+(length-bitsbuflen+7>>3)>=input.length)throw new Error("input buffer is broken");for(;bitsbuflen<length;)bitsbuf|=input[ip++]<<bitsbuflen,bitsbuflen+=8;return octet=bitsbuf&(1<<length)-1,bitsbuf>>>=length,bitsbuflen-=length,this.bitsbuf=bitsbuf,this.bitsbuflen=bitsbuflen,this.ip=ip,octet},Zlib.RawInflate.prototype.readCodeByTable=function(table){for(var codeWithLength,codeLength,bitsbuf=this.bitsbuf,bitsbuflen=this.bitsbuflen,input=this.input,ip=this.ip,inputLength=input.length,codeTable=table[0],maxCodeLength=table[1];bitsbuflen<maxCodeLength&&!(ip>=inputLength);)bitsbuf|=input[ip++]<<bitsbuflen,bitsbuflen+=8;if(codeWithLength=codeTable[bitsbuf&(1<<maxCodeLength)-1],(codeLength=codeWithLength>>>16)>bitsbuflen)throw new Error("invalid code length: "+codeLength);return this.bitsbuf=bitsbuf>>codeLength,this.bitsbuflen=bitsbuflen-codeLength,this.ip=ip,65535&codeWithLength},Zlib.RawInflate.prototype.parseUncompressedBlock=function(){var len,nlen,preCopy,input=this.input,ip=this.ip,output=this.output,op=this.op,inputLength=input.length,olength=output.length;if(this.bitsbuf=0,this.bitsbuflen=0,ip+1>=inputLength)throw new Error("invalid uncompressed block header: LEN");if(len=input[ip++]|input[ip++]<<8,ip+1>=inputLength)throw new Error("invalid uncompressed block header: NLEN");if(nlen=input[ip++]|input[ip++]<<8,len===~nlen)throw new Error("invalid uncompressed block header: length verify");if(ip+len>input.length)throw new Error("input buffer is broken");switch(this.bufferType){case Zlib.RawInflate.BufferType.BLOCK:for(;op+len>output.length;){if(preCopy=olength-op,len-=preCopy,USE_TYPEDARRAY)output.set(input.subarray(ip,ip+preCopy),op),op+=preCopy,ip+=preCopy;else for(;preCopy--;)output[op++]=input[ip++];this.op=op,output=this.expandBufferBlock(),op=this.op}break;case Zlib.RawInflate.BufferType.ADAPTIVE:for(;op+len>output.length;)output=this.expandBufferAdaptive({fixRatio:2});break;default:throw new Error("invalid inflate mode")}if(USE_TYPEDARRAY)output.set(input.subarray(ip,ip+len),op),op+=len,ip+=len;else for(;len--;)output[op++]=input[ip++];this.ip=ip,this.op=op,this.output=output},Zlib.RawInflate.prototype.parseFixedHuffmanBlock=function(){switch(this.bufferType){case Zlib.RawInflate.BufferType.ADAPTIVE:this.decodeHuffmanAdaptive(Zlib.RawInflate.FixedLiteralLengthTable,Zlib.RawInflate.FixedDistanceTable);break;case Zlib.RawInflate.BufferType.BLOCK:this.decodeHuffmanBlock(Zlib.RawInflate.FixedLiteralLengthTable,Zlib.RawInflate.FixedDistanceTable);break;default:throw new Error("invalid inflate mode")}},Zlib.RawInflate.prototype.parseDynamicHuffmanBlock=function(){var codeLengthsTable,litlenTable,distTable,lengthTable,code,prev,repeat,i,il,hlit=this.readBits(5)+257,hdist=this.readBits(5)+1,hclen=this.readBits(4)+4,codeLengths=new(USE_TYPEDARRAY?Uint8Array:Array)(Zlib.RawInflate.Order.length);for(i=0;i<hclen;++i)codeLengths[Zlib.RawInflate.Order[i]]=this.readBits(3);if(!USE_TYPEDARRAY)for(i=hclen,hclen=codeLengths.length;i<hclen;++i)codeLengths[Zlib.RawInflate.Order[i]]=0;for(codeLengthsTable=buildHuffmanTable(codeLengths),lengthTable=new(USE_TYPEDARRAY?Uint8Array:Array)(hlit+hdist),i=0,il=hlit+hdist;i<il;)switch(code=this.readCodeByTable(codeLengthsTable)){case 16:for(repeat=3+this.readBits(2);repeat--;)lengthTable[i++]=prev;break;case 17:for(repeat=3+this.readBits(3);repeat--;)lengthTable[i++]=0;prev=0;break;case 18:for(repeat=11+this.readBits(7);repeat--;)lengthTable[i++]=0;prev=0;break;default:lengthTable[i++]=code,prev=code}switch(litlenTable=buildHuffmanTable(USE_TYPEDARRAY?lengthTable.subarray(0,hlit):lengthTable.slice(0,hlit)),distTable=buildHuffmanTable(USE_TYPEDARRAY?lengthTable.subarray(hlit):lengthTable.slice(hlit)),this.bufferType){case Zlib.RawInflate.BufferType.ADAPTIVE:this.decodeHuffmanAdaptive(litlenTable,distTable);break;case Zlib.RawInflate.BufferType.BLOCK:this.decodeHuffmanBlock(litlenTable,distTable);break;default:throw new Error("invalid inflate mode")}},Zlib.RawInflate.prototype.decodeHuffmanBlock=function(litlen,dist){var output=this.output,op=this.op;this.currentLitlenTable=litlen;for(var code,ti,codeDist,codeLength,olength=output.length-Zlib.RawInflate.MaxCopyLength,lengthCodeTable=Zlib.RawInflate.LengthCodeTable,lengthExtraTable=Zlib.RawInflate.LengthExtraTable,distCodeTable=Zlib.RawInflate.DistCodeTable,distExtraTable=Zlib.RawInflate.DistExtraTable;256!==(code=this.readCodeByTable(litlen));)if(code<256)op>=olength&&(this.op=op,output=this.expandBufferBlock(),op=this.op),output[op++]=code;else for(ti=code-257,codeLength=lengthCodeTable[ti],lengthExtraTable[ti]>0&&(codeLength+=this.readBits(lengthExtraTable[ti])),code=this.readCodeByTable(dist),codeDist=distCodeTable[code],distExtraTable[code]>0&&(codeDist+=this.readBits(distExtraTable[code])),op>=olength&&(this.op=op,output=this.expandBufferBlock(),op=this.op);codeLength--;)output[op]=output[op++-codeDist];for(;this.bitsbuflen>=8;)this.bitsbuflen-=8,this.ip--;this.op=op},Zlib.RawInflate.prototype.decodeHuffmanAdaptive=function(litlen,dist){var output=this.output,op=this.op;this.currentLitlenTable=litlen;for(var code,ti,codeDist,codeLength,olength=output.length,lengthCodeTable=Zlib.RawInflate.LengthCodeTable,lengthExtraTable=Zlib.RawInflate.LengthExtraTable,distCodeTable=Zlib.RawInflate.DistCodeTable,distExtraTable=Zlib.RawInflate.DistExtraTable;256!==(code=this.readCodeByTable(litlen));)if(code<256)op>=olength&&(output=this.expandBufferAdaptive(),olength=output.length),output[op++]=code;else for(ti=code-257,codeLength=lengthCodeTable[ti],lengthExtraTable[ti]>0&&(codeLength+=this.readBits(lengthExtraTable[ti])),code=this.readCodeByTable(dist),codeDist=distCodeTable[code],distExtraTable[code]>0&&(codeDist+=this.readBits(distExtraTable[code])),op+codeLength>olength&&(output=this.expandBufferAdaptive(),olength=output.length);codeLength--;)output[op]=output[op++-codeDist];for(;this.bitsbuflen>=8;)this.bitsbuflen-=8,this.ip--;this.op=op},Zlib.RawInflate.prototype.expandBufferBlock=function(opt_param){var i,il,buffer=new(USE_TYPEDARRAY?Uint8Array:Array)(this.op-Zlib.RawInflate.MaxBackwardLength),backward=this.op-Zlib.RawInflate.MaxBackwardLength,output=this.output;if(USE_TYPEDARRAY)buffer.set(output.subarray(Zlib.RawInflate.MaxBackwardLength,buffer.length));else for(i=0,il=buffer.length;i<il;++i)buffer[i]=output[i+Zlib.RawInflate.MaxBackwardLength];if(this.blocks.push(buffer),this.totalpos+=buffer.length,USE_TYPEDARRAY)output.set(output.subarray(backward,backward+Zlib.RawInflate.MaxBackwardLength));else for(i=0;i<Zlib.RawInflate.MaxBackwardLength;++i)output[i]=output[backward+i];return this.op=Zlib.RawInflate.MaxBackwardLength,output},Zlib.RawInflate.prototype.expandBufferAdaptive=function(opt_param){var buffer,maxHuffCode,newSize,maxInflateSize,ratio=this.input.length/this.ip+1|0,input=this.input,output=this.output;return opt_param&&("number"==typeof opt_param.fixRatio&&(ratio=opt_param.fixRatio),"number"==typeof opt_param.addRatio&&(ratio+=opt_param.addRatio)),ratio<2?(maxHuffCode=(input.length-this.ip)/this.currentLitlenTable[2],maxInflateSize=maxHuffCode/2*258|0,newSize=maxInflateSize<output.length?output.length+maxInflateSize:output.length<<1):newSize=output.length*ratio,USE_TYPEDARRAY?(buffer=new Uint8Array(newSize),buffer.set(output)):buffer=output,this.output=buffer,this.output},Zlib.RawInflate.prototype.concatBufferBlock=function(){var block,i,il,j,jl,pos=0,limit=this.totalpos+(this.op-Zlib.RawInflate.MaxBackwardLength),output=this.output,blocks=this.blocks,buffer=new(USE_TYPEDARRAY?Uint8Array:Array)(limit);if(0===blocks.length)return USE_TYPEDARRAY?this.output.subarray(Zlib.RawInflate.MaxBackwardLength,this.op):this.output.slice(Zlib.RawInflate.MaxBackwardLength,this.op);for(i=0,il=blocks.length;i<il;++i)for(block=blocks[i],j=0,jl=block.length;j<jl;++j)buffer[pos++]=block[j];for(i=Zlib.RawInflate.MaxBackwardLength,il=this.op;i<il;++i)buffer[pos++]=output[i];return this.blocks=[],this.buffer=buffer,this.buffer},Zlib.RawInflate.prototype.concatBufferDynamic=function(){var buffer,op=this.op;return USE_TYPEDARRAY?this.resize?(buffer=new Uint8Array(op),buffer.set(this.output.subarray(0,op))):buffer=this.output.subarray(0,op):(this.output.length>op&&(this.output.length=op),buffer=this.output),this.buffer=buffer,this.buffer};var buildHuffmanTable=Zlib.Huffman.buildHuffmanTable;Zlib.RawInflateStream=function(input,ip,opt_buffersize){this.blocks=[],this.bufferSize=opt_buffersize||ZLIB_STREAM_RAW_INFLATE_BUFFER_SIZE,this.totalpos=0,this.ip=void 0===ip?0:ip,this.bitsbuf=0,this.bitsbuflen=0,this.input=USE_TYPEDARRAY?new Uint8Array(input):input,this.output=new(USE_TYPEDARRAY?Uint8Array:Array)(this.bufferSize),this.op=0,this.bfinal=!1,this.blockLength,this.resize=!1,this.litlenTable,this.distTable,this.sp=0,this.status=Zlib.RawInflateStream.Status.INITIALIZED,this.ip_,this.bitsbuflen_,this.bitsbuf_},Zlib.RawInflateStream.BlockType={UNCOMPRESSED:0,FIXED:1,DYNAMIC:2},Zlib.RawInflateStream.Status={INITIALIZED:0,BLOCK_HEADER_START:1,BLOCK_HEADER_END:2,BLOCK_BODY_START:3,BLOCK_BODY_END:4,DECODE_BLOCK_START:5,DECODE_BLOCK_END:6},Zlib.RawInflateStream.prototype.decompress=function(newInput,ip){var stop=!1;for(void 0!==newInput&&(this.input=newInput),void 0!==ip&&(this.ip=ip);!stop;)switch(this.status){case Zlib.RawInflateStream.Status.INITIALIZED:case Zlib.RawInflateStream.Status.BLOCK_HEADER_START:this.readBlockHeader()<0&&(stop=!0);break;case Zlib.RawInflateStream.Status.BLOCK_HEADER_END:case Zlib.RawInflateStream.Status.BLOCK_BODY_START:switch(this.currentBlockType){case Zlib.RawInflateStream.BlockType.UNCOMPRESSED:this.readUncompressedBlockHeader()<0&&(stop=!0);break;case Zlib.RawInflateStream.BlockType.FIXED:this.parseFixedHuffmanBlock()<0&&(stop=!0);break;case Zlib.RawInflateStream.BlockType.DYNAMIC:this.parseDynamicHuffmanBlock()<0&&(stop=!0)}break;case Zlib.RawInflateStream.Status.BLOCK_BODY_END:case Zlib.RawInflateStream.Status.DECODE_BLOCK_START:switch(this.currentBlockType){case Zlib.RawInflateStream.BlockType.UNCOMPRESSED:this.parseUncompressedBlock()<0&&(stop=!0);break;case Zlib.RawInflateStream.BlockType.FIXED:case Zlib.RawInflateStream.BlockType.DYNAMIC:this.decodeHuffman()<0&&(stop=!0)}break;case Zlib.RawInflateStream.Status.DECODE_BLOCK_END:this.bfinal?stop=!0:this.status=Zlib.RawInflateStream.Status.INITIALIZED}return this.concatBuffer()},Zlib.RawInflateStream.MaxBackwardLength=32768,Zlib.RawInflateStream.MaxCopyLength=258,Zlib.RawInflateStream.Order=function(table){return USE_TYPEDARRAY?new Uint16Array(table):table}([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Zlib.RawInflateStream.LengthCodeTable=function(table){return USE_TYPEDARRAY?new Uint16Array(table):table}([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258]),Zlib.RawInflateStream.LengthExtraTable=function(table){return USE_TYPEDARRAY?new Uint8Array(table):table}([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0]),Zlib.RawInflateStream.DistCodeTable=function(table){return USE_TYPEDARRAY?new Uint16Array(table):table}([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577]),Zlib.RawInflateStream.DistExtraTable=function(table){return USE_TYPEDARRAY?new Uint8Array(table):table}([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Zlib.RawInflateStream.FixedLiteralLengthTable=function(table){return table}(function(){var i,il,lengths=new(USE_TYPEDARRAY?Uint8Array:Array)(288);for(i=0,il=lengths.length;i<il;++i)lengths[i]=i<=143?8:i<=255?9:i<=279?7:8;return buildHuffmanTable(lengths)}()),Zlib.RawInflateStream.FixedDistanceTable=function(table){return table}(function(){var i,il,lengths=new(USE_TYPEDARRAY?Uint8Array:Array)(30);for(i=0,il=lengths.length;i<il;++i)lengths[i]=5;return buildHuffmanTable(lengths)}()),Zlib.RawInflateStream.prototype.readBlockHeader=function(){var hdr;if(this.status=Zlib.RawInflateStream.Status.BLOCK_HEADER_START,this.save_(),(hdr=this.readBits(3))<0)return this.restore_(),-1;switch(1&hdr&&(this.bfinal=!0),hdr>>>=1){case 0:this.currentBlockType=Zlib.RawInflateStream.BlockType.UNCOMPRESSED;break;case 1:this.currentBlockType=Zlib.RawInflateStream.BlockType.FIXED;break;case 2:this.currentBlockType=Zlib.RawInflateStream.BlockType.DYNAMIC;break;default:throw new Error("unknown BTYPE: "+hdr)}this.status=Zlib.RawInflateStream.Status.BLOCK_HEADER_END},Zlib.RawInflateStream.prototype.readBits=function(length){for(var octet,bitsbuf=this.bitsbuf,bitsbuflen=this.bitsbuflen,input=this.input,ip=this.ip;bitsbuflen<length;){if(input.length<=ip)return-1;octet=input[ip++],bitsbuf|=octet<<bitsbuflen,bitsbuflen+=8}return octet=bitsbuf&(1<<length)-1,bitsbuf>>>=length,bitsbuflen-=length,this.bitsbuf=bitsbuf,this.bitsbuflen=bitsbuflen,this.ip=ip,octet},Zlib.RawInflateStream.prototype.readCodeByTable=function(table){for(var octet,codeWithLength,codeLength,bitsbuf=this.bitsbuf,bitsbuflen=this.bitsbuflen,input=this.input,ip=this.ip,codeTable=table[0],maxCodeLength=table[1];bitsbuflen<maxCodeLength;){if(input.length<=ip)return-1;octet=input[ip++],bitsbuf|=octet<<bitsbuflen,bitsbuflen+=8}if(codeWithLength=codeTable[bitsbuf&(1<<maxCodeLength)-1],(codeLength=codeWithLength>>>16)>bitsbuflen)throw new Error("invalid code length: "+codeLength);return this.bitsbuf=bitsbuf>>codeLength,this.bitsbuflen=bitsbuflen-codeLength,this.ip=ip,65535&codeWithLength},Zlib.RawInflateStream.prototype.readUncompressedBlockHeader=function(){var len,nlen,input=this.input,ip=this.ip;if(this.status=Zlib.RawInflateStream.Status.BLOCK_BODY_START,ip+4>=input.length)return-1;if(len=input[ip++]|input[ip++]<<8,nlen=input[ip++]|input[ip++]<<8,len===~nlen)throw new Error("invalid uncompressed block header: length verify");this.bitsbuf=0,this.bitsbuflen=0,this.ip=ip,this.blockLength=len,this.status=Zlib.RawInflateStream.Status.BLOCK_BODY_END},Zlib.RawInflateStream.prototype.parseUncompressedBlock=function(){var input=this.input,ip=this.ip,output=this.output,op=this.op,len=this.blockLength;for(this.status=Zlib.RawInflateStream.Status.DECODE_BLOCK_START;len--;){if(op===output.length&&(output=this.expandBuffer({fixRatio:2})),ip>=input.length)return this.ip=ip,this.op=op,this.blockLength=len+1,-1;output[op++]=input[ip++]}return len<0&&(this.status=Zlib.RawInflateStream.Status.DECODE_BLOCK_END),this.ip=ip,this.op=op,0},Zlib.RawInflateStream.prototype.parseFixedHuffmanBlock=function(){return this.status=Zlib.RawInflateStream.Status.BLOCK_BODY_START,this.litlenTable=Zlib.RawInflateStream.FixedLiteralLengthTable,this.distTable=Zlib.RawInflateStream.FixedDistanceTable,this.status=Zlib.RawInflateStream.Status.BLOCK_BODY_END,0},Zlib.RawInflateStream.prototype.save_=function(){this.ip_=this.ip,this.bitsbuflen_=this.bitsbuflen,this.bitsbuf_=this.bitsbuf},Zlib.RawInflateStream.prototype.restore_=function(){this.ip=this.ip_,this.bitsbuflen=this.bitsbuflen_,this.bitsbuf=this.bitsbuf_},Zlib.RawInflateStream.prototype.parseDynamicHuffmanBlock=function(){function parseDynamicHuffmanBlockImpl(){var bits,code,repeat,lengthTable,i,il,prev=0;for(i=0;i<hclen;++i){if((bits=this.readBits(3))<0)throw new Error("not enough input");codeLengths[Zlib.RawInflateStream.Order[i]]=bits}for(codeLengthsTable=buildHuffmanTable(codeLengths),lengthTable=new(USE_TYPEDARRAY?Uint8Array:Array)(hlit+hdist),i=0,il=hlit+hdist;i<il;){if((code=this.readCodeByTable(codeLengthsTable))<0)throw new Error("not enough input");switch(code){case 16:if((bits=this.readBits(2))<0)throw new Error("not enough input");for(repeat=3+bits;repeat--;)lengthTable[i++]=prev;break;case 17:if((bits=this.readBits(3))<0)throw new Error("not enough input");for(repeat=3+bits;repeat--;)lengthTable[i++]=0;prev=0;break;case 18:if((bits=this.readBits(7))<0)throw new Error("not enough input");for(repeat=11+bits;repeat--;)lengthTable[i++]=0;prev=0;break;default:lengthTable[i++]=code,prev=code}}litlenLengths=new(USE_TYPEDARRAY?Uint8Array:Array)(hlit),distLengths=new(USE_TYPEDARRAY?Uint8Array:Array)(hdist),this.litlenTable=buildHuffmanTable(USE_TYPEDARRAY?lengthTable.subarray(0,hlit):lengthTable.slice(0,hlit)),this.distTable=buildHuffmanTable(USE_TYPEDARRAY?lengthTable.subarray(hlit):lengthTable.slice(hlit))}var hlit,hdist,hclen,codeLengthsTable,litlenLengths,distLengths,codeLengths=new(USE_TYPEDARRAY?Uint8Array:Array)(Zlib.RawInflateStream.Order.length);if(this.status=Zlib.RawInflateStream.Status.BLOCK_BODY_START,this.save_(),hlit=this.readBits(5)+257,hdist=this.readBits(5)+1,hclen=this.readBits(4)+4,hlit<0||hdist<0||hclen<0)return this.restore_(),-1;try{parseDynamicHuffmanBlockImpl.call(this)}catch(e){return this.restore_(),-1}return this.status=Zlib.RawInflateStream.Status.BLOCK_BODY_END,0},Zlib.RawInflateStream.prototype.decodeHuffman=function(){var code,ti,codeDist,codeLength,bits,output=this.output,op=this.op,litlen=this.litlenTable,dist=this.distTable,olength=output.length;for(this.status=Zlib.RawInflateStream.Status.DECODE_BLOCK_START;;){if(this.save_(),(code=this.readCodeByTable(litlen))<0)return this.op=op,this.restore_(),-1;if(256===code)break;if(code<256)op===olength&&(output=this.expandBuffer(),olength=output.length),output[op++]=code;else{if(ti=code-257,codeLength=Zlib.RawInflateStream.LengthCodeTable[ti],Zlib.RawInflateStream.LengthExtraTable[ti]>0){if((bits=this.readBits(Zlib.RawInflateStream.LengthExtraTable[ti]))<0)return this.op=op,this.restore_(),-1;codeLength+=bits}if((code=this.readCodeByTable(dist))<0)return this.op=op,this.restore_(),-1;if(codeDist=Zlib.RawInflateStream.DistCodeTable[code],Zlib.RawInflateStream.DistExtraTable[code]>0){if((bits=this.readBits(Zlib.RawInflateStream.DistExtraTable[code]))<0)return this.op=op,this.restore_(),-1;codeDist+=bits}for(op+codeLength>=olength&&(output=this.expandBuffer(),olength=output.length);codeLength--;)output[op]=output[op++-codeDist];if(this.ip===this.input.length)return this.op=op,-1}}for(;this.bitsbuflen>=8;)this.bitsbuflen-=8,this.ip--;this.op=op,this.status=Zlib.RawInflateStream.Status.DECODE_BLOCK_END},Zlib.RawInflateStream.prototype.expandBuffer=function(opt_param){var buffer,maxHuffCode,newSize,maxInflateSize,ratio=this.input.length/this.ip+1|0,input=this.input,output=this.output;return opt_param&&("number"==typeof opt_param.fixRatio&&(ratio=opt_param.fixRatio),"number"==typeof opt_param.addRatio&&(ratio+=opt_param.addRatio)),ratio<2?(maxHuffCode=(input.length-this.ip)/this.litlenTable[2],maxInflateSize=maxHuffCode/2*258|0,newSize=maxInflateSize<output.length?output.length+maxInflateSize:output.length<<1):newSize=output.length*ratio,USE_TYPEDARRAY?(buffer=new Uint8Array(newSize),buffer.set(output)):buffer=output,this.output=buffer,this.output},Zlib.RawInflateStream.prototype.concatBuffer=function(){var buffer,tmp,op=this.op;return buffer=this.resize?USE_TYPEDARRAY?new Uint8Array(this.output.subarray(this.sp,op)):this.output.slice(this.sp,op):USE_TYPEDARRAY?this.output.subarray(this.sp,op):this.output.slice(this.sp,op),this.sp=op,op>Zlib.RawInflateStream.MaxBackwardLength+this.bufferSize&&(this.op=this.sp=Zlib.RawInflateStream.MaxBackwardLength,USE_TYPEDARRAY?(tmp=this.output,this.output=new Uint8Array(this.bufferSize+Zlib.RawInflateStream.MaxBackwardLength),this.output.set(tmp.subarray(op-Zlib.RawInflateStream.MaxBackwardLength,op))):this.output=this.output.slice(op-Zlib.RawInflateStream.MaxBackwardLength)),buffer},Zlib.Inflate=function(input,opt_params){var cmf,flg;switch(this.input=input,this.ip=0,this.rawinflate,this.verify,!opt_params&&(opt_params={})||(opt_params.index&&(this.ip=opt_params.index),opt_params.verify&&(this.verify=opt_params.verify)),cmf=input[this.ip++],flg=input[this.ip++],15&cmf){case Zlib.CompressionMethod.DEFLATE:this.method=Zlib.CompressionMethod.DEFLATE;break;default:throw new Error("unsupported compression method")}if(((cmf<<8)+flg)%31!=0)throw new Error("invalid fcheck flag:"+((cmf<<8)+flg)%31);if(32&flg)throw new Error("fdict flag is not supported");this.rawinflate=new Zlib.RawInflate(input,{index:this.ip,bufferSize:opt_params.bufferSize,bufferType:opt_params.bufferType,resize:opt_params.resize})},Zlib.Inflate.BufferType=Zlib.RawInflate.BufferType,Zlib.Inflate.prototype.decompress=function(){var buffer,input=this.input;if(buffer=this.rawinflate.decompress(),this.ip=this.rawinflate.ip,this.verify&&(input[this.ip++]<<24|input[this.ip++]<<16|input[this.ip++]<<8|input[this.ip++])>>>0!==Zlib.Adler32(buffer))throw new Error("invalid adler-32 checksum");return buffer},Zlib.InflateStream=function(input){this.input=void 0===input?new(USE_TYPEDARRAY?Uint8Array:Array):input,this.ip=0,this.rawinflate=new Zlib.RawInflateStream(this.input,this.ip),this.method,this.output=this.rawinflate.output},Zlib.InflateStream.prototype.decompress=function(input){var buffer;if(void 0!==input)if(USE_TYPEDARRAY){var tmp=new Uint8Array(this.input.length+input.length);tmp.set(this.input,0),tmp.set(input,this.input.length),this.input=tmp}else this.input=this.input.concat(input);return void 0===this.method&&this.readHeader()<0?new(USE_TYPEDARRAY?Uint8Array:Array):(buffer=this.rawinflate.decompress(this.input,this.ip),0!==this.rawinflate.ip&&(this.input=USE_TYPEDARRAY?this.input.subarray(this.rawinflate.ip):this.input.slice(this.rawinflate.ip),this.ip=0),buffer)},Zlib.InflateStream.prototype.readHeader=function(){var ip=this.ip,input=this.input,cmf=input[ip++],flg=input[ip++];if(void 0===cmf||void 0===flg)return-1;switch(15&cmf){case Zlib.CompressionMethod.DEFLATE:this.method=Zlib.CompressionMethod.DEFLATE;break;default:throw new Error("unsupported compression method")}if(((cmf<<8)+flg)%31!=0)throw new Error("invalid fcheck flag:"+((cmf<<8)+flg)%31);if(32&flg)throw new Error("fdict flag is not supported");this.ip=ip},Zlib.Gunzip=function(input,opt_params){this.input=input,this.ip=0,this.member=[],this.decompressed=!1},Zlib.Gunzip.prototype.getMembers=function(){return this.decompressed||this.decompress(),this.member.slice()},Zlib.Gunzip.prototype.decompress=function(){for(var il=this.input.length;this.ip<il;)this.decodeMember();return this.decompressed=!0,this.concatMember()},Zlib.Gunzip.prototype.decodeMember=function(){var isize,rawinflate,inflated,inflen,c,ci,str,mtime,crc32,member=new Zlib.GunzipMember,input=this.input,ip=this.ip;if(member.id1=input[ip++],member.id2=input[ip++],31!==member.id1||139!==member.id2)throw new Error("invalid file signature:"+member.id1+","+member.id2);switch(member.cm=input[ip++],member.cm){case 8:break;default:throw new Error("unknown compression method: "+member.cm)}if(member.flg=input[ip++],mtime=input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24,member.mtime=new Date(1e3*mtime),member.xfl=input[ip++],member.os=input[ip++],(member.flg&Zlib.Gzip.FlagsMask.FEXTRA)>0&&(member.xlen=input[ip++]|input[ip++]<<8,ip=this.decodeSubField(ip,member.xlen)),(member.flg&Zlib.Gzip.FlagsMask.FNAME)>0){for(str=[],ci=0;(c=input[ip++])>0;)str[ci++]=String.fromCharCode(c);member.name=str.join("")}if((member.flg&Zlib.Gzip.FlagsMask.FCOMMENT)>0){for(str=[],ci=0;(c=input[ip++])>0;)str[ci++]=String.fromCharCode(c);member.comment=str.join("")}if((member.flg&Zlib.Gzip.FlagsMask.FHCRC)>0&&(member.crc16=65535&Zlib.CRC32.calc(input,0,ip),member.crc16!==(input[ip++]|input[ip++]<<8)))throw new Error("invalid header crc16");if(isize=input[input.length-4]|input[input.length-3]<<8|input[input.length-2]<<16|input[input.length-1]<<24,input.length-ip-4-4<512*isize&&(inflen=isize),rawinflate=new Zlib.RawInflate(input,{index:ip,bufferSize:inflen}),member.data=inflated=rawinflate.decompress(),ip=rawinflate.ip,member.crc32=crc32=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,Zlib.CRC32.calc(inflated)!==crc32)throw new Error("invalid CRC-32 checksum: 0x"+Zlib.CRC32.calc(inflated).toString(16)+" / 0x"+crc32.toString(16));if(member.isize=isize=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,(4294967295&inflated.length)!==isize)throw new Error("invalid input size: "+(4294967295&inflated.length)+" / "+isize);this.member.push(member),this.ip=ip},Zlib.Gunzip.prototype.decodeSubField=function(ip,length){return ip+length},Zlib.Gunzip.prototype.concatMember=function(){var i,il,buffer,member=this.member,p=0,size=0;for(i=0,il=member.length;i<il;++i)size+=member[i].data.length;if(USE_TYPEDARRAY)for(buffer=new Uint8Array(size),i=0;i<il;++i)buffer.set(member[i].data,p),p+=member[i].data.length;else{for(buffer=[],i=0;i<il;++i)buffer[i]=member[i].data;buffer=Array.prototype.concat.apply([],buffer)}return buffer},Zlib.GunzipMember=function(){this.id1,this.id2,this.cm,this.flg,this.mtime,this.xfl,this.os,this.crc16,this.xlen,this.crc32,this.isize,this.name,this.comment,this.data},Zlib.GunzipMember.prototype.getName=function(){return this.name},Zlib.GunzipMember.prototype.getData=function(){return this.data},Zlib.GunzipMember.prototype.getMtime=function(){return this.mtime},Zlib.Gzip=function(input,opt_params){this.input=input,this.ip=0,this.output,this.op=0,this.flags={},this.filename,this.comment,this.deflateOptions,opt_params&&(opt_params.flags&&(this.flags=opt_params.flags),"string"==typeof opt_params.filename&&(this.filename=opt_params.filename),"string"==typeof opt_params.comment&&(this.comment=opt_params.comment),opt_params.deflateOptions&&(this.deflateOptions=opt_params.deflateOptions)),this.deflateOptions||(this.deflateOptions={})},Zlib.Gzip.DefaultBufferSize=32768,Zlib.Gzip.prototype.compress=function(){var flg,mtime,crc16,crc32,rawdeflate,c,i,il,output=new(USE_TYPEDARRAY?Uint8Array:Array)(Zlib.Gzip.DefaultBufferSize),op=0,input=this.input,ip=this.ip,filename=this.filename,comment=this.comment;if(output[op++]=31,output[op++]=139,output[op++]=8,flg=0,this.flags.fname&&(flg|=Zlib.Gzip.FlagsMask.FNAME),this.flags.fcomment&&(flg|=Zlib.Gzip.FlagsMask.FCOMMENT),this.flags.fhcrc&&(flg|=Zlib.Gzip.FlagsMask.FHCRC),output[op++]=flg,mtime=(Date.now?Date.now():+new Date)/1e3|0,output[op++]=255&mtime,output[op++]=mtime>>>8&255,output[op++]=mtime>>>16&255,output[op++]=mtime>>>24&255,output[op++]=0,output[op++]=Zlib.Gzip.OperatingSystem.UNKNOWN,void 0!==this.flags.fname){for(i=0,il=filename.length;i<il;++i)c=filename.charCodeAt(i),c>255&&(output[op++]=c>>>8&255),output[op++]=255&c;output[op++]=0}if(this.flags.comment){for(i=0,il=comment.length;i<il;++i)c=comment.charCodeAt(i),c>255&&(output[op++]=c>>>8&255),output[op++]=255&c;output[op++]=0}return this.flags.fhcrc&&(crc16=65535&Zlib.CRC32.calc(output,0,op),output[op++]=255&crc16,output[op++]=crc16>>>8&255),this.deflateOptions.outputBuffer=output,this.deflateOptions.outputIndex=op,rawdeflate=new Zlib.RawDeflate(input,this.deflateOptions),output=rawdeflate.compress(),op=rawdeflate.op,USE_TYPEDARRAY&&(op+8>output.buffer.byteLength?(this.output=new Uint8Array(op+8),this.output.set(new Uint8Array(output.buffer)),output=this.output):output=new Uint8Array(output.buffer)),crc32=Zlib.CRC32.calc(input),output[op++]=255&crc32,output[op++]=crc32>>>8&255,output[op++]=crc32>>>16&255,output[op++]=crc32>>>24&255,il=input.length,output[op++]=255&il,output[op++]=il>>>8&255,output[op++]=il>>>16&255,output[op++]=il>>>24&255,this.ip=ip,USE_TYPEDARRAY&&op<output.length&&(this.output=output=output.subarray(0,op)),output},Zlib.Gzip.OperatingSystem={FAT:0,AMIGA:1,VMS:2,UNIX:3,VM_CMS:4,ATARI_TOS:5,HPFS:6,MACINTOSH:7,Z_SYSTEM:8,CP_M:9,TOPS_20:10,NTFS:11,QDOS:12,ACORN_RISCOS:13,UNKNOWN:255},Zlib.Gzip.FlagsMask={FTEXT:1,FHCRC:2,FEXTRA:4,FNAME:8,FCOMMENT:16},Zlib.Heap=function(length){this.buffer=new(USE_TYPEDARRAY?Uint16Array:Array)(2*length),this.length=0},Zlib.Heap.prototype.getParent=function(index){return 2*((index-2)/4|0)},Zlib.Heap.prototype.getChild=function(index){return 2*index+2},Zlib.Heap.prototype.push=function(index,value){var current,parent,swap,heap=this.buffer;for(current=this.length,heap[this.length++]=value,heap[this.length++]=index;current>0&&(parent=this.getParent(current),heap[current]>heap[parent]);)swap=heap[current],heap[current]=heap[parent],heap[parent]=swap,swap=heap[current+1],heap[current+1]=heap[parent+1],heap[parent+1]=swap,current=parent;return this.length},Zlib.Heap.prototype.pop=function(){var index,value,swap,current,parent,heap=this.buffer;for(value=heap[0],index=heap[1],this.length-=2,heap[0]=heap[this.length],heap[1]=heap[this.length+1],parent=0;;){if((current=this.getChild(parent))>=this.length)break;if(current+2<this.length&&heap[current+2]>heap[current]&&(current+=2),!(heap[current]>heap[parent]))break;swap=heap[parent],heap[parent]=heap[current],heap[current]=swap,swap=heap[parent+1],heap[parent+1]=heap[current+1],heap[current+1]=swap,parent=current}return{index:index,value:value,length:this.length}},Zlib.RawDeflate=function(input,opt_params){this.compressionType=Zlib.RawDeflate.CompressionType.DYNAMIC,this.lazy=0,this.freqsLitLen,this.freqsDist,this.input=USE_TYPEDARRAY&&input instanceof Array?new Uint8Array(input):input,this.output,this.op=0,opt_params&&(opt_params.lazy&&(this.lazy=opt_params.lazy),"number"==typeof opt_params.compressionType&&(this.compressionType=opt_params.compressionType),opt_params.outputBuffer&&(this.output=USE_TYPEDARRAY&&opt_params.outputBuffer instanceof Array?new Uint8Array(opt_params.outputBuffer):opt_params.outputBuffer),"number"==typeof opt_params.outputIndex&&(this.op=opt_params.outputIndex)),this.output||(this.output=new(USE_TYPEDARRAY?Uint8Array:Array)(32768))},Zlib.RawDeflate.CompressionType={NONE:0,FIXED:1,DYNAMIC:2,RESERVED:3},Zlib.RawDeflate.Lz77MinLength=3,Zlib.RawDeflate.Lz77MaxLength=258,Zlib.RawDeflate.WindowSize=32768,Zlib.RawDeflate.MaxCodeLength=16,Zlib.RawDeflate.HUFMAX=286,Zlib.RawDeflate.FixedHuffmanTable=function(){var i,table=[];for(i=0;i<288;i++)switch(!0){case i<=143:table.push([i+48,8]);break;case i<=255:table.push([i-144+400,9]);break;case i<=279:table.push([i-256+0,7]);break;case i<=287:table.push([i-280+192,8]);break;default:throw"invalid literal: "+i}return table}(),Zlib.RawDeflate.prototype.compress=function(){var blockArray,position,length,input=this.input;switch(this.compressionType){case Zlib.RawDeflate.CompressionType.NONE:for(position=0,length=input.length;position<length;)blockArray=USE_TYPEDARRAY?input.subarray(position,position+65535):input.slice(position,position+65535),position+=blockArray.length,this.makeNocompressBlock(blockArray,position===length);break;case Zlib.RawDeflate.CompressionType.FIXED:this.output=this.makeFixedHuffmanBlock(input,!0),this.op=this.output.length;break;case Zlib.RawDeflate.CompressionType.DYNAMIC:this.output=this.makeDynamicHuffmanBlock(input,!0),this.op=this.output.length;break;default:throw"invalid compression type"}return this.output},Zlib.RawDeflate.prototype.makeNocompressBlock=function(blockArray,isFinalBlock){var bfinal,btype,len,nlen,i,il,output=this.output,op=this.op;if(USE_TYPEDARRAY){for(output=new Uint8Array(this.output.buffer);output.length<=op+blockArray.length+5;)output=new Uint8Array(output.length<<1);output.set(this.output)}if(bfinal=isFinalBlock?1:0,btype=Zlib.RawDeflate.CompressionType.NONE,output[op++]=bfinal|btype<<1,len=blockArray.length,nlen=65536+~len&65535,output[op++]=255&len,output[op++]=len>>>8&255,output[op++]=255&nlen,output[op++]=nlen>>>8&255,USE_TYPEDARRAY)output.set(blockArray,op),op+=blockArray.length,output=output.subarray(0,op);else{for(i=0,il=blockArray.length;i<il;++i)output[op++]=blockArray[i];output.length=op}return this.op=op,this.output=output,output},Zlib.RawDeflate.prototype.makeFixedHuffmanBlock=function(blockArray,isFinalBlock){var bfinal,btype,data,stream=new Zlib.BitStream(USE_TYPEDARRAY?new Uint8Array(this.output.buffer):this.output,this.op);return bfinal=isFinalBlock?1:0,btype=Zlib.RawDeflate.CompressionType.FIXED,stream.writeBits(bfinal,1,!0),stream.writeBits(btype,2,!0),data=this.lz77(blockArray),this.fixedHuffman(data,stream),stream.finish()},Zlib.RawDeflate.prototype.makeDynamicHuffmanBlock=function(blockArray,isFinalBlock){var bfinal,btype,data,hlit,hdist,hclen,litLenLengths,litLenCodes,distLengths,distCodes,treeSymbols,treeLengths,treeCodes,code,bitlen,i,il,stream=new Zlib.BitStream(USE_TYPEDARRAY?new Uint8Array(this.output.buffer):this.output,this.op),hclenOrder=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],transLengths=new Array(19);for(bfinal=isFinalBlock?1:0,btype=Zlib.RawDeflate.CompressionType.DYNAMIC,stream.writeBits(bfinal,1,!0),stream.writeBits(btype,2,!0),data=this.lz77(blockArray),litLenLengths=this.getLengths_(this.freqsLitLen,15),litLenCodes=this.getCodesFromLengths_(litLenLengths),distLengths=this.getLengths_(this.freqsDist,7),distCodes=this.getCodesFromLengths_(distLengths),hlit=286;hlit>257&&0===litLenLengths[hlit-1];hlit--);for(hdist=30;hdist>1&&0===distLengths[hdist-1];hdist--);for(treeSymbols=this.getTreeSymbols_(hlit,litLenLengths,hdist,distLengths),treeLengths=this.getLengths_(treeSymbols.freqs,7),i=0;i<19;i++)transLengths[i]=treeLengths[hclenOrder[i]];for(hclen=19;hclen>4&&0===transLengths[hclen-1];hclen--);for(treeCodes=this.getCodesFromLengths_(treeLengths),stream.writeBits(hlit-257,5,!0),stream.writeBits(hdist-1,5,!0),stream.writeBits(hclen-4,4,!0),i=0;i<hclen;i++)stream.writeBits(transLengths[i],3,!0);for(i=0,il=treeSymbols.codes.length;i<il;i++)if(code=treeSymbols.codes[i],stream.writeBits(treeCodes[code],treeLengths[code],!0),code>=16){switch(i++,code){case 16:bitlen=2;break;case 17:bitlen=3;break;case 18:bitlen=7;break;default:throw"invalid code: "+code}stream.writeBits(treeSymbols.codes[i],bitlen,!0)}return this.dynamicHuffman(data,[litLenCodes,litLenLengths],[distCodes,distLengths],stream),stream.finish()},Zlib.RawDeflate.prototype.dynamicHuffman=function(dataArray,litLen,dist,stream){var index,length,literal,code,litLenCodes,litLenLengths,distCodes,distLengths;for(litLenCodes=litLen[0],litLenLengths=litLen[1],distCodes=dist[0],distLengths=dist[1],index=0,length=dataArray.length;index<length;++index)if(literal=dataArray[index],stream.writeBits(litLenCodes[literal],litLenLengths[literal],!0),literal>256)stream.writeBits(dataArray[++index],dataArray[++index],!0),code=dataArray[++index],stream.writeBits(distCodes[code],distLengths[code],!0),stream.writeBits(dataArray[++index],dataArray[++index],!0);else if(256===literal)break;return stream},Zlib.RawDeflate.prototype.fixedHuffman=function(dataArray,stream){var index,length,literal;for(index=0,length=dataArray.length;index<length;index++)if(literal=dataArray[index],Zlib.BitStream.prototype.writeBits.apply(stream,Zlib.RawDeflate.FixedHuffmanTable[literal]),literal>256)stream.writeBits(dataArray[++index],dataArray[++index],!0),stream.writeBits(dataArray[++index],5),stream.writeBits(dataArray[++index],dataArray[++index],!0);else if(256===literal)break;return stream},Zlib.RawDeflate.Lz77Match=function(length,backwardDistance){this.length=length,this.backwardDistance=backwardDistance},Zlib.RawDeflate.Lz77Match.LengthCodeTable=function(table){return USE_TYPEDARRAY?new Uint32Array(table):table}(function(){function code(length){switch(!0){case 3===length:return[257,length-3,0];case 4===length:return[258,length-4,0];case 5===length:return[259,length-5,0];case 6===length:return[260,length-6,0];case 7===length:return[261,length-7,0];case 8===length:return[262,length-8,0];case 9===length:return[263,length-9,0];case 10===length:return[264,length-10,0];case length<=12:return[265,length-11,1];case length<=14:return[266,length-13,1];case length<=16:return[267,length-15,1];case length<=18:return[268,length-17,1];case length<=22:return[269,length-19,2];case length<=26:return[270,length-23,2];case length<=30:return[271,length-27,2];case length<=34:return[272,length-31,2];case length<=42:return[273,length-35,3];case length<=50:return[274,length-43,3];case length<=58:return[275,length-51,3];case length<=66:return[276,length-59,3];case length<=82:return[277,length-67,4];case length<=98:return[278,length-83,4];case length<=114:return[279,length-99,4];case length<=130:return[280,length-115,4];case length<=162:return[281,length-131,5];case length<=194:return[282,length-163,5];case length<=226:return[283,length-195,5];case length<=257:return[284,length-227,5];case 258===length:return[285,length-258,0];default:throw"invalid length: "+length}}var i,c,table=[];for(i=3;i<=258;i++)c=code(i),table[i]=c[2]<<24|c[1]<<16|c[0];return table}()),Zlib.RawDeflate.Lz77Match.prototype.getDistanceCode_=function(dist){var r;switch(!0){case 1===dist:r=[0,dist-1,0];break;case 2===dist:r=[1,dist-2,0];break;case 3===dist:r=[2,dist-3,0];break;case 4===dist:r=[3,dist-4,0];break;case dist<=6:r=[4,dist-5,1];break;case dist<=8:r=[5,dist-7,1];break;case dist<=12:r=[6,dist-9,2];break;case dist<=16:r=[7,dist-13,2];break;case dist<=24:r=[8,dist-17,3];break;case dist<=32:r=[9,dist-25,3];break;case dist<=48:r=[10,dist-33,4];break;case dist<=64:r=[11,dist-49,4];break;case dist<=96:r=[12,dist-65,5];break;case dist<=128:r=[13,dist-97,5];break;case dist<=192:r=[14,dist-129,6];break;case dist<=256:r=[15,dist-193,6];break;case dist<=384:r=[16,dist-257,7];break;case dist<=512:r=[17,dist-385,7];break;case dist<=768:r=[18,dist-513,8];break;case dist<=1024:r=[19,dist-769,8];break;case dist<=1536:r=[20,dist-1025,9];break;case dist<=2048:r=[21,dist-1537,9];break;case dist<=3072:r=[22,dist-2049,10];break;case dist<=4096:r=[23,dist-3073,10];break;case dist<=6144:r=[24,dist-4097,11];break;case dist<=8192:r=[25,dist-6145,11];break;case dist<=12288:r=[26,dist-8193,12];break;case dist<=16384:r=[27,dist-12289,12];break;case dist<=24576:r=[28,dist-16385,13];break;case dist<=32768:r=[29,dist-24577,13];break;default:throw"invalid distance"}return r},Zlib.RawDeflate.Lz77Match.prototype.toLz77Array=function(){var code,length=this.length,dist=this.backwardDistance,codeArray=[],pos=0;return code=Zlib.RawDeflate.Lz77Match.LengthCodeTable[length],codeArray[pos++]=65535&code,codeArray[pos++]=code>>16&255,codeArray[pos++]=code>>24,code=this.getDistanceCode_(dist),codeArray[pos++]=code[0],codeArray[pos++]=code[1],codeArray[pos++]=code[2],codeArray},Zlib.RawDeflate.prototype.lz77=function(dataArray){function writeMatch(match,offset){var i,il,lz77Array=match.toLz77Array();for(i=0,il=lz77Array.length;i<il;++i)lz77buf[pos++]=lz77Array[i];freqsLitLen[lz77Array[0]]++,freqsDist[lz77Array[3]]++,skipLength=match.length+offset-1,prevMatch=null}var position,length,i,il,matchKey,matchList,longestMatch,prevMatch,tmp,table={},windowSize=Zlib.RawDeflate.WindowSize,lz77buf=USE_TYPEDARRAY?new Uint16Array(2*dataArray.length):[],pos=0,skipLength=0,freqsLitLen=new(USE_TYPEDARRAY?Uint32Array:Array)(286),freqsDist=new(USE_TYPEDARRAY?Uint32Array:Array)(30),lazy=this.lazy;if(!USE_TYPEDARRAY){for(i=0;i<=285;)freqsLitLen[i++]=0;for(i=0;i<=29;)freqsDist[i++]=0}for(freqsLitLen[256]=1,position=0,length=dataArray.length;position<length;++position){for(matchKey=0,i=0,il=Zlib.RawDeflate.Lz77MinLength;i<il&&position+i!==length;++i)matchKey=matchKey<<8|dataArray[position+i];if(void 0===table[matchKey]&&(table[matchKey]=[]),matchList=table[matchKey],skipLength-- >0)matchList.push(position);else{for(;matchList.length>0&&position-matchList[0]>windowSize;)matchList.shift();if(position+Zlib.RawDeflate.Lz77MinLength>=length){for(prevMatch&&writeMatch(prevMatch,-1),i=0,il=length-position;i<il;++i)tmp=dataArray[position+i],lz77buf[pos++]=tmp,++freqsLitLen[tmp];break}matchList.length>0?(longestMatch=this.searchLongestMatch_(dataArray,position,matchList),prevMatch?prevMatch.length<longestMatch.length?(tmp=dataArray[position-1],lz77buf[pos++]=tmp,++freqsLitLen[tmp],writeMatch(longestMatch,0)):writeMatch(prevMatch,-1):longestMatch.length<lazy?prevMatch=longestMatch:writeMatch(longestMatch,0)):prevMatch?writeMatch(prevMatch,-1):(tmp=dataArray[position],lz77buf[pos++]=tmp,++freqsLitLen[tmp]),matchList.push(position)}}return lz77buf[pos++]=256,freqsLitLen[256]++,this.freqsLitLen=freqsLitLen,this.freqsDist=freqsDist,USE_TYPEDARRAY?lz77buf.subarray(0,pos):lz77buf},Zlib.RawDeflate.prototype.searchLongestMatch_=function(data,position,matchList){var match,currentMatch,matchLength,i,j,l,matchMax=0,dl=data.length;permatch:for(i=0,l=matchList.length;i<l;i++){if(match=matchList[l-i-1],matchLength=Zlib.RawDeflate.Lz77MinLength,matchMax>Zlib.RawDeflate.Lz77MinLength){for(j=matchMax;j>Zlib.RawDeflate.Lz77MinLength;j--)if(data[match+j-1]!==data[position+j-1])continue permatch;matchLength=matchMax}for(;matchLength<Zlib.RawDeflate.Lz77MaxLength&&position+matchLength<dl&&data[match+matchLength]===data[position+matchLength];)++matchLength;if(matchLength>matchMax&&(currentMatch=match,matchMax=matchLength),matchLength===Zlib.RawDeflate.Lz77MaxLength)break}return new Zlib.RawDeflate.Lz77Match(matchMax,position-currentMatch)},Zlib.RawDeflate.prototype.getTreeSymbols_=function(hlit,litlenLengths,hdist,distLengths){var i,j,runLength,l,nResult,rpt,src=new(USE_TYPEDARRAY?Uint32Array:Array)(hlit+hdist),result=new(USE_TYPEDARRAY?Uint32Array:Array)(316),freqs=new(USE_TYPEDARRAY?Uint8Array:Array)(19);for(j=0,i=0;i<hlit;i++)src[j++]=litlenLengths[i];for(i=0;i<hdist;i++)src[j++]=distLengths[i];if(!USE_TYPEDARRAY)for(i=0,l=freqs.length;i<l;++i)freqs[i]=0;for(nResult=0,i=0,l=src.length;i<l;i+=j){for(j=1;i+j<l&&src[i+j]===src[i];++j);if(runLength=j,0===src[i])if(runLength<3)for(;runLength-- >0;)result[nResult++]=0,freqs[0]++;else for(;runLength>0;)rpt=runLength<138?runLength:138,rpt>runLength-3&&rpt<runLength&&(rpt=runLength-3),rpt<=10?(result[nResult++]=17,result[nResult++]=rpt-3,freqs[17]++):(result[nResult++]=18,result[nResult++]=rpt-11,freqs[18]++),runLength-=rpt;else if(result[nResult++]=src[i],freqs[src[i]]++,--runLength<3)for(;runLength-- >0;)result[nResult++]=src[i],freqs[src[i]]++;else for(;runLength>0;)rpt=runLength<6?runLength:6,rpt>runLength-3&&rpt<runLength&&(rpt=runLength-3),result[nResult++]=16,result[nResult++]=rpt-3,freqs[16]++,runLength-=rpt}return{codes:USE_TYPEDARRAY?result.subarray(0,nResult):result.slice(0,nResult),freqs:freqs}},Zlib.RawDeflate.prototype.getLengths_=function(freqs,limit){var nodes,values,codeLength,i,il,nSymbols=freqs.length,heap=new Zlib.Heap(2*Zlib.RawDeflate.HUFMAX),length=new(USE_TYPEDARRAY?Uint8Array:Array)(nSymbols);if(!USE_TYPEDARRAY)for(i=0;i<nSymbols;i++)length[i]=0;for(i=0;i<nSymbols;++i)freqs[i]>0&&heap.push(i,freqs[i]);if(nodes=new Array(heap.length/2),values=new(USE_TYPEDARRAY?Uint32Array:Array)(heap.length/2),1===nodes.length)return length[heap.pop().index]=1,length;for(i=0,il=heap.length/2;i<il;++i)nodes[i]=heap.pop(),values[i]=nodes[i].value;for(codeLength=this.reversePackageMerge_(values,values.length,limit),i=0,il=nodes.length;i<il;++i)length[nodes[i].index]=codeLength[i];return length},Zlib.RawDeflate.prototype.reversePackageMerge_=function(freqs,symbols,limit){function takePackage(j){var x=type[j][currentPosition[j]];x===symbols?(takePackage(j+1),takePackage(j+1)):--codeLength[x],++currentPosition[j]}var i,j,t,weight,next,minimumCost=new(USE_TYPEDARRAY?Uint16Array:Array)(limit),flag=new(USE_TYPEDARRAY?Uint8Array:Array)(limit),codeLength=new(USE_TYPEDARRAY?Uint8Array:Array)(symbols),value=new Array(limit),type=new Array(limit),currentPosition=new Array(limit),excess=(1<<limit)-symbols,half=1<<limit-1;for(minimumCost[limit-1]=symbols,j=0;j<limit;++j)excess<half?flag[j]=0:(flag[j]=1,excess-=half),excess<<=1,minimumCost[limit-2-j]=(minimumCost[limit-1-j]/2|0)+symbols;for(minimumCost[0]=flag[0],value[0]=new Array(minimumCost[0]),type[0]=new Array(minimumCost[0]),j=1;j<limit;++j)minimumCost[j]>2*minimumCost[j-1]+flag[j]&&(minimumCost[j]=2*minimumCost[j-1]+flag[j]),value[j]=new Array(minimumCost[j]),type[j]=new Array(minimumCost[j]);for(i=0;i<symbols;++i)codeLength[i]=limit;for(t=0;t<minimumCost[limit-1];++t)value[limit-1][t]=freqs[t],type[limit-1][t]=t;for(i=0;i<limit;++i)currentPosition[i]=0;for(1===flag[limit-1]&&(--codeLength[0],++currentPosition[limit-1]),j=limit-2;j>=0;--j){for(i=0,weight=0,next=currentPosition[j+1],t=0;t<minimumCost[j];t++)weight=value[j+1][next]+value[j+1][next+1],weight>freqs[i]?(value[j][t]=weight,type[j][t]=symbols,next+=2):(value[j][t]=freqs[i],type[j][t]=i,++i);currentPosition[j]=0,1===flag[j]&&takePackage(j)}return codeLength},Zlib.RawDeflate.prototype.getCodesFromLengths_=function(lengths){var i,il,j,m,codes=new(USE_TYPEDARRAY?Uint16Array:Array)(lengths.length),count=[],startCode=[],code=0;for(i=0,il=lengths.length;i<il;i++)count[lengths[i]]=1+(0|count[lengths[i]]);for(i=1,il=Zlib.RawDeflate.MaxCodeLength;i<=il;i++)startCode[i]=code,code+=0|count[i],code<<=1;for(i=0,il=lengths.length;i<il;i++)for(code=startCode[lengths[i]],startCode[lengths[i]]+=1,codes[i]=0,j=0,m=lengths[i];j<m;j++)codes[i]=codes[i]<<1|1&code,code>>>=1;return codes},Zlib.Unzip=function(input,opt_params){opt_params=opt_params||{},this.input=USE_TYPEDARRAY&&input instanceof Array?new Uint8Array(input):input,this.ip=0,this.eocdrOffset,this.numberOfThisDisk,this.startDisk,this.totalEntriesThisDisk,this.totalEntries,this.centralDirectorySize,this.centralDirectoryOffset,this.commentLength,this.comment,this.fileHeaderList,this.filenameToIndex,this.verify=opt_params.verify||!1,this.password=opt_params.password},Zlib.Unzip.CompressionMethod=Zlib.Zip.CompressionMethod,Zlib.Unzip.FileHeaderSignature=Zlib.Zip.FileHeaderSignature,Zlib.Unzip.LocalFileHeaderSignature=Zlib.Zip.LocalFileHeaderSignature,Zlib.Unzip.CentralDirectorySignature=Zlib.Zip.CentralDirectorySignature,Zlib.Unzip.FileHeader=function(input,ip){this.input=input,this.offset=ip,this.length,this.version,this.os,this.needVersion,this.flags,this.compression,this.time,this.date,this.crc32,this.compressedSize,this.plainSize,this.fileNameLength,this.extraFieldLength,this.fileCommentLength,this.diskNumberStart,this.internalFileAttributes,this.externalFileAttributes,this.relativeOffset,this.filename,this.extraField,this.comment},Zlib.Unzip.FileHeader.prototype.parse=function(){var input=this.input,ip=this.offset;if(input[ip++]!==Zlib.Unzip.FileHeaderSignature[0]||input[ip++]!==Zlib.Unzip.FileHeaderSignature[1]||input[ip++]!==Zlib.Unzip.FileHeaderSignature[2]||input[ip++]!==Zlib.Unzip.FileHeaderSignature[3])throw new Error("invalid file header signature");this.version=input[ip++],this.os=input[ip++],this.needVersion=input[ip++]|input[ip++]<<8,this.flags=input[ip++]|input[ip++]<<8,this.compression=input[ip++]|input[ip++]<<8,this.time=input[ip++]|input[ip++]<<8,this.date=input[ip++]|input[ip++]<<8,this.crc32=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.compressedSize=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.plainSize=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.fileNameLength=input[ip++]|input[ip++]<<8,this.extraFieldLength=input[ip++]|input[ip++]<<8,this.fileCommentLength=input[ip++]|input[ip++]<<8,this.diskNumberStart=input[ip++]|input[ip++]<<8,this.internalFileAttributes=input[ip++]|input[ip++]<<8,this.externalFileAttributes=input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24,this.relativeOffset=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.filename=String.fromCharCode.apply(null,USE_TYPEDARRAY?input.subarray(ip,ip+=this.fileNameLength):input.slice(ip,ip+=this.fileNameLength)),this.extraField=USE_TYPEDARRAY?input.subarray(ip,ip+=this.extraFieldLength):input.slice(ip,ip+=this.extraFieldLength),this.comment=USE_TYPEDARRAY?input.subarray(ip,ip+this.fileCommentLength):input.slice(ip,ip+this.fileCommentLength),this.length=ip-this.offset},Zlib.Unzip.LocalFileHeader=function(input,ip){this.input=input,this.offset=ip,this.length,this.needVersion,this.flags,this.compression,this.time,this.date,this.crc32,this.compressedSize,this.plainSize,this.fileNameLength,this.extraFieldLength,this.filename,this.extraField},Zlib.Unzip.LocalFileHeader.Flags=Zlib.Zip.Flags,Zlib.Unzip.LocalFileHeader.prototype.parse=function(){var input=this.input,ip=this.offset;if(input[ip++]!==Zlib.Unzip.LocalFileHeaderSignature[0]||input[ip++]!==Zlib.Unzip.LocalFileHeaderSignature[1]||input[ip++]!==Zlib.Unzip.LocalFileHeaderSignature[2]||input[ip++]!==Zlib.Unzip.LocalFileHeaderSignature[3])throw new Error("invalid local file header signature");this.needVersion=input[ip++]|input[ip++]<<8,this.flags=input[ip++]|input[ip++]<<8,this.compression=input[ip++]|input[ip++]<<8,this.time=input[ip++]|input[ip++]<<8,this.date=input[ip++]|input[ip++]<<8,this.crc32=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.compressedSize=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.plainSize=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.fileNameLength=input[ip++]|input[ip++]<<8,this.extraFieldLength=input[ip++]|input[ip++]<<8,this.filename=String.fromCharCode.apply(null,USE_TYPEDARRAY?input.subarray(ip,ip+=this.fileNameLength):input.slice(ip,ip+=this.fileNameLength)),this.extraField=USE_TYPEDARRAY?input.subarray(ip,ip+=this.extraFieldLength):input.slice(ip,ip+=this.extraFieldLength),this.length=ip-this.offset},Zlib.Unzip.prototype.searchEndOfCentralDirectoryRecord=function(){var ip,input=this.input;for(ip=input.length-12;ip>0;--ip)if(input[ip]===Zlib.Unzip.CentralDirectorySignature[0]&&input[ip+1]===Zlib.Unzip.CentralDirectorySignature[1]&&input[ip+2]===Zlib.Unzip.CentralDirectorySignature[2]&&input[ip+3]===Zlib.Unzip.CentralDirectorySignature[3])return void(this.eocdrOffset=ip);throw new Error("End of Central Directory Record not found")},Zlib.Unzip.prototype.parseEndOfCentralDirectoryRecord=function(){var ip,input=this.input;if(this.eocdrOffset||this.searchEndOfCentralDirectoryRecord(),ip=this.eocdrOffset,input[ip++]!==Zlib.Unzip.CentralDirectorySignature[0]||input[ip++]!==Zlib.Unzip.CentralDirectorySignature[1]||input[ip++]!==Zlib.Unzip.CentralDirectorySignature[2]||input[ip++]!==Zlib.Unzip.CentralDirectorySignature[3])throw new Error("invalid signature");this.numberOfThisDisk=input[ip++]|input[ip++]<<8,this.startDisk=input[ip++]|input[ip++]<<8,this.totalEntriesThisDisk=input[ip++]|input[ip++]<<8,this.totalEntries=input[ip++]|input[ip++]<<8,this.centralDirectorySize=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.centralDirectoryOffset=(input[ip++]|input[ip++]<<8|input[ip++]<<16|input[ip++]<<24)>>>0,this.commentLength=input[ip++]|input[ip++]<<8,this.comment=USE_TYPEDARRAY?input.subarray(ip,ip+this.commentLength):input.slice(ip,ip+this.commentLength)},Zlib.Unzip.prototype.parseFileHeader=function(){var ip,fileHeader,i,il,filelist=[],filetable={};if(!this.fileHeaderList){for(void 0===this.centralDirectoryOffset&&this.parseEndOfCentralDirectoryRecord(),ip=this.centralDirectoryOffset,i=0,il=this.totalEntries;i<il;++i)fileHeader=new Zlib.Unzip.FileHeader(this.input,ip),fileHeader.parse(),ip+=fileHeader.length,filelist[i]=fileHeader,filetable[fileHeader.filename]=i;if(this.centralDirectorySize<ip-this.centralDirectoryOffset)throw new Error("invalid file header size");this.fileHeaderList=filelist,this.filenameToIndex=filetable}},Zlib.Unzip.prototype.getFileData=function(index,opt_params){opt_params=opt_params||{};var localFileHeader,offset,length,buffer,crc32,key,i,il,input=this.input,fileHeaderList=this.fileHeaderList;if(fileHeaderList||this.parseFileHeader(),void 0===fileHeaderList[index])throw new Error("wrong index");if(offset=fileHeaderList[index].relativeOffset,localFileHeader=new Zlib.Unzip.LocalFileHeader(this.input,offset),localFileHeader.parse(),offset+=localFileHeader.length,length=localFileHeader.compressedSize,0!=(localFileHeader.flags&Zlib.Unzip.LocalFileHeader.Flags.ENCRYPT)){if(!opt_params.password&&!this.password)throw new Error("please set password");for(key=this.createDecryptionKey(opt_params.password||this.password),i=offset,il=offset+12;i<il;++i)this.decode(key,input[i]);for(offset+=12,length-=12,i=offset,il=offset+length;i<il;++i)input[i]=this.decode(key,input[i])}switch(localFileHeader.compression){case Zlib.Unzip.CompressionMethod.STORE:buffer=USE_TYPEDARRAY?this.input.subarray(offset,offset+length):this.input.slice(offset,offset+length);break;case Zlib.Unzip.CompressionMethod.DEFLATE:buffer=new Zlib.RawInflate(this.input,{index:offset,bufferSize:localFileHeader.plainSize}).decompress();break;default:throw new Error("unknown compression type")}if(this.verify&&(crc32=Zlib.CRC32.calc(buffer),localFileHeader.crc32!==crc32))throw new Error("wrong crc: file=0x"+localFileHeader.crc32.toString(16)+", data=0x"+crc32.toString(16));return buffer},Zlib.Unzip.prototype.getFilenames=function(){var i,il,fileHeaderList,filenameList=[];for(this.fileHeaderList||this.parseFileHeader(),fileHeaderList=this.fileHeaderList,i=0,il=fileHeaderList.length;i<il;++i)filenameList[i]=fileHeaderList[i].filename;return filenameList},Zlib.Unzip.prototype.decompress=function(filename,opt_params){var index;if(this.filenameToIndex||this.parseFileHeader(),void 0===(index=this.filenameToIndex[filename]))throw new Error(filename+" not found");return this.getFileData(index,opt_params)},Zlib.Unzip.prototype.setPassword=function(password){this.password=password},Zlib.Unzip.prototype.decode=function(key,n){return n^=this.getByte(key),this.updateKeys(key,n),n},Zlib.Unzip.prototype.updateKeys=Zlib.Zip.prototype.updateKeys,Zlib.Unzip.prototype.createDecryptionKey=Zlib.Zip.prototype.createEncryptionKey,Zlib.Unzip.prototype.getByte=Zlib.Zip.prototype.getByte,Zlib.Util.stringToByteArray=function(str){var i,il,tmp=str.split("");for(i=0,il=tmp.length;i<il;i++)tmp[i]=(255&tmp[i].charCodeAt(0))>>>0;return tmp},Zlib.Adler32=function(array){return"string"==typeof array&&(array=Zlib.Util.stringToByteArray(array)),Zlib.Adler32.update(1,array)},Zlib.Adler32.update=function(adler,array){for(var tlen,s1=65535&adler,s2=adler>>>16&65535,len=array.length,i=0;len>0;){tlen=len>Zlib.Adler32.OptimizationParameter?Zlib.Adler32.OptimizationParameter:len,len-=tlen;do{s1+=array[i++],s2+=s1}while(--tlen);s1%=65521,s2%=65521}return(s2<<16|s1)>>>0},Zlib.Adler32.OptimizationParameter=1024,Zlib.BitStream=function(buffer,bufferPosition){if(this.index="number"==typeof bufferPosition?bufferPosition:0,this.bitindex=0,this.buffer=buffer instanceof(USE_TYPEDARRAY?Uint8Array:Array)?buffer:new(USE_TYPEDARRAY?Uint8Array:Array)(Zlib.BitStream.DefaultBlockSize),2*this.buffer.length<=this.index)throw new Error("invalid index");this.buffer.length<=this.index&&this.expandBuffer()},Zlib.BitStream.DefaultBlockSize=32768,Zlib.BitStream.prototype.expandBuffer=function(){var i,oldbuf=this.buffer,il=oldbuf.length,buffer=new(USE_TYPEDARRAY?Uint8Array:Array)(il<<1);if(USE_TYPEDARRAY)buffer.set(oldbuf);else for(i=0;i<il;++i)buffer[i]=oldbuf[i];return this.buffer=buffer},Zlib.BitStream.prototype.writeBits=function(number,n,reverse){function rev32_(n){return Zlib.BitStream.ReverseTable[255&n]<<24|Zlib.BitStream.ReverseTable[n>>>8&255]<<16|Zlib.BitStream.ReverseTable[n>>>16&255]<<8|Zlib.BitStream.ReverseTable[n>>>24&255]}var i,buffer=this.buffer,index=this.index,bitindex=this.bitindex,current=buffer[index];if(reverse&&n>1&&(number=n>8?rev32_(number)>>32-n:Zlib.BitStream.ReverseTable[number]>>8-n),n+bitindex<8)current=current<<n|number,bitindex+=n;else for(i=0;i<n;++i)current=current<<1|number>>n-i-1&1,8==++bitindex&&(bitindex=0,buffer[index++]=Zlib.BitStream.ReverseTable[current],current=0,index===buffer.length&&(buffer=this.expandBuffer()));buffer[index]=current,this.buffer=buffer,this.bitindex=bitindex,this.index=index},Zlib.BitStream.prototype.finish=function(){var output,buffer=this.buffer,index=this.index;return this.bitindex>0&&(buffer[index]<<=8-this.bitindex,buffer[index]=Zlib.BitStream.ReverseTable[buffer[index]],index++),USE_TYPEDARRAY?output=buffer.subarray(0,index):(buffer.length=index,output=buffer),output},Zlib.BitStream.ReverseTable=function(table){return table}(function(){var i,table=new(USE_TYPEDARRAY?Uint8Array:Array)(256);for(i=0;i<256;++i)table[i]=function(n){var r=n,s=7;for(n>>>=1;n;n>>>=1)r<<=1,r|=1&n,--s;return(r<<s&255)>>>0}(i);return table}()),Zlib.CRC32.calc=function(data,pos,length){return Zlib.CRC32.update(data,0,pos,length)},Zlib.CRC32.update=function(data,crc,pos,length){var table=Zlib.CRC32.Table,i="number"==typeof pos?pos:pos=0,il="number"==typeof length?length:data.length;for(crc^=4294967295,i=7&il;i--;++pos)crc=crc>>>8^table[255&(crc^data[pos])];for(i=il>>3;i--;pos+=8)crc=crc>>>8^table[255&(crc^data[pos])],crc=crc>>>8^table[255&(crc^data[pos+1])],crc=crc>>>8^table[255&(crc^data[pos+2])],crc=crc>>>8^table[255&(crc^data[pos+3])],crc=crc>>>8^table[255&(crc^data[pos+4])],crc=crc>>>8^table[255&(crc^data[pos+5])],crc=crc>>>8^table[255&(crc^data[pos+6])],crc=crc>>>8^table[255&(crc^data[pos+7])];return(4294967295^crc)>>>0},Zlib.CRC32.single=function(num,crc){return(Zlib.CRC32.Table[255&(num^crc)]^num>>>8)>>>0},Zlib.CRC32.Table_=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],Zlib.CRC32.Table=USE_TYPEDARRAY?new Uint32Array(Zlib.CRC32.Table_):Zlib.CRC32.Table_,Zlib.Deflate=function(input,opt_params){this.input=input,this.output=new(USE_TYPEDARRAY?Uint8Array:Array)(Zlib.Deflate.DefaultBufferSize),this.compressionType=Zlib.Deflate.CompressionType.DYNAMIC,this.rawDeflate;var prop,rawDeflateOption={};!opt_params&&(opt_params={})||"number"==typeof opt_params.compressionType&&(this.compressionType=opt_params.compressionType);for(prop in opt_params)rawDeflateOption[prop]=opt_params[prop];rawDeflateOption.outputBuffer=this.output,this.rawDeflate=new Zlib.RawDeflate(this.input,rawDeflateOption)},Zlib.Deflate.DefaultBufferSize=32768,Zlib.Deflate.CompressionType=Zlib.RawDeflate.CompressionType,Zlib.Deflate.compress=function(input,opt_params){return new Zlib.Deflate(input,opt_params).compress()},Zlib.Deflate.prototype.compress=function(){var cm,cinfo,cmf,flg,fcheck,fdict,flevel,adler,output,pos=0;switch(output=this.output,cm=Zlib.CompressionMethod.DEFLATE){case Zlib.CompressionMethod.DEFLATE:cinfo=Math.LOG2E*Math.log(Zlib.RawDeflate.WindowSize)-8;break;default:throw new Error("invalid compression method")}switch(cmf=cinfo<<4|cm,output[pos++]=cmf,fdict=0,cm){case Zlib.CompressionMethod.DEFLATE:switch(this.compressionType){case Zlib.Deflate.CompressionType.NONE:flevel=0;break;case Zlib.Deflate.CompressionType.FIXED:flevel=1;break;case Zlib.Deflate.CompressionType.DYNAMIC:flevel=2;break;default:throw new Error("unsupported compression type")}break;default:throw new Error("invalid compression method")}return flg=flevel<<6|fdict<<5,fcheck=31-(256*cmf+flg)%31,flg|=fcheck,output[pos++]=flg,adler=Zlib.Adler32(this.input),this.rawDeflate.op=pos,output=this.rawDeflate.compress(),pos=output.length,USE_TYPEDARRAY&&(output=new Uint8Array(output.buffer),output.length<=pos+4&&(this.output=new Uint8Array(output.length+4),this.output.set(output),output=this.output),output=output.subarray(0,pos+4)),output[pos++]=adler>>24&255,output[pos++]=adler>>16&255,output[pos++]=adler>>8&255,output[pos++]=255&adler,output};var MAX_WBITS=15,DEF_WBITS=MAX_WBITS,MANY=1440,BMAX=15,Z_NO_FLUSH=0,Z_FINISH=4,Z_OK=0,Z_STREAM_END=1,Z_STREAM_ERROR=-2,Z_DATA_ERROR=-3,Z_MEM_ERROR=-4,Z_BUF_ERROR=-5,METHOD=0,FLAG=1,DICT4=2,DICT3=3,DICT2=4,DICT1=5,DICT0=6,BLOCKS=7,CHECK4=8,CHECK3=9,CHECK2=10,CHECK1=11,DONE=12,BAD=13,inflate_mask=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],IB_TYPE=0,IB_LENS=1,IB_STORED=2,IB_TABLE=3,IB_BTREE=4,IB_DTREE=5,IB_CODES=6,IB_DRY=7,IB_DONE=8,IB_BAD=9,fixed_bl=9,fixed_bd=5,fixed_tl=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],fixed_td=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],cplens=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],cplext=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],cpdist=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],cpdext=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];ZStream.prototype.inflateInit=function(w,nowrap){return w||(w=DEF_WBITS),nowrap&&(nowrap=!1),this.istate=new Inflate,this.istate.inflateInit(this,nowrap?-w:w)},ZStream.prototype.inflate=function(f){return null==this.istate?Z_STREAM_ERROR:this.istate.inflate(this,f)},ZStream.prototype.inflateEnd=function(){if(null==this.istate)return Z_STREAM_ERROR;var ret=istate.inflateEnd(this);return this.istate=null,ret},ZStream.prototype.inflateSync=function(){return istate.inflateSync(this)},ZStream.prototype.inflateSetDictionary=function(dictionary,dictLength){return istate.inflateSetDictionary(this,dictionary,dictLength)},Inflate.prototype.inflateReset=function(z){return null==z||null==z.istate?Z_STREAM_ERROR:(z.total_in=z.total_out=0,z.msg=null,z.istate.mode=0!=z.istate.nowrap?BLOCKS:METHOD,z.istate.blocks.reset(z,null),Z_OK)},Inflate.prototype.inflateEnd=function(z){return null!=this.blocks&&this.blocks.free(z),this.blocks=null,Z_OK},Inflate.prototype.inflateInit=function(z,w){return z.msg=null,this.blocks=null,nowrap=0,w<0&&(w=-w,nowrap=1),w<8||w>15?(this.inflateEnd(z),Z_STREAM_ERROR):(this.wbits=w,z.istate.blocks=new InfBlocks(z,0!=z.istate.nowrap?null:this,1<<w),this.inflateReset(z),Z_OK)},Inflate.prototype.inflate=function(z,f){var r,b;if(null==z||null==z.istate||null==z.next_in)return Z_STREAM_ERROR;for(f=f==Z_FINISH?Z_BUF_ERROR:Z_OK,r=Z_BUF_ERROR;;)switch(z.istate.mode){case METHOD:if(0==z.avail_in)return r;if(r=f,z.avail_in--,z.total_in++,8!=(15&(z.istate.method=z.next_in[z.next_in_index++]))){z.istate.mode=BAD,z.msg="unknown compression method",z.istate.marker=5;break}if(8+(z.istate.method>>4)>z.istate.wbits){z.istate.mode=BAD,z.msg="invalid window size",z.istate.marker=5;break}z.istate.mode=FLAG;case FLAG:if(0==z.avail_in)return r;if(r=f,z.avail_in--,z.total_in++,b=255&z.next_in[z.next_in_index++],((z.istate.method<<8)+b)%31!=0){z.istate.mode=BAD,z.msg="incorrect header check",z.istate.marker=5;break}if(0==(32&b)){z.istate.mode=BLOCKS;break}z.istate.mode=DICT4;case DICT4:if(0==z.avail_in)return r;r=f,z.avail_in--,z.total_in++,z.istate.need=(255&z.next_in[z.next_in_index++])<<24&4278190080,z.istate.mode=DICT3;case DICT3:if(0==z.avail_in)return r;r=f,z.avail_in--,z.total_in++,z.istate.need+=(255&z.next_in[z.next_in_index++])<<16&16711680,z.istate.mode=DICT2;case DICT2:if(0==z.avail_in)return r;r=f,z.avail_in--,z.total_in++,z.istate.need+=(255&z.next_in[z.next_in_index++])<<8&65280,z.istate.mode=DICT1;case DICT1:return 0==z.avail_in?r:(r=f,z.avail_in--,z.total_in++,z.istate.need+=255&z.next_in[z.next_in_index++],z.adler=z.istate.need,z.istate.mode=DICT0,2);case DICT0:return z.istate.mode=BAD,z.msg="need dictionary",z.istate.marker=0,Z_STREAM_ERROR;case BLOCKS:if((r=z.istate.blocks.proc(z,r))==Z_DATA_ERROR){z.istate.mode=BAD,z.istate.marker=0;break}if(r==Z_OK&&(r=f),r!=Z_STREAM_END)return r;if(r=f,z.istate.blocks.reset(z,z.istate.was),0!=z.istate.nowrap){z.istate.mode=DONE;break}z.istate.mode=CHECK4;case CHECK4:if(0==z.avail_in)return r;r=f,z.avail_in--,z.total_in++,z.istate.need=(255&z.next_in[z.next_in_index++])<<24&4278190080,z.istate.mode=CHECK3;case CHECK3:if(0==z.avail_in)return r;r=f,z.avail_in--,z.total_in++,z.istate.need+=(255&z.next_in[z.next_in_index++])<<16&16711680,z.istate.mode=CHECK2;case CHECK2:if(0==z.avail_in)return r;r=f,z.avail_in--,z.total_in++,z.istate.need+=(255&z.next_in[z.next_in_index++])<<8&65280,z.istate.mode=CHECK1;case CHECK1:if(0==z.avail_in)return r;if(r=f,z.avail_in--,z.total_in++,z.istate.need+=255&z.next_in[z.next_in_index++],z.istate.was[0]!=z.istate.need){z.istate.mode=BAD,z.msg="incorrect data check",z.istate.marker=5;break}z.istate.mode=DONE;case DONE:return Z_STREAM_END;case BAD:return Z_DATA_ERROR;default:return Z_STREAM_ERROR}},Inflate.prototype.inflateSetDictionary=function(z,dictionary,dictLength){var index=0,length=dictLength;return null==z||null==z.istate||z.istate.mode!=DICT0?Z_STREAM_ERROR:z._adler.adler32(1,dictionary,0,dictLength)!=z.adler?Z_DATA_ERROR:(z.adler=z._adler.adler32(0,null,0,0),length>=1<<z.istate.wbits&&(length=(1<<z.istate.wbits)-1,index=dictLength-length),z.istate.blocks.set_dictionary(dictionary,index,length),z.istate.mode=BLOCKS,Z_OK)};var mark=[0,0,255,255];Inflate.prototype.inflateSync=function(z){var n,p,m,r,w;if(null==z||null==z.istate)return Z_STREAM_ERROR;if(z.istate.mode!=BAD&&(z.istate.mode=BAD,z.istate.marker=0),0==(n=z.avail_in))return Z_BUF_ERROR;for(p=z.next_in_index,m=z.istate.marker;0!=n&&m<4;)z.next_in[p]==mark[m]?m++:m=0!=z.next_in[p]?0:4-m,p++,n--;return z.total_in+=p-z.next_in_index,z.next_in_index=p,z.avail_in=n,z.istate.marker=m,4!=m?Z_DATA_ERROR:(r=z.total_in,w=z.total_out,this.inflateReset(z),z.total_in=r,z.total_out=w,z.istate.mode=BLOCKS,Z_OK)},Inflate.prototype.inflateSyncPoint=function(z){return null==z||null==z.istate||null==z.istate.blocks?Z_STREAM_ERROR:z.istate.blocks.sync_point()};var INFBLOCKS_BORDER=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];InfBlocks.prototype.reset=function(z,c){c&&(c[0]=this.check),this.mode==IB_CODES&&this.codes.free(z),this.mode=IB_TYPE,this.bitk=0,this.bitb=0,this.read=this.write=0,this.checkfn&&(z.adler=this.check=z._adler.adler32(0,null,0,0))},InfBlocks.prototype.proc=function(z,r){var t,b,k,p,n,q,m;for(p=z.next_in_index,n=z.avail_in,b=this.bitb,k=this.bitk,q=this.write,m=q<this.read?this.read-q-1:this.end-q;;)switch(this.mode){case IB_TYPE:for(;k<3;){if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}switch(t=7&b,this.last=1&t,t>>>1){case 0:b>>>=3,k-=3,t=7&k,b>>>=t,k-=t,this.mode=IB_LENS;break;case 1:var bl=new Int32Array(1),bd=new Int32Array(1),tl=[],td=[];inflate_trees_fixed(bl,bd,tl,td,z),this.codes.init(bl[0],bd[0],tl[0],0,td[0],0,z),b>>>=3,k-=3,this.mode=IB_CODES;break;case 2:b>>>=3,k-=3,this.mode=IB_TABLE;break;case 3:return b>>>=3,k-=3,this.mode=BAD,z.msg="invalid block type",r=Z_DATA_ERROR,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r)}break;case IB_LENS:for(;k<32;){if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}if((~b>>>16&65535)!=(65535&b))return this.mode=BAD,z.msg="invalid stored block lengths",r=Z_DATA_ERROR,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);this.left=65535&b,b=k=0,this.mode=0!=this.left?IB_STORED:0!=this.last?IB_DRY:IB_TYPE;break;case IB_STORED:if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,write=q,this.inflate_flush(z,r);if(0==m&&(q==end&&0!=read&&(q=0,m=q<this.read?this.read-q-1:this.end-q),0==m&&(this.write=q,r=this.inflate_flush(z,r),q=this.write,m=q<this.read?this.read-q-1:this.end-q,q==this.end&&0!=this.read&&(q=0,m=q<this.read?this.read-q-1:this.end-q),0==m)))return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);if(r=Z_OK,t=this.left,t>n&&(t=n),t>m&&(t=m),arrayCopy(z.next_in,p,window,q,t),p+=t,n-=t,q+=t,m-=t,0!=(this.left-=t))break;this.mode=0!=this.last?IB_DRY:IB_TYPE;break;case IB_TABLE:for(;k<14;){if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}if(this.table=t=16383&b,(31&t)>29||(t>>5&31)>29)return this.mode=IB_BAD,z.msg="too many length or distance symbols",r=Z_DATA_ERROR,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);if(t=258+(31&t)+(t>>5&31),null==this.blens||this.blens.length<t)this.blens=new Int32Array(t);else for(var i=0;i<t;i++)this.blens[i]=0;b>>>=14,k-=14,this.index=0,mode=IB_BTREE;case IB_BTREE:for(;this.index<4+(this.table>>>10);){for(;k<3;){if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}this.blens[INFBLOCKS_BORDER[this.index++]]=7&b,b>>>=3,k-=3}for(;this.index<19;)this.blens[INFBLOCKS_BORDER[this.index++]]=0;if(this.bb[0]=7,(t=this.inftree.inflate_trees_bits(this.blens,this.bb,this.tb,this.hufts,z))!=Z_OK)return r=t,r==Z_DATA_ERROR&&(this.blens=null,this.mode=IB_BAD),this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,write=q,this.inflate_flush(z,r);this.index=0,this.mode=IB_DTREE;case IB_DTREE:for(;;){if(t=this.table,!(this.index<258+(31&t)+(t>>5&31)))break;var i,j,c;for(t=this.bb[0];k<t;){if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}if(t=this.hufts[3*(this.tb[0]+(b&inflate_mask[t]))+1],(c=this.hufts[3*(this.tb[0]+(b&inflate_mask[t]))+2])<16)b>>>=t,k-=t,this.blens[this.index++]=c;else{for(i=18==c?7:c-14,j=18==c?11:3;k<t+i;){if(0==n)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}if(b>>>=t,k-=t,j+=b&inflate_mask[i],b>>>=i,k-=i,i=this.index,t=this.table,i+j>258+(31&t)+(t>>5&31)||16==c&&i<1)return this.blens=null,this.mode=IB_BAD,z.msg="invalid bit length repeat",r=Z_DATA_ERROR,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);c=16==c?this.blens[i-1]:0;do{this.blens[i++]=c}while(0!=--j);this.index=i}}this.tb[0]=-1;var bl=new Int32Array(1),bd=new Int32Array(1),tl=new Int32Array(1),td=new Int32Array(1);if(bl[0]=9,bd[0]=6,t=this.table,(t=this.inftree.inflate_trees_dynamic(257+(31&t),1+(t>>5&31),this.blens,bl,bd,tl,td,this.hufts,z))!=Z_OK)return t==Z_DATA_ERROR&&(this.blens=null,this.mode=BAD),r=t,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);this.codes.init(bl[0],bd[0],this.hufts,tl[0],this.hufts,td[0],z),this.mode=IB_CODES;case IB_CODES:if(this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,(r=this.codes.proc(this,z,r))!=Z_STREAM_END)return this.inflate_flush(z,r);if(r=Z_OK,this.codes.free(z),p=z.next_in_index,n=z.avail_in,b=this.bitb,k=this.bitk,q=this.write,m=q<this.read?this.read-q-1:this.end-q,0==this.last){this.mode=IB_TYPE;break}this.mode=IB_DRY;case IB_DRY:if(this.write=q,r=this.inflate_flush(z,r),q=this.write,m=q<this.read?this.read-q-1:this.end-q,this.read!=this.write)return this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);mode=DONE;case IB_DONE:return r=Z_STREAM_END,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);case IB_BAD:return r=Z_DATA_ERROR,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r);default:return r=Z_STREAM_ERROR,this.bitb=b,this.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,this.write=q,this.inflate_flush(z,r)}},InfBlocks.prototype.free=function(z){this.reset(z,null),this.window=null,this.hufts=null},InfBlocks.prototype.set_dictionary=function(d,start,n){arrayCopy(d,start,window,0,n),this.read=this.write=n},InfBlocks.prototype.sync_point=function(){return this.mode==IB_LENS},InfBlocks.prototype.inflate_flush=function(z,r){var n,p,q;return p=z.next_out_index,q=this.read,n=(q<=this.write?this.write:this.end)-q,n>z.avail_out&&(n=z.avail_out),0!=n&&r==Z_BUF_ERROR&&(r=Z_OK),z.avail_out-=n,z.total_out+=n,null!=this.checkfn&&(z.adler=this.check=z._adler.adler32(this.check,this.window,q,n)),arrayCopy(this.window,q,z.next_out,p,n),p+=n,q+=n,q==this.end&&(q=0,this.write==this.end&&(this.write=0),n=this.write-q,n>z.avail_out&&(n=z.avail_out),0!=n&&r==Z_BUF_ERROR&&(r=Z_OK),z.avail_out-=n,z.total_out+=n,null!=this.checkfn&&(z.adler=this.check=z._adler.adler32(this.check,this.window,q,n)),arrayCopy(this.window,q,z.next_out,p,n),p+=n,q+=n),z.next_out_index=p,this.read=q,r};var IC_START=0,IC_LEN=1,IC_LENEXT=2,IC_DIST=3,IC_DISTEXT=4,IC_COPY=5,IC_LIT=6,IC_WASH=7,IC_END=8,IC_BADCODE=9;InfCodes.prototype.init=function(bl,bd,tl,tl_index,td,td_index,z){this.mode=IC_START,this.lbits=bl,this.dbits=bd,this.ltree=tl,this.ltree_index=tl_index,this.dtree=td,this.dtree_index=td_index,this.tree=null},InfCodes.prototype.proc=function(s,z,r){var j,tindex,e,n,q,m,f,b=0,k=0,p=0;for(p=z.next_in_index,n=z.avail_in,b=s.bitb,k=s.bitk,q=s.write,m=q<s.read?s.read-q-1:s.end-q;;)switch(this.mode){case IC_START:if(m>=258&&n>=10&&(s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,r=this.inflate_fast(this.lbits,this.dbits,this.ltree,this.ltree_index,this.dtree,this.dtree_index,s,z),p=z.next_in_index,n=z.avail_in,b=s.bitb,k=s.bitk,q=s.write,m=q<s.read?s.read-q-1:s.end-q,r!=Z_OK)){this.mode=r==Z_STREAM_END?IC_WASH:IC_BADCODE;break}this.need=this.lbits,this.tree=this.ltree,this.tree_index=this.ltree_index,this.mode=IC_LEN;case IC_LEN:for(j=this.need;k<j;){if(0==n)return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}if(tindex=3*(this.tree_index+(b&inflate_mask[j])),b>>>=this.tree[tindex+1],k-=this.tree[tindex+1],0==(e=this.tree[tindex])){this.lit=this.tree[tindex+2],this.mode=IC_LIT;break}if(0!=(16&e)){this.get=15&e,this.len=this.tree[tindex+2],this.mode=IC_LENEXT;break}if(0==(64&e)){this.need=e,this.tree_index=tindex/3+this.tree[tindex+2];break}if(0!=(32&e)){this.mode=IC_WASH;break}return this.mode=IC_BADCODE,z.msg="invalid literal/length code",r=Z_DATA_ERROR,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);case IC_LENEXT:for(j=this.get;k<j;){if(0==n)return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}this.len+=b&inflate_mask[j],b>>=j,k-=j,this.need=this.dbits,this.tree=this.dtree,this.tree_index=this.dtree_index,this.mode=IC_DIST;case IC_DIST:for(j=this.need;k<j;){if(0==n)return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}if(tindex=3*(this.tree_index+(b&inflate_mask[j])),b>>=this.tree[tindex+1],k-=this.tree[tindex+1],0!=(16&(e=this.tree[tindex]))){this.get=15&e,this.dist=this.tree[tindex+2],this.mode=IC_DISTEXT;break}if(0==(64&e)){this.need=e,this.tree_index=tindex/3+this.tree[tindex+2];break}return this.mode=IC_BADCODE,z.msg="invalid distance code",r=Z_DATA_ERROR,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);case IC_DISTEXT:for(j=this.get;k<j;){if(0==n)return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);r=Z_OK,n--,b|=(255&z.next_in[p++])<<k,k+=8}this.dist+=b&inflate_mask[j],b>>=j,k-=j,this.mode=IC_COPY;case IC_COPY:for(f=q-this.dist;f<0;)f+=s.end;for(;0!=this.len;){if(0==m&&(q==s.end&&0!=s.read&&(q=0,m=q<s.read?s.read-q-1:s.end-q),0==m&&(s.write=q,r=s.inflate_flush(z,r),q=s.write,m=q<s.read?s.read-q-1:s.end-q,q==s.end&&0!=s.read&&(q=0,m=q<s.read?s.read-q-1:s.end-q),0==m)))return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);s.window[q++]=s.window[f++],m--,f==s.end&&(f=0),this.len--}this.mode=IC_START;break;case IC_LIT:if(0==m&&(q==s.end&&0!=s.read&&(q=0,m=q<s.read?s.read-q-1:s.end-q),0==m&&(s.write=q,r=s.inflate_flush(z,r),q=s.write,m=q<s.read?s.read-q-1:s.end-q,q==s.end&&0!=s.read&&(q=0,m=q<s.read?s.read-q-1:s.end-q),0==m)))return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);r=Z_OK,s.window[q++]=this.lit,m--,this.mode=IC_START;break;case IC_WASH:if(k>7&&(k-=8,n++,p--),s.write=q,r=s.inflate_flush(z,r),q=s.write,m=q<s.read?s.read-q-1:s.end-q,s.read!=s.write)return s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);this.mode=IC_END;case IC_END:return r=Z_STREAM_END,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);case IC_BADCODE:return r=Z_DATA_ERROR,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r);default:return r=Z_STREAM_ERROR,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,s.inflate_flush(z,r)}},InfCodes.prototype.free=function(z){},InfCodes.prototype.inflate_fast=function(bl,bd,tl,tl_index,td,td_index,s,z){var t,tp,tp_index,e,b,k,p,n,q,m,ml,md,c,d,r,tp_index_t_3;p=z.next_in_index,n=z.avail_in,b=s.bitb,k=s.bitk,q=s.write,m=q<s.read?s.read-q-1:s.end-q,ml=inflate_mask[bl],md=inflate_mask[bd];do{for(;k<20;)n--,b|=(255&z.next_in[p++])<<k,k+=8;if(t=b&ml,tp=tl,tp_index=tl_index,tp_index_t_3=3*(tp_index+t),0!=(e=tp[tp_index_t_3]))for(;;){if(b>>=tp[tp_index_t_3+1],k-=tp[tp_index_t_3+1],0!=(16&e)){for(e&=15,c=tp[tp_index_t_3+2]+(b&inflate_mask[e]),b>>=e,k-=e;k<15;)n--,b|=(255&z.next_in[p++])<<k,k+=8;for(t=b&md,tp=td,tp_index=td_index,tp_index_t_3=3*(tp_index+t),e=tp[tp_index_t_3];;){if(b>>=tp[tp_index_t_3+1],k-=tp[tp_index_t_3+1],0!=(16&e)){for(e&=15;k<e;)n--,b|=(255&z.next_in[p++])<<k,k+=8;if(d=tp[tp_index_t_3+2]+(b&inflate_mask[e]),b>>=e,k-=e,m-=c,q>=d)r=q-d,s.window[q++]=s.window[r++],s.window[q++]=s.window[r++],c-=2;else{r=q-d;do{r+=s.end}while(r<0);if(e=s.end-r,c>e){if(c-=e,q-r>0&&e>q-r)do{s.window[q++]=s.window[r++]}while(0!=--e);else arrayCopy(s.window,r,s.window,q,e),q+=e,r+=e,e=0;r=0}}do{s.window[q++]=s.window[r++]}while(0!=--c);break}if(0!=(64&e))return z.msg="invalid distance code",c=z.avail_in-n,c=k>>3<c?k>>3:c,n+=c,p-=c,k-=c<<3,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,Z_DATA_ERROR;t+=tp[tp_index_t_3+2],t+=b&inflate_mask[e],tp_index_t_3=3*(tp_index+t),e=tp[tp_index_t_3]}break}if(0!=(64&e))return 0!=(32&e)?(c=z.avail_in-n,c=k>>3<c?k>>3:c,n+=c,p-=c,k-=c<<3,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,Z_STREAM_END):(z.msg="invalid literal/length code",c=z.avail_in-n,c=k>>3<c?k>>3:c,n+=c,p-=c,k-=c<<3,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,Z_DATA_ERROR);if(t+=tp[tp_index_t_3+2],t+=b&inflate_mask[e],tp_index_t_3=3*(tp_index+t),0==(e=tp[tp_index_t_3])){b>>=tp[tp_index_t_3+1],k-=tp[tp_index_t_3+1],s.window[q++]=tp[tp_index_t_3+2],m--;break}}else b>>=tp[tp_index_t_3+1],k-=tp[tp_index_t_3+1],s.window[q++]=tp[tp_index_t_3+2],m--}while(m>=258&&n>=10);return c=z.avail_in-n,c=k>>3<c?k>>3:c,n+=c,p-=c,k-=c<<3,s.bitb=b,s.bitk=k,z.avail_in=n,z.total_in+=p-z.next_in_index,z.next_in_index=p,s.write=q,Z_OK},InfTree.prototype.huft_build=function(b,bindex,n,s,d,e,t,m,hp,hn,v){var a,f,g,h,i,j,k,l,mask,p,q,w,xp,y,z;p=0,i=n;do{this.c[b[bindex+p]]++,p++,i--}while(0!=i);if(this.c[0]==n)return t[0]=-1,m[0]=0,Z_OK;for(l=m[0],j=1;j<=BMAX&&0==this.c[j];j++);for(k=j,l<j&&(l=j),i=BMAX;0!=i&&0==this.c[i];i--);for(g=i,l>i&&(l=i),m[0]=l,y=1<<j;j<i;j++,y<<=1)if((y-=this.c[j])<0)return Z_DATA_ERROR;if((y-=this.c[i])<0)return Z_DATA_ERROR;for(this.c[i]+=y,this.x[1]=j=0,p=1,xp=2;0!=--i;)this.x[xp]=j+=this.c[p],xp++,p++;i=0,p=0;do{0!=(j=b[bindex+p])&&(this.v[this.x[j]++]=i),p++}while(++i<n);for(n=this.x[g],this.x[0]=i=0,p=0,h=-1,w=-l,this.u[0]=0,q=0,z=0;k<=g;k++)for(a=this.c[k];0!=a--;){for(;k>w+l;){if(h++,w+=l,z=g-w,z=z>l?l:z,(f=1<<(j=k-w))>a+1&&(f-=a+1,xp=k,j<z))for(;++j<z&&!((f<<=1)<=this.c[++xp]);)f-=this.c[xp];if(z=1<<j,this.hn[0]+z>MANY)return Z_DATA_ERROR;this.u[h]=q=this.hn[0],this.hn[0]+=z,0!=h?(this.x[h]=i,this.r[0]=j,this.r[1]=l,j=i>>>w-l,this.r[2]=q-this.u[h-1]-j,arrayCopy(this.r,0,hp,3*(this.u[h-1]+j),3)):t[0]=q}for(this.r[1]=k-w,p>=n?this.r[0]=192:v[p]<s?(this.r[0]=this.v[p]<256?0:96,this.r[2]=this.v[p++]):(this.r[0]=e[this.v[p]-s]+16+64,this.r[2]=d[this.v[p++]-s]),f=1<<k-w,j=i>>>w;j<z;j+=f)arrayCopy(this.r,0,hp,3*(q+j),3);for(j=1<<k-1;0!=(i&j);j>>>=1)i^=j;for(i^=j,mask=(1<<w)-1;(i&mask)!=this.x[h];)h--,w-=l,mask=(1<<w)-1}return 0!=y&&1!=g?Z_BUF_ERROR:Z_OK},InfTree.prototype.inflate_trees_bits=function(c,bb,tb,hp,z){var result;return this.initWorkArea(19),this.hn[0]=0,result=this.huft_build(c,0,19,19,null,null,tb,bb,hp,this.hn,this.v),result==Z_DATA_ERROR?z.msg="oversubscribed dynamic bit lengths tree":result!=Z_BUF_ERROR&&0!=bb[0]||(z.msg="incomplete dynamic bit lengths tree",result=Z_DATA_ERROR),result},InfTree.prototype.inflate_trees_dynamic=function(nl,nd,c,bl,bd,tl,td,hp,z){var result;return this.initWorkArea(288),this.hn[0]=0,(result=this.huft_build(c,0,nl,257,cplens,cplext,tl,bl,hp,this.hn,this.v))!=Z_OK||0==bl[0]?(result==Z_DATA_ERROR?z.msg="oversubscribed literal/length tree":result!=Z_MEM_ERROR&&(z.msg="incomplete literal/length tree",result=Z_DATA_ERROR),result):(this.initWorkArea(288),result=this.huft_build(c,nl,nd,0,cpdist,cpdext,td,bd,hp,this.hn,this.v),result!=Z_OK||0==bd[0]&&nl>257?(result==Z_DATA_ERROR?z.msg="oversubscribed distance tree":result==Z_BUF_ERROR?(z.msg="incomplete distance tree",result=Z_DATA_ERROR):result!=Z_MEM_ERROR&&(z.msg="empty distance tree with lengths",result=Z_DATA_ERROR),result):Z_OK)},InfTree.prototype.initWorkArea=function(vsize){null==this.hn&&(this.hn=new Int32Array(1),this.v=new Int32Array(vsize),this.c=new Int32Array(BMAX+1),this.r=new Int32Array(3),this.u=new Int32Array(BMAX),this.x=new Int32Array(BMAX+1)),this.v.length<vsize&&(this.v=new Int32Array(vsize));for(var i=0;i<vsize;i++)this.v[i]=0;for(var i=0;i<BMAX+1;i++)this.c[i]=0;for(var i=0;i<3;i++)this.r[i]=0;arrayCopy(this.c,0,this.u,0,BMAX),arrayCopy(this.c,0,this.x,0,BMAX+1)};var testArray=new Uint8Array(1),hasSubarray="function"==typeof testArray.subarray;!function(factory){factory(jQuery)}(function($){function handler(event){var orgEvent=event||window.event,args=slice.call(arguments,1),delta=0,deltaX=0,deltaY=0,absDelta=0,offsetX=0,offsetY=0;if(event=$.event.fix(orgEvent),event.type="mousewheel","detail"in orgEvent&&(deltaY=-1*orgEvent.detail),"wheelDelta"in orgEvent&&(deltaY=orgEvent.wheelDelta),"wheelDeltaY"in orgEvent&&(deltaY=orgEvent.wheelDeltaY),"wheelDeltaX"in orgEvent&&(deltaX=-1*orgEvent.wheelDeltaX),"axis"in orgEvent&&orgEvent.axis===orgEvent.HORIZONTAL_AXIS&&(deltaX=-1*deltaY,deltaY=0),delta=0===deltaY?deltaX:deltaY,"deltaY"in orgEvent&&(deltaY=-1*orgEvent.deltaY,delta=deltaY),"deltaX"in orgEvent&&(deltaX=orgEvent.deltaX,0===deltaY&&(delta=-1*deltaX)),0!==deltaY||0!==deltaX){if(1===orgEvent.deltaMode){var lineHeight=$.data(this,"mousewheel-line-height");delta*=lineHeight,deltaY*=lineHeight,deltaX*=lineHeight}else if(2===orgEvent.deltaMode){var pageHeight=$.data(this,"mousewheel-page-height");delta*=pageHeight,deltaY*=pageHeight,deltaX*=pageHeight}if(absDelta=Math.max(Math.abs(deltaY),Math.abs(deltaX)),(!lowestDelta||absDelta<lowestDelta)&&(lowestDelta=absDelta,shouldAdjustOldDeltas(orgEvent,absDelta)&&(lowestDelta/=40)),shouldAdjustOldDeltas(orgEvent,absDelta)&&(delta/=40,deltaX/=40,deltaY/=40),delta=Math[delta>=1?"floor":"ceil"](delta/lowestDelta),deltaX=Math[deltaX>=1?"floor":"ceil"](deltaX/lowestDelta),deltaY=Math[deltaY>=1?"floor":"ceil"](deltaY/lowestDelta),special.settings.normalizeOffset&&this.getBoundingClientRect){var boundingRect=this.getBoundingClientRect();offsetX=event.clientX-boundingRect.left,offsetY=event.clientY-boundingRect.top}return event.deltaX=deltaX,event.deltaY=deltaY,event.deltaFactor=lowestDelta,event.offsetX=offsetX,event.offsetY=offsetY,event.deltaMode=0,args.unshift(event,delta,deltaX,deltaY),nullLowestDeltaTimeout&&clearTimeout(nullLowestDeltaTimeout),nullLowestDeltaTimeout=setTimeout(nullLowestDelta,200),($.event.dispatch||$.event.handle).apply(this,args)}}function nullLowestDelta(){lowestDelta=null}function shouldAdjustOldDeltas(orgEvent,absDelta){return special.settings.adjustOldDeltas&&"mousewheel"===orgEvent.type&&absDelta%120==0}var nullLowestDeltaTimeout,lowestDelta,toFix=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],toBind="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],slice=Array.prototype.slice;if($.event.fixHooks)for(var i=toFix.length;i;)$.event.fixHooks[toFix[--i]]=$.event.mouseHooks;var special=$.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var i=toBind.length;i;)this.addEventListener(toBind[--i],handler,!1);else this.onmousewheel=handler;$.data(this,"mousewheel-line-height",special.getLineHeight(this)),$.data(this,"mousewheel-page-height",special.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var i=toBind.length;i;)this.removeEventListener(toBind[--i],handler,!1);else this.onmousewheel=null;$.removeData(this,"mousewheel-line-height"),$.removeData(this,"mousewheel-page-height")},getLineHeight:function(elem){var $elem=$(elem),$parent=$elem["offsetParent"in $.fn?"offsetParent":"parent"]();return $parent.length||($parent=$("body")),parseInt($parent.css("fontSize"),10)||parseInt($elem.css("fontSize"),10)||16},getPageHeight:function(elem){return $(elem).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel")},unmousewheel:function(fn){return this.unbind("mousewheel",fn)}})}),function(global){function isArray(value){return"[object Array]"===Object.prototype.toString.call(value)}function asyncFlush(){for(var i=0;i<asyncQueue.length;i++)asyncQueue[i][0](asyncQueue[i][1]);asyncQueue=[],asyncTimer=!1}function asyncCall(callback,arg){asyncQueue.push([callback,arg]),asyncTimer||(asyncTimer=!0,asyncSetTimer(asyncFlush,0))}function invokeResolver(resolver,promise){function resolvePromise(value){resolve(promise,value)}function rejectPromise(reason){reject(promise,reason)}try{resolver(resolvePromise,rejectPromise)}catch(e){rejectPromise(e)}}function invokeCallback(subscriber){var owner=subscriber.owner,settled=owner.state_,value=owner.data_,callback=subscriber[settled],promise=subscriber.then;if("function"==typeof callback){settled=FULFILLED;try{value=callback(value)}catch(e){reject(promise,e)}}handleThenable(promise,value)||(settled===FULFILLED&&resolve(promise,value),settled===REJECTED&&reject(promise,value))}function handleThenable(promise,value){var resolved;try{if(promise===value)throw new TypeError("A promises callback cannot return that same promise.");if(value&&("function"==typeof value||"object"==typeof value)){var then=value.then;if("function"==typeof then)return then.call(value,function(val){resolved||(resolved=!0,value!==val?resolve(promise,val):fulfill(promise,val))},function(reason){resolved||(resolved=!0,reject(promise,reason))}),!0}}catch(e){return resolved||reject(promise,e),!0}return!1}function resolve(promise,value){promise!==value&&handleThenable(promise,value)||fulfill(promise,value)}function fulfill(promise,value){promise.state_===PENDING&&(promise.state_=SEALED,promise.data_=value,asyncCall(publishFulfillment,promise))}function reject(promise,reason){promise.state_===PENDING&&(promise.state_=SEALED,promise.data_=reason,asyncCall(publishRejection,promise))}function publish(promise){var callbacks=promise.then_;promise.then_=void 0;for(var i=0;i<callbacks.length;i++)invokeCallback(callbacks[i])}function publishFulfillment(promise){promise.state_=FULFILLED,publish(promise)}function publishRejection(promise){promise.state_=REJECTED,publish(promise)}function Promise(resolver){if("function"!=typeof resolver)throw new TypeError("Promise constructor takes a function argument");if(this instanceof Promise==!1)throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this.then_=[],invokeResolver(resolver,this)}var NativePromise=global.Promise;NativePromise&&"resolve"in NativePromise&&"reject"in NativePromise&&"all"in NativePromise&&"race"in NativePromise&&function(){var resolve;return new NativePromise(function(r){resolve=r}),"function"==typeof resolve}()||(global.Promise=Promise);var asyncTimer,PENDING="pending",SEALED="sealed",FULFILLED="fulfilled",REJECTED="rejected",NOOP=function(){},asyncSetTimer="undefined"!=typeof setImmediate?setImmediate:setTimeout,asyncQueue=[];Promise.prototype={constructor:Promise,state_:PENDING,then_:null,data_:void 0,then:function(onFulfillment,onRejection){var subscriber={owner:this,then:new this.constructor(NOOP),fulfilled:onFulfillment,rejected:onRejection};return this.state_===FULFILLED||this.state_===REJECTED?asyncCall(invokeCallback,subscriber):this.then_.push(subscriber),subscriber.then},catch:function(onRejection){return this.then(null,onRejection)}},Promise.all=function(promises){var Class=this;if(!isArray(promises))throw new TypeError("You must pass an array to Promise.all().");return new Class(function(resolve,reject){function resolver(index){return remaining++,function(value){results[index]=value,--remaining||resolve(results)}}for(var promise,results=[],remaining=0,i=0;i<promises.length;i++)promise=promises[i],promise&&"function"==typeof promise.then?promise.then(resolver(i),reject):results[i]=promise;remaining||resolve(results)})},Promise.race=function(promises){var Class=this;if(!isArray(promises))throw new TypeError("You must pass an array to Promise.race().");return new Class(function(resolve,reject){for(var promise,i=0;i<promises.length;i++)promise=promises[i],promise&&"function"==typeof promise.then?promise.then(resolve,reject):resolve(promise)})},Promise.resolve=function(value){var Class=this;return value&&"object"==typeof value&&value.constructor===Class?value:new Class(function(resolve){resolve(value)})},Promise.reject=function(reason){return new this(function(resolve,reject){reject(reason)})}}("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this),TreeBase.prototype.clear=function(){this._root=null,this.size=0},TreeBase.prototype.find=function(data){for(var res=this._root;null!==res;){var c=this._comparator(data,res.data);if(0===c)return res.data;res=res.get_child(c>0)}return null},TreeBase.prototype.findIter=function(data){for(var res=this._root,iter=this.iterator();null!==res;){var c=this._comparator(data,res.data);if(0===c)return iter._cursor=res,iter;iter._ancestors.push(res),res=res.get_child(c>0)}return null},TreeBase.prototype.lowerBound=function(item){for(var cur=this._root,iter=this.iterator(),cmp=this._comparator;null!==cur;){var c=cmp(item,cur.data);if(0===c)return iter._cursor=cur,iter;iter._ancestors.push(cur),cur=cur.get_child(c>0)}for(var i=iter._ancestors.length-1;i>=0;--i)if(cur=iter._ancestors[i],cmp(item,cur.data)<0)return iter._cursor=cur,iter._ancestors.length=i,iter;return iter._ancestors.length=0,iter},TreeBase.prototype.upperBound=function(item){for(var iter=this.lowerBound(item),cmp=this._comparator;null!==iter.data()&&0===cmp(iter.data(),item);)iter.next();return iter},TreeBase.prototype.min=function(){var res=this._root;if(null===res)return null;for(;null!==res.left;)res=res.left;return res.data},TreeBase.prototype.max=function(){var res=this._root;if(null===res)return null;for(;null!==res.right;)res=res.right;return res.data},TreeBase.prototype.iterator=function(){return new Iterator(this)},TreeBase.prototype.each=function(cb){for(var data,it=this.iterator();null!==(data=it.next());)cb(data)},TreeBase.prototype.reach=function(cb){for(var data,it=this.iterator();null!==(data=it.prev());)cb(data)},Iterator.prototype.data=function(){return null!==this._cursor?this._cursor.data:null},Iterator.prototype.next=function(){if(null===this._cursor){var root=this._tree._root;null!==root&&this._minNode(root)}else if(null===this._cursor.right){var save;do{if(save=this._cursor,!this._ancestors.length){this._cursor=null;break}this._cursor=this._ancestors.pop()}while(this._cursor.right===save)}else this._ancestors.push(this._cursor),this._minNode(this._cursor.right);return null!==this._cursor?this._cursor.data:null},Iterator.prototype.prev=function(){if(null===this._cursor){var root=this._tree._root;null!==root&&this._maxNode(root)}else if(null===this._cursor.left){var save;do{if(save=this._cursor,!this._ancestors.length){this._cursor=null;break}this._cursor=this._ancestors.pop()}while(this._cursor.left===save)}else this._ancestors.push(this._cursor),this._maxNode(this._cursor.left);return null!==this._cursor?this._cursor.data:null},Iterator.prototype._minNode=function(start){for(;null!==start.left;)this._ancestors.push(start),start=start.left;this._cursor=start},Iterator.prototype._maxNode=function(start){for(;null!==start.right;)this._ancestors.push(start),start=start.right;this._cursor=start},Node.prototype.get_child=function(dir){return dir?this.right:this.left},Node.prototype.set_child=function(dir,val){dir?this.right=val:this.left=val},RBTree.prototype=new TreeBase,RBTree.prototype.insert=function(data){var ret=!1;if(null===this._root)this._root=new Node(data),ret=!0,this.size++;else{var head=new Node(void 0),dir=0,last=0,gp=null,ggp=head,p=null,node=this._root;for(ggp.right=this._root;;){if(null===node?(node=new Node(data),p.set_child(dir,node),ret=!0,this.size++):is_red(node.left)&&is_red(node.right)&&(node.red=!0,node.left.red=!1,node.right.red=!1),is_red(node)&&is_red(p)){var dir2=ggp.right===gp;node===p.get_child(last)?ggp.set_child(dir2,single_rotate(gp,!last)):ggp.set_child(dir2,double_rotate(gp,!last))}var cmp=this._comparator(node.data,data);if(0===cmp)break;last=dir,dir=cmp<0,null!==gp&&(ggp=gp),gp=p,p=node,node=node.get_child(dir)}this._root=head.right}return this._root.red=!1,ret},RBTree.prototype.remove=function(data){if(null===this._root)return!1;var head=new Node(void 0),node=head;node.right=this._root;for(var p=null,gp=null,found=null,dir=1;null!==node.get_child(dir);){var last=dir;gp=p,p=node,node=node.get_child(dir);var cmp=this._comparator(data,node.data);if(dir=cmp>0,0===cmp&&(found=node),!is_red(node)&&!is_red(node.get_child(dir)))if(is_red(node.get_child(!dir))){var sr=single_rotate(node,dir);p.set_child(last,sr),p=sr}else if(!is_red(node.get_child(!dir))){var sibling=p.get_child(!last);if(null!==sibling)if(is_red(sibling.get_child(!last))||is_red(sibling.get_child(last))){var dir2=gp.right===p;is_red(sibling.get_child(last))?gp.set_child(dir2,double_rotate(p,last)):is_red(sibling.get_child(!last))&&gp.set_child(dir2,single_rotate(p,last));var gpc=gp.get_child(dir2);gpc.red=!0,node.red=!0,gpc.left.red=!1,gpc.right.red=!1}else p.red=!1,sibling.red=!0,node.red=!0}}return null!==found&&(found.data=node.data,p.set_child(p.right===node,node.get_child(null===node.left)),this.size--),this._root=head.right,null!==this._root&&(this._root.red=!1),null!==found},TDigest.prototype.reset=function(){this.centroids.clear(),this.n=0,this.nreset+=1,this.last_cumulate=0},TDigest.prototype.size=function(){return this.centroids.size},TDigest.prototype.toArray=function(everything){var result=[];return everything?(this._cumulate(!0),this.centroids.each(function(c){result.push(c)})):this.centroids.each(function(c){result.push({mean:c.mean,n:c.n})}),result},TDigest.prototype.summary=function(){return[(this.discrete?"exact ":"approximating ")+this.n+" samples using "+this.size()+" centroids","min = "+this.percentile(0),"Q1 = "+this.percentile(.25),"Q2 = "+this.percentile(.5),"Q3 = "+this.percentile(.75),"max = "+this.percentile(1)].join("\n")},TDigest.prototype.push=function(x,n){n=n||1,x=Array.isArray(x)?x:[x];for(var i=0;i<x.length;i++)this._digest(x[i],n)},TDigest.prototype.push_centroid=function(c){c=Array.isArray(c)?c:[c];for(var i=0;i<c.length;i++)this._digest(c[i].mean,c[i].n)},TDigest.prototype._cumulate=function(exact){if(!(this.n===this.last_cumulate||!exact&&this.CX&&this.CX>this.n/this.last_cumulate)){var cumn=0;this.centroids.each(function(c){c.mean_cumn=cumn+c.n/2,cumn=c.cumn=cumn+c.n}),this.n=this.last_cumulate=cumn}},TDigest.prototype.find_nearest=function(x){if(0===this.size())return null;var iter=this.centroids.lowerBound({mean:x}),c=null===iter.data()?iter.prev():iter.data();if(c.mean===x||this.discrete)return c;var prev=iter.prev();return prev&&Math.abs(prev.mean-x)<Math.abs(c.mean-x)?prev:c},TDigest.prototype._new_centroid=function(x,n,cumn){var c={mean:x,n:n,cumn:cumn};return this.centroids.insert(c),this.n+=n,c},TDigest.prototype._addweight=function(nearest,x,n){x!==nearest.mean&&(nearest.mean+=n*(x-nearest.mean)/(nearest.n+n)),nearest.cumn+=n,nearest.mean_cumn+=n/2,nearest.n+=n,this.n+=n},TDigest.prototype._digest=function(x,n){var min=this.centroids.min(),max=this.centroids.max(),nearest=this.find_nearest(x);if(nearest&&nearest.mean===x)this._addweight(nearest,x,n);else if(nearest===min)this._new_centroid(x,n,0);else if(nearest===max)this._new_centroid(x,n,this.n);else if(this.discrete)this._new_centroid(x,n,nearest.cumn);else{var p=nearest.mean_cumn/this.n,max_n=Math.floor(4*this.n*this.delta*p*(1-p));max_n-nearest.n>=n?this._addweight(nearest,x,n):this._new_centroid(x,n,nearest.cumn)}this._cumulate(!1),!this.discrete&&this.K&&this.size()>this.K/this.delta&&this.compress()},TDigest.prototype.bound_mean=function(x){var iter=this.centroids.upperBound({mean:x}),lower=iter.prev();return[lower,lower.mean===x?lower:iter.next()]},TDigest.prototype.p_rank=function(x_or_xlist){var xs=Array.isArray(x_or_xlist)?x_or_xlist:[x_or_xlist],ps=xs.map(this._p_rank,this);return Array.isArray(x_or_xlist)?ps:ps[0]},TDigest.prototype._p_rank=function(x){if(0!==this.size()){if(x<this.centroids.min().mean)return 0;if(x>this.centroids.max().mean)return 1;this._cumulate(!0);var bound=this.bound_mean(x),lower=bound[0],upper=bound[1];if(this.discrete)return lower.cumn/this.n;var cumn=lower.mean_cumn;return lower!==upper&&(cumn+=(x-lower.mean)*(upper.mean_cumn-lower.mean_cumn)/(upper.mean-lower.mean)),cumn/this.n}},TDigest.prototype.bound_mean_cumn=function(cumn){this.centroids._comparator=compare_centroid_mean_cumns;var iter=this.centroids.upperBound({mean_cumn:cumn});this.centroids._comparator=compare_centroid_means;var lower=iter.prev();return[lower,lower&&lower.mean_cumn===cumn?lower:iter.next()]},TDigest.prototype.percentile=function(p_or_plist){var ps=Array.isArray(p_or_plist)?p_or_plist:[p_or_plist],qs=ps.map(this._percentile,this);return Array.isArray(p_or_plist)?qs:qs[0]},TDigest.prototype._percentile=function(p){if(0!==this.size()){this._cumulate(!0);var h=this.n*p,bound=this.bound_mean_cumn(h),lower=bound[0],upper=bound[1];return upper===lower||null===lower||null===upper?(lower||upper).mean:this.discrete?h<=lower.cumn?lower.mean:upper.mean:lower.mean+(h-lower.mean_cumn)*(upper.mean-lower.mean)/(upper.mean_cumn-lower.mean_cumn)}},TDigest.prototype.compress=function(){if(!this.compressing){var points=this.toArray();for(this.reset(),this.compressing=!0;points.length>0;)this.push_centroid(pop_random(points));this._cumulate(!0),this.compressing=!1}},Digest.prototype=Object.create(TDigest.prototype),Digest.prototype.constructor=Digest,Digest.prototype.push=function(x_or_xlist){TDigest.prototype.push.call(this,x_or_xlist),this.check_continuous()},Digest.prototype._new_centroid=function(x,n,cumn){this.n_unique+=1,TDigest.prototype._new_centroid.call(this,x,n,cumn)},Digest.prototype._addweight=function(nearest,x,n){1===nearest.n&&(this.n_unique-=1),TDigest.prototype._addweight.call(this,nearest,x,n)},Digest.prototype.check_continuous=function(){return!("auto"!==this.mode||this.size()<this.digest_thresh)&&(this.n_unique/this.size()>this.digest_ratio&&(this.mode="cont",this.discrete=!1,this.delta=this.config.delta||.01,this.compress(),!0))};var igv=function(igv){function canBePaired(alignment){return alignment.isPaired()&&alignment.mate&&alignment.isMateMapped()&&alignment.chr===alignment.mate.chr&&(alignment.isFirstOfPair()||alignment.isSecondOfPair())&&!(alignment.isSecondary()||alignment.isSupplementary())}function finishBucket(){this.alignments=this.alignments.concat(this.currentBucket.alignments),this.currentBucket.downsampledCount>0&&this.downsampledIntervals.push(new DownsampledInterval(this.currentBucket.start,this.currentBucket.end,this.currentBucket.downsampledCount)),this.paired=this.paired||this.currentBucket.paired}function DownsampleBucket(start,end,alignmentContainer){this.start=start,this.end=end,this.alignments=[],this.downsampledCount=0,this.samplingDepth=alignmentContainer.samplingDepth,this.pairsSupported=alignmentContainer.pairsSupported,this.downsampledReads=alignmentContainer.downsampledReads,this.pairsCache=alignmentContainer.pairsCache}function CoverageMap(chr,start,end){this.chr=chr,this.bpStart=start,this.length=end-start,this.coverage=new Array(this.length),this.maximum=0,this.threshold=.2,this.qualityWeight=!0}function Coverage(){this.posA=0,this.negA=0,this.posT=0,this.negT=0,this.posC=0,this.negC=0,this.posG=0,this.negG=0,this.posN=0,this.negN=0,this.pos=0,this.neg=0,this.qualA=0,this.qualT=0,this.qualC=0,this.qualG=0,this.qualN=0,this.qual=0,this.total=0}function DownsampledInterval(start,end,counts){this.start=start,this.end=end,this.counts=counts}function PairedEndStats(lowerPercentile,upperPercentile){this.totalCount=0,this.frCount=0,this.rfCount=0,this.ffCount=0,this.sumF=0,this.sumF2=0}return igv.AlignmentContainer=function(chr,start,end,samplingWindowSize,samplingDepth,pairsSupported){this.chr=chr,this.start=Math.floor(start),this.end=Math.ceil(end),this.length=end-start,this.coverageMap=new CoverageMap(chr,start,end),this.alignments=[],this.downsampledIntervals=[],this.samplingWindowSize=void 0===samplingWindowSize?100:samplingWindowSize,this.samplingDepth=void 0===samplingDepth?50:samplingDepth,this.pairsSupported=void 0===pairsSupported||pairsSupported,this.paired=!1,this.pairsCache={},this.downsampledReads=new Set,this.currentBucket=new DownsampleBucket(this.start,this.start+this.samplingWindowSize,this),this.filter=function(alignment){return alignment.isMapped()&&!alignment.isFailsVendorQualityCheck()},this.pairedEndStats=new PairedEndStats},igv.AlignmentContainer.prototype.push=function(alignment){!1!==this.filter(alignment)&&(alignment.isPaired()&&this.pairedEndStats.push(alignment),this.coverageMap.incCounts(alignment),this.pairsSupported&&this.downsampledReads.has(alignment.readName)||(alignment.start>=this.currentBucket.end&&(finishBucket.call(this),this.currentBucket=new DownsampleBucket(alignment.start,alignment.start+this.samplingWindowSize,this)),this.currentBucket.addAlignment(alignment)))},igv.AlignmentContainer.prototype.forEach=function(callback){this.alignments.forEach(callback)},igv.AlignmentContainer.prototype.finish=function(){if(void 0!==this.currentBucket&&finishBucket.call(this),this.pairsSupported){var tmp=[],ds=this.downsampledReads;this.alignments.forEach(function(a){ds.has(a.readName)||tmp.push(a)}),this.alignments=tmp}this.alignments.sort(function(a,b){return a.start-b.start}),this.pairsCache=void 0,this.downsampledReads=void 0,this.pairedEndStats.compute()},igv.AlignmentContainer.prototype.contains=function(chr,start,end){return this.chr==chr&&this.start<=start&&this.end>=end},igv.AlignmentContainer.prototype.hasDownsampledIntervals=function(){return this.downsampledIntervals&&this.downsampledIntervals.length>0},DownsampleBucket.prototype.addAlignment=function(alignment){var samplingProb,idx,replacedAlignment,pairedAlignment;this.alignments.length<this.samplingDepth?this.pairsSupported&&canBePaired(alignment)?(pairedAlignment=this.pairsCache[alignment.readName],pairedAlignment?(pairedAlignment.setSecondAlignment(alignment),this.pairsCache[alignment.readName]=void 0):(pairedAlignment=new igv.PairedAlignment(alignment),this.paired=!0,this.pairsCache[alignment.readName]=pairedAlignment,this.alignments.push(pairedAlignment))):this.alignments.push(alignment):(samplingProb=this.samplingDepth/(this.samplingDepth+this.downsampledCount+1),Math.random()<samplingProb?(idx=Math.floor(Math.random()*(this.alignments.length-1)),replacedAlignment=this.alignments[idx],this.pairsSupported&&canBePaired(alignment)?(void 0!==this.pairsCache[replacedAlignment.readName]&&(this.pairsCache[replacedAlignment.readName]=void 0),pairedAlignment=new igv.PairedAlignment(alignment),this.paired=!0,this.pairsCache[alignment.readName]=pairedAlignment,this.alignments[idx]=pairedAlignment):this.alignments[idx]=alignment,this.downsampledReads.add(replacedAlignment.readName)):this.downsampledReads.add(alignment.readName),this.downsampledCount++)},CoverageMap.prototype.incCounts=function(alignment){function incBlockCount(block){var key,base,i,j,q;for(i=block.start-self.bpStart,j=0;j<block.len;i++,j++)self.coverage[i]||(self.coverage[i]=new Coverage),base=block.seq.charAt(j),key=alignment.strand?"pos"+base:"neg"+base,q=block.qual[j],self.coverage[i][key]+=1,self.coverage[i]["qual"+base]+=q,self.coverage[i].total+=1,self.coverage[i].qual+=q,self.maximum=Math.max(self.coverage[i].total,self.maximum)}var self=this;void 0===alignment.blocks?incBlockCount(alignment):alignment.blocks.forEach(function(block){incBlockCount(block)})},Coverage.prototype.isMismatch=function(refBase){var mismatchQualitySum,myself=this,threshold=igv.CoverageMap.threshold*(igv.CoverageMap.qualityWeight&&this.qual?this.qual:this.total);return mismatchQualitySum=0,["A","T","C","G"].forEach(function(base){base!==refBase&&(mismatchQualitySum+=igv.CoverageMap.qualityWeight&&myself.qual?myself["qual"+base]:myself["pos"+base]+myself["neg"+base])}),mismatchQualitySum>=threshold},DownsampledInterval.prototype.popupData=function(genomicLocation){return[{name:"start",value:this.start+1},{name:"end",value:this.end},{name:"# downsampled:",value:this.counts}]},PairedEndStats.prototype.push=function(alignment){if(alignment.isProperPair()){var fragmentLength=Math.abs(alignment.fragmentLength);this.sumF+=fragmentLength,this.sumF2+=fragmentLength*fragmentLength;var po=alignment.pairOrientation;if("string"==typeof po&&4==po.length){switch(""+po.charAt(0)+po.charAt(2)){case"FF":case"RR":this.ffCount++;break;case"FR":this.frCount++;break;case"RF":this.rfCount++}}this.totalCount++}},PairedEndStats.prototype.compute=function(){if(this.totalCount>100){this.ffCount/this.totalCount>.9?this.orienation="ff":this.frCount/this.totalCount>.9?this.orienation="fr":this.rfCount/this.totalCount>.9&&(this.orienation="rf");var fMean=this.sumF/this.totalCount,stdDev=Math.sqrt((this.totalCount*this.sumF2-this.sumF*this.sumF)/(this.totalCount*this.totalCount));this.lowerFragmentLength=fMean-3*stdDev,this.upperFragmentLength=fMean+3*stdDev}},igv}(igv||{}),igv=function(igv){function readInt(ba,offset){return ba[offset+3]<<24|ba[offset+2]<<16|ba[offset+1]<<8|ba[offset]}function readShort(ba,offset){return ba[offset+1]<<8|ba[offset]}function readFloat(ba,offset){return new DataView(ba.buffer).getFloat32(offset,!0)}return igv.BamAlignment=function(){this.hidden=!1},igv.BamAlignment.prototype.isMapped=function(){return 0==(4&this.flags)},igv.BamAlignment.prototype.isPaired=function(){return 0!=(1&this.flags)},igv.BamAlignment.prototype.isProperPair=function(){return 0!=(2&this.flags)},igv.BamAlignment.prototype.isFirstOfPair=function(){return 0!=(64&this.flags)},igv.BamAlignment.prototype.isSecondOfPair=function(){return 0!=(128&this.flags)},igv.BamAlignment.prototype.isSecondary=function(){return 0!=(256&this.flags)},igv.BamAlignment.prototype.isSupplementary=function(){return 0!=(2048&this.flags)},igv.BamAlignment.prototype.isFailsVendorQualityCheck=function(){return 0!=(512&this.flags)},igv.BamAlignment.prototype.isDuplicate=function(){return 0!=(1024&this.flags)},igv.BamAlignment.prototype.isMateMapped=function(){return 0==(8&this.flags)},igv.BamAlignment.prototype.isNegativeStrand=function(){return 0!=(16&this.flags)},igv.BamAlignment.prototype.isMateNegativeStrand=function(){return 0!=(32&this.flags)},igv.BamAlignment.prototype.tags=function(){function decodeTags(ba){for(var p=0,len=ba.length,tags={};p<len;){var value,tag=String.fromCharCode(ba[p])+String.fromCharCode(ba[p+1]),type=String.fromCharCode(ba[p+2]);if("A"==type)value=String.fromCharCode(ba[p+3]),p+=4;else if("i"===type||"I"===type)value=readInt(ba,p+3),p+=7;else if("c"===type||"C"===type)value=ba[p+3],p+=4;else if("s"===type||"S"===type)value=readShort(ba,p+3),p+=5;else if("f"===type)value=readFloat(ba,p+3),p+=7;else{if("Z"!==type){value="Error unknown type: "+type,tags[tag]=value;break}for(p+=3,value="";;){var cc=ba[p++];if(0===cc)break;value+=String.fromCharCode(cc)}}tags[tag]=value}return tags}return this.tagDict||(this.tagBA?(this.tagDict=decodeTags(this.tagBA),this.tagBA=void 0):this.tagDict={}),this.tagDict},igv.BamAlignment.prototype.popupData=function(genomicLocation){function yesNo(bool){return bool?"Yes":"No"}var isFirst,tagDict,nameValues=[];if(this.insertions)for(var i=0;i<this.insertions.length;i+=1){var ins_start=this.insertions[i].start;if(genomicLocation==ins_start||genomicLocation==ins_start-1)return nameValues.push({name:"Insertion",value:this.insertions[i].seq}),nameValues.push({name:"Location",value:ins_start}),nameValues}nameValues.push({name:"Read Name",value:this.readName}),nameValues.push("<hr>"),nameValues.push({name:"Alignment Start",value:igv.numberFormatter(1+this.start),borderTop:!0}),nameValues.push({name:"Read Strand",value:!0===this.strand?"(+)":"(-)",borderTop:!0}),nameValues.push({name:"Cigar",value:this.cigar}),nameValues.push({name:"Mapped",value:yesNo(this.isMapped())}),nameValues.push({name:"Mapping Quality",value:this.mq}),nameValues.push({name:"Secondary",value:yesNo(this.isSecondary())}),nameValues.push({name:"Supplementary",value:yesNo(this.isSupplementary())}),nameValues.push({name:"Duplicate",value:yesNo(this.isDuplicate())}),nameValues.push({name:"Failed QC",value:yesNo(this.isFailsVendorQualityCheck())}),this.isPaired()&&(nameValues.push("<hr>"),nameValues.push({name:"First in Pair",value:!this.isSecondOfPair(),borderTop:!0}),nameValues.push({name:"Mate is Mapped",value:yesNo(this.isMateMapped())}),this.pairOrientation&&nameValues.push({name:"Pair Orientation",value:this.pairOrientation}),this.isMateMapped()&&(nameValues.push({name:"Mate Chromosome",value:this.mate.chr}),nameValues.push({name:"Mate Start",value:this.mate.position+1}),nameValues.push({name:"Mate Strand",value:!0===this.mate.strand?"(+)":"(-)"}),nameValues.push({name:"Insert Size",value:this.fragmentLength}))),nameValues.push("<hr>"),tagDict=this.tags(),isFirst=!0;for(var key in tagDict)tagDict.hasOwnProperty(key)&&(isFirst?(nameValues.push({name:key,value:tagDict[key],borderTop:!0}),isFirst=!1):nameValues.push({name:key,value:tagDict[key]}));return nameValues},igv.BamFilter=function(options){options||(options={}),this.vendorFailed=void 0===options.vendorFailed||options.vendorFailed,this.duplicates=void 0===options.duplicates||options.duplicates,this.secondary=options.secondary||!1,this.supplementary=options.supplementary||!1,this.mqThreshold=void 0===options.mqThreshold?0:options.mqThreshold},igv.BamFilter.prototype.pass=function(alignment){return!(this.vendorFailed&&alignment.isFailsVendorQualityCheck()||this.duplicates&&alignment.isDuplicate()||this.secondary&&alignment.isSecondary()||this.supplementary&&alignment.isSupplementary()||alignment.mq<this.mqThreshold)},igv}(igv||{}),igv=function(igv){return igv.BamAlignmentRow=function(){this.alignments=[],this.score=void 0},igv.BamAlignmentRow.prototype.findCenterAlignment=function(bpStart,bpEnd){var centerAlignment=void 0;return this.alignments.forEach(function(a){void 0===centerAlignment&&(a.start+a.lengthOnRef<bpStart||a.start>bpEnd||(centerAlignment=a))}),centerAlignment},igv.BamAlignmentRow.prototype.updateScore=function(genomicLocation,genomicInterval,sortOption){this.score=this.calculateScore(genomicLocation,1+genomicLocation,genomicInterval,sortOption)},igv.BamAlignmentRow.prototype.calculateScore=function(bpStart,bpEnd,interval,sortOption){function blockAtGenomicLocation(blocks,genomicLocation,genomicIntervalStart){var result=void 0;return blocks.forEach(function(block){for(var i=0,genomicOffset=block.start-genomicIntervalStart,blockLocation=block.start,blockSequenceLength=block.seq.length;i<blockSequenceLength;i++,genomicOffset++,blockLocation++)genomicLocation===blockLocation&&(result={block:block,blockSeqIndex:i,referenceSequenceIndex:genomicOffset,location:genomicLocation})}),result}function blockScoreWithObject(obj,interval){var reference,base,coverage,count,phred;return"*"===obj.block.seq?3:(reference=interval.sequence.charAt(obj.referenceSequenceIndex),base=obj.block.seq.charAt(obj.blockSeqIndex),"="===base&&(base=reference),"N"===base?2:reference===base?3:"X"===base||reference!==base?(coverage=interval.coverageMap.coverage[obj.location-interval.coverageMap.bpStart],count=coverage["pos"+base]+coverage["neg"+base],phred=coverage.qual?coverage.qual:0,-(count+phred/1e3)):void 0)}var baseScore,baseScoreFirst,baseScoreSecond,alignment,blockFirst,blockSecond;return void 0===(alignment=this.findCenterAlignment(bpStart,bpEnd))?Number.MAX_VALUE:(baseScoreFirst=baseScoreSecond=void 0,"NUCLEOTIDE"===sortOption.sort?(alignment.blocks&&alignment.blocks.length>0&&(blockFirst=blockAtGenomicLocation(alignment.blocks,bpStart,interval.start))&&(baseScoreFirst=blockScoreWithObject(blockFirst,interval)),alignment.firstAlignment&&alignment.firstAlignment.blocks&&alignment.firstAlignment.blocks.length>0&&(blockFirst=blockAtGenomicLocation(alignment.firstAlignment.blocks,bpStart,interval.start))&&(baseScoreFirst=blockScoreWithObject(blockFirst,interval)),alignment.secondAlignment&&alignment.secondAlignment.blocks&&alignment.secondAlignment.blocks.length>0&&(blockSecond=blockAtGenomicLocation(alignment.secondAlignment.blocks,bpStart,interval.start))&&(baseScoreSecond=blockScoreWithObject(blockSecond,interval)),baseScore=void 0===baseScoreFirst?baseScoreSecond:baseScoreFirst,void 0===baseScore?Number.MAX_VALUE:baseScore):"STRAND"===sortOption.sort?alignment.strand?1:-1:"START"===sortOption.sort?alignment.start:Number.MAX_VALUE)},igv}(igv||{}),igv=function(igv){function optimizeChunks(chunks,lowest){var mergedChunks=[],lastChunk=null;return 0===chunks.length?chunks:(chunks.sort(function(c0,c1){var dif=c0.minv.block-c1.minv.block;return 0!=dif?dif:c0.minv.offset-c1.minv.offset}),chunks.forEach(function(chunk){chunk.maxv.isGreaterThan(lowest)&&(null===lastChunk?(mergedChunks.push(chunk),lastChunk=chunk):chunk.minv.block-lastChunk.maxv.block<65e3?chunk.maxv.isGreaterThan(lastChunk.maxv)&&(lastChunk.maxv=chunk.maxv):(mergedChunks.push(chunk),lastChunk=chunk))}),mergedChunks)}function reg2bins(beg,end){var k,list=[];for(end>=1<<29&&(end=1<<29),--end,list.push(0),k=1+(beg>>26);k<=1+(end>>26);++k)list.push(k);for(k=9+(beg>>23);k<=9+(end>>23);++k)list.push(k);for(k=73+(beg>>20);k<=73+(end>>20);++k)list.push(k);for(k=585+(beg>>17);k<=585+(end>>17);++k)list.push(k);for(k=4681+(beg>>14);k<=4681+(end>>14);++k)list.push(k);return list}return igv.loadBamIndex=function(indexURL,config,tabix){return new Promise(function(fullfill,reject){var genome=igv.browser?igv.browser.genome:null;igv.xhr.loadArrayBuffer(indexURL,igv.buildOptions(config)).then(function(arrayBuffer){var magic,nbin,nintv,nref,parser,binIndex,linearIndex,binNumber,cs,ce,b,i,ref,sequenceIndexMap,indices=[],blockMin=Number.MAX_VALUE,blockMax=0;if(!arrayBuffer)return void fullfill(null);if(tabix&&(arrayBuffer=new Zlib.Gunzip(new Uint8Array(arrayBuffer)).decompress().buffer),parser=new igv.BinaryParser(new DataView(arrayBuffer)),!(21578050===(magic=parser.getInt())||tabix&&21578324===magic))throw new Error(indexURL+" is not a "+(tabix?"tabix":"bai")+" file");if(nref=parser.getInt(),tabix)for(parser.getInt(),parser.getInt(),parser.getInt(),parser.getInt(),parser.getInt(),parser.getInt(),parser.getInt(),sequenceIndexMap={},i=0;i<nref;i++){var seq_name=parser.getString();genome&&(seq_name=genome.getChromosomeName(seq_name)),sequenceIndexMap[seq_name]=i}for(ref=0;ref<nref;ref++){for(binIndex={},linearIndex=[],nbin=parser.getInt(),b=0;b<nbin;b++)if(37450===(binNumber=parser.getInt()))nchnk=parser.getInt(),cs=parser.getVPointer(),ce=parser.getVPointer(),parser.getLong(),parser.getLong();else{binIndex[binNumber]=[];var nchnk=parser.getInt();for(i=0;i<nchnk;i++)cs=parser.getVPointer(),ce=parser.getVPointer(),cs&&ce&&(cs.block<blockMin&&(blockMin=cs.block),ce.block>blockMax&&(blockMax=ce.block),binIndex[binNumber].push([cs,ce]))}for(nintv=parser.getInt(),i=0;i<nintv;i++)cs=parser.getVPointer(),linearIndex.push(cs);nbin>0&&(indices[ref]={binIndex:binIndex,linearIndex:linearIndex})}fullfill(new igv.BamIndex(indices,blockMin,blockMax,sequenceIndexMap,tabix))}).catch(reject)})},igv.BamIndex=function(indices,blockMin,blockMax,sequenceIndexMap,tabix){this.firstAlignmentBlock=blockMin,this.lastAlignmentBlock=blockMax,this.indices=indices,this.sequenceIndexMap=sequenceIndexMap,this.tabix=tabix},igv.BamIndex.prototype.blocksForRange=function(refId,min,max){var overlappingBins,chunks,nintv,lowest,minLin,maxLin,vp,i,bam=this,ba=bam.indices[refId];if(ba){for(overlappingBins=reg2bins(min,max),chunks=[],overlappingBins.forEach(function(bin){if(ba.binIndex[bin])for(var binChunks=ba.binIndex[bin],nchnk=binChunks.length,c=0;c<nchnk;++c){var cs=binChunks[c][0],ce=binChunks[c][1];chunks.push({minv:cs,maxv:ce,bin:bin})}}),nintv=ba.linearIndex.length,lowest=null,minLin=Math.min(min>>14,nintv-1),maxLin=Math.min(max>>14,nintv-1),i=minLin;i<=maxLin;++i)(vp=ba.linearIndex[i])&&(lowest&&!vp.isLessThan(lowest)||(lowest=vp));return optimizeChunks(chunks,lowest)}return[]},igv}(igv||{}),igv=function(igv){function readHeader(){var self=this;return getIndex.call(self).then(function(index){var len=index.firstAlignmentBlock+MAX_GZIP_BLOCK_SIZE,options=igv.buildOptions(self.config,{range:{start:0,size:len}}),genome=igv.browser?igv.browser.genome:null;return igv.BamUtils.readHeader(self.bamPath,options,genome)}).then(function(header){return header})}function getIndex(){var self=this;return self.index?Promise.resolve(self.index):igv.loadBamIndex(self.baiPath,self.config).then(function(index){return self.index=index,self.index})}function getChrIndex(){var self=this;return this.chrToIndex?Promise.resolve(this.chrToIndex):readHeader.call(self).then(function(header){return self.chrToIndex=header.chrToIndex,self.indexToChr=header.chrNames,self.chrAliasTable=header.chrAliasTable,self.chrToIndex})}const MAX_GZIP_BLOCK_SIZE=65536;return igv.BamReader=function(config){this.config=config,this.bamPath=config.url,this.baiPath=config.indexURL||igv.inferIndexPath(this.bamPath,"bai"),igv.BamUtils.setReaderDefaults(this,config)},igv.BamReader.prototype.readAlignments=function(chr,bpStart,bpEnd){var self=this;return getChrIndex.call(self).then(function(chrToIndex){var chrId,queryChr,alignmentContainer;return queryChr=self.chrAliasTable.hasOwnProperty(chr)?self.chrAliasTable[chr]:chr,chrId=chrToIndex[queryChr],alignmentContainer=new igv.AlignmentContainer(chr,bpStart,bpEnd,self.samplingWindowSize,self.samplingDepth,self.pairsSupported),void 0===chrId?Promise.resolve(alignmentContainer):getIndex.call(self).then(function(bamIndex){var chunks=bamIndex.blocksForRange(chrId,bpStart,bpEnd),promises=[];return chunks?0===chunks.length?Promise.resolve(alignmentContainer):(chunks.forEach(function(c){promises.push(new Promise(function(fulfill,reject){var fetchMin=c.minv.block,fetchMax=c.maxv.block+65e3,range={start:fetchMin,size:fetchMax-fetchMin+1};igv.xhr.loadArrayBuffer(self.bamPath,igv.buildOptions(self.config,{range:range})).then(function(compressed){var ba=new Uint8Array(igv.unbgzf(compressed));igv.BamUtils.decodeBamRecords(ba,c.minv.offset,alignmentContainer,self.indexToChr,chrId,bpStart,bpEnd,self.filter),fulfill(alignmentContainer)}).catch(reject)}))}),Promise.all(promises)):Promise.resolve(null)}).then(function(ignored){return alignmentContainer.finish(),alignmentContainer})})},igv}(igv||{}),igv=function(igv){function decodeDataURI(dataURI){var bytes,split=dataURI.split(","),info=split[0].split(":")[1],dataString=split[1];dataString=info.indexOf("base64")>=0?atob(dataString):decodeURI(dataString),bytes=new Uint8Array(dataString.length);for(var i=0;i<dataString.length;i++)bytes[i]=dataString.charCodeAt(i);return bytes}return igv.BamReaderNonIndexed=function(config){this.config=config,this.bamPath=config.url,this.isDataUri=config.url&&config.url.startsWith("data:"),igv.BamUtils.setReaderDefaults(this,config)},igv.BamReaderNonIndexed.prototype.readAlignments=function(chr,bpStart,bpEnd){function parseAlignments(data){var alignments=[];self.header=igv.BamUtils.decodeBamHeader(data),igv.BamUtils.decodeBamRecords(data,self.header.size,alignments,self.header.chrNames),self.alignmentCache=new igv.FeatureCache(alignments)}function fetchAlignments(chr,bpStart,bpEnd){var header,queryChr,qAlignments,alignmentContainer;return header=self.header,queryChr=header.chrAliasTable.hasOwnProperty(chr)?header.chrAliasTable[chr]:chr,qAlignments=self.alignmentCache.queryFeatures(queryChr,bpStart,bpEnd),alignmentContainer=new igv.AlignmentContainer(chr,bpStart,bpEnd,self.samplingWindowSize,self.samplingDepth,self.pairsSupported),qAlignments.forEach(function(a){alignmentContainer.push(a)}),alignmentContainer.finish(),alignmentContainer}var self=this;if(this.alignmentCache)return fetchAlignments(chr,bpStart,bpEnd);if(this.isDataUri){var data=decodeDataURI(this.bamPath),unc=igv.unbgzf(data.buffer);return parseAlignments(new Uint8Array(unc)),Promise.resolve(fetchAlignments(chr,bpStart,bpEnd))}return igv.xhr.loadArrayBuffer(self.bamPath,igv.buildOptions(self.config)).then(function(arrayBuffer){var unc=igv.unbgzf(arrayBuffer);return parseAlignments(new Uint8Array(unc)),fetchAlignments(chr,bpStart,bpEnd)})},igv}(igv||{}),igv=function(igv){function pairAlignments(rows){var pairCache={},result=[];return rows.forEach(function(row){row.alignments.forEach(function(alignment){var pairedAlignment;canBePaired(alignment)?(pairedAlignment=pairCache[alignment.readName],pairedAlignment?(pairedAlignment.setSecondAlignment(alignment),pairCache[alignment.readName]=void 0):(pairedAlignment=new igv.PairedAlignment(alignment),pairCache[alignment.readName]=pairedAlignment,result.push(pairedAlignment))):result.push(alignment)})}),result}function unpairAlignments(rows){var result=[];return rows.forEach(function(row){row.alignments.forEach(function(alignment){alignment instanceof igv.PairedAlignment?(alignment.firstAlignment&&result.push(alignment.firstAlignment),alignment.secondAlignment&&result.push(alignment.secondAlignment)):result.push(alignment)})}),result}function canBePaired(alignment){return alignment.isPaired()&&alignment.isMateMapped()&&alignment.chr===alignment.mate.chr&&(alignment.isFirstOfPair()||alignment.isSecondOfPair())&&!(alignment.isSecondary()||alignment.isSupplementary())}function packAlignmentRows(alignments,start,end,maxRows){if(alignments){if(0===alignments.length)return[];var nextStart,alignmentRow,index,bucket,alignment,bucketStart,bucketList=[],allocatedCount=0,lastAllocatedCount=0,alignmentSpace=8,packedAlignmentRows=[];for(alignments.sort(function(a,b){return a.start-b.start}),bucketStart=Math.max(start,alignments[0].start),nextStart=bucketStart,alignments.forEach(function(alignment){var buckListIndex=Math.max(0,alignment.start-bucketStart);void 0===bucketList[buckListIndex]&&(bucketList[buckListIndex]=[]),bucketList[buckListIndex].push(alignment)});allocatedCount<alignments.length&&packedAlignmentRows.length<maxRows;){for(alignmentRow=new igv.BamAlignmentRow;nextStart<=end;){for(bucket=void 0;!bucket&&nextStart<=end;)index=nextStart-bucketStart,void 0===bucketList[index]?++nextStart:bucket=bucketList[index];if(!bucket)break;alignment=bucket.pop(),0===bucket.length&&(bucketList[index]=void 0),alignmentRow.alignments.push(alignment),nextStart=alignment.start+alignment.lengthOnRef+alignmentSpace,++allocatedCount}if(alignmentRow.alignments.length>0&&packedAlignmentRows.push(alignmentRow),nextStart=bucketStart,allocatedCount===lastAllocatedCount)break;lastAllocatedCount=allocatedCount}return packedAlignmentRows}}return igv.BamSource=function(config){this.config=config,this.alignmentContainer=void 0,this.maxRows=config.maxRows||1e3,igv.isFilePath(config.url)?console.log("ignore"):config.url&&config.url.startsWith("data:")&&(this.config.indexed=!1),"ga4gh"===config.sourceType?this.bamReader=new igv.Ga4ghAlignmentReader(config):"pysam"===config.sourceType?this.bamReader=new igv.BamWebserviceReader(config):"htsget"===config.sourceType?this.bamReader=new igv.HtsgetReader(config):"shardedBam"===config.sourceType?this.bamReader=new igv.ShardedBamReader(config):!1===this.config.indexed?this.bamReader=new igv.BamReaderNonIndexed(config):this.bamReader=new igv.BamReader(config),this.viewAsPairs=config.viewAsPairs},igv.BamSource.prototype.setViewAsPairs=function(bool){var self=this;if(this.viewAsPairs!==bool&&(this.viewAsPairs=bool,this.alignmentContainer)){var alignments,alignmentContainer=this.alignmentContainer;alignments=bool?pairAlignments(alignmentContainer.packedAlignmentRows):unpairAlignments(alignmentContainer.packedAlignmentRows),alignmentContainer.packedAlignmentRows=packAlignmentRows(alignments,alignmentContainer.start,alignmentContainer.end,self.maxRows)}},igv.BamSource.prototype.getAlignments=function(chr,bpStart,bpEnd){var hasAlignments,self=this;return self.alignmentContainer&&self.alignmentContainer.contains(chr,bpStart,bpEnd)?Promise.resolve(self.alignmentContainer):self.bamReader.readAlignments(chr,bpStart,bpEnd).then(function(alignmentContainer){var maxRows=self.config.maxRows||500,alignments=alignmentContainer.alignments;return self.viewAsPairs||(alignments=unpairAlignments([{alignments:alignments}])),hasAlignments=alignments.length>0,alignmentContainer.packedAlignmentRows=packAlignmentRows(alignments,alignmentContainer.start,alignmentContainer.end,maxRows),alignmentContainer.alignments=void 0,self.alignmentContainer=alignmentContainer,hasAlignments?igv.browser.genome.sequence.getSequence(alignmentContainer.chr,alignmentContainer.start,alignmentContainer.end).then(function(sequence){if(sequence)return alignmentContainer.coverageMap.refSeq=sequence,alignmentContainer.sequence=sequence,alignmentContainer}):alignmentContainer})},igv}(igv||{}),igv=function(igv){function shadedBaseColor(qual,nucleotide,genomicLocation){var alpha,minQ=5,foregroundColor=igv.nucleotideColorComponents[nucleotide];if(foregroundColor)return alpha=qual<minQ?.1:Math.max(.1,Math.min(1,.1+.9*(qual-minQ)/(20-minQ))),alpha=Math.round(10*alpha)/10,alpha>=1?igv.nucleotideColors[nucleotide]:"rgba("+foregroundColor[0]+","+foregroundColor[1]+","+foregroundColor[2]+","+alpha+")"}function getAlignmentColor(alignment){var tagValue,color,self=this,option=self.colorBy;switch(color=self.parent.color,option){case"strand":color=alignment.strand?self.posStrandColor:self.negStrandColor;break;case"firstOfPairStrand":alignment instanceof igv.PairedAlignment?color=alignment.firstOfPairStrand()?self.posStrandColor:self.negStrandColor:alignment.isPaired()&&(alignment.isFirstOfPair()?color=alignment.strand?self.posStrandColor:self.negStrandColor:alignment.isSecondOfPair()?color=alignment.strand?self.negStrandColor:self.posStrandColor:console.log("ERROR. Paired alignments are either first or second."));break;case"pairOrientation":if(alignment.pairOrientation){var oTypes=orientationTypes[self.pairOrientation],pairColor=self.pairColors[oTypes[alignment.pairOrientation]];pairColor&&(color=pairColor)}break;case"fragmentLength":alignment.pairOrientation&&(self.parent.minFragmentLength&&Math.abs(alignment.fragmentLength)<self.parent.minFragmentLength?color=self.smallFragmentLengthColor:self.parent.maxFragmentLength&&Math.abs(alignment.fragmentLength)>self.parent.maxFragmentLength&&(color=self.largeFragmentLengthColor));break;case"tag":tagValue=alignment.tags()[self.colorByTag],void 0!==tagValue&&(color=self.bamColorTag===self.colorByTag?"rgb("+tagValue+")":self.tagColors.getColor(tagValue));break;default:color=self.parent.color}return color}var alignmentStartGap=5,downsampleRowHeight=5;igv.BAMTrack=function(config){this.featureSource=new igv.BamSource(config),void 0===config.height&&(config.height=300),igv.configTrack(this,config),void 0===config.coverageTrackHeight&&(config.coverageTrackHeight=50),this.coverageTrack=new CoverageTrack(config,this),this.alignmentTrack=new AlignmentTrack(config,this),this.visibilityWindow=config.visibilityWindow||3e4,this.viewAsPairs=config.viewAsPairs,this.pairsSupported=void 0===config.pairsSupported,this.color=config.color||"rgb(185, 185, 185)",this.sortOption=config.sortOption||{sort:"NUCLEOTIDE"},this.sortDirection=!0,this.filterOption=config.filterOption||{name:"mappingQuality",params:[30,void 0]},this.minFragmentLength=config.minFragmentLength,this.maxFragmentLength=config.maxFragmentLength},igv.BAMTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){var self=this;return this.featureSource.getAlignments(chr,bpStart,bpEnd).then(function(alignmentContainer){return void 0===self.minFragmentLength&&(self.minFragmentLength=alignmentContainer.pairedEndStats.lowerFragmentLength),void 0===self.maxFragmentLength&&(self.maxFragmentLength=alignmentContainer.pairedEndStats.upperFragmentLength),alignmentContainer})},igv.BAMTrack.filters={noop:function(){return function(alignment){return!1}},strand:function(strand){return function(alignment){return alignment.strand===strand}},mappingQuality:function(lower,upper){return function(alignment){return!!(lower&&alignment.mq<lower)||!!(upper&&alignment.mq>upper)}}},igv.BAMTrack.prototype.computePixelHeight=function(alignmentContainer){return this.coverageTrack.computePixelHeight(alignmentContainer)+this.alignmentTrack.computePixelHeight(alignmentContainer)},igv.BAMTrack.prototype.draw=function(options){this.coverageTrack.height>0&&this.coverageTrack.draw(options),this.alignmentTrack.draw(options)},igv.BAMTrack.prototype.paintAxis=function(ctx,pixelWidth,pixelHeight){this.coverageTrack.paintAxis(ctx,pixelWidth,this.coverageTrackHeight)},igv.BAMTrack.prototype.popupMenuItemList=function(config){var $e,clickHandler,self=this,list=[];return $e=$("<div>"),$e.text("Sort by base"),clickHandler=function(){self.alignmentTrack.sortAlignmentRows(config.genomicLocation,self.sortOption),self.trackView.update(),self.sortDirection=!self.sortDirection,config.popover.hide()},list.push({name:void 0,object:$e,click:clickHandler,init:void 0}),!1===self.viewAsPairs&&($e=$("<div>"),$e.text("View mate in split screen"),clickHandler=function(){self.alignmentTrack.popupMenuItemList(config)},list.push({name:void 0,object:$e,click:clickHandler,init:void 0})),list},igv.BAMTrack.prototype.popupData=function(config){return config.y>=this.coverageTrack.top&&config.y<this.coverageTrack.height?this.coverageTrack.popupData(config):this.alignmentTrack.popupData(config)},igv.BAMTrack.prototype.menuItemList=function(popover){function colorByMarkup(menuItem,showCheck,index){var $e,clickHandler,parts=[];return parts.push("<div>"),parts.push(showCheck?'<i class="fa fa-check"></i>':'<i class="fa fa-check fa-check-hidden"></i>'),"tag"===menuItem.key?parts.push('<span id="color-by-tag">'):parts.push("<span>"),parts.push(menuItem.label),parts.push("</span>"),parts.push("</div>"),$e=$(parts.join("")),clickHandler=function(){igv.popover.hide(),"tag"===menuItem.key?(igv.dialog.configure(function(){return"Tag Name"},self.alignmentTrack.colorByTag?self.alignmentTrack.colorByTag:"",function(){var tag=igv.dialog.$dialogInput.val().trim();self.alignmentTrack.colorBy="tag",tag!==self.alignmentTrack.colorByTag&&(self.alignmentTrack.colorByTag=igv.dialog.$dialogInput.val().trim(),self.alignmentTrack.tagColors=new igv.PaletteColorTable("Set1"),$("#color-by-tag").text(self.alignmentTrack.colorByTag)),self.trackView.update()},void 0,void 0),igv.dialog.show($(self.trackView.trackDiv))):(self.alignmentTrack.colorBy=menuItem.key,self.trackView.update())},{name:void 0,object:$e,click:clickHandler,init:void 0}}function sortMenuItem(popover){var $e,clickHandler;return $e=$("<div>"),$e.text("Sort by base"),clickHandler=function(){var genomicLocation,viewportHalfWidth,genomicState=_.first(igv.browser.genomicStateList),referenceFrame=genomicState.referenceFrame;popover.hide(),viewportHalfWidth=Math.floor(igv.browser.viewportContainerWidth()/genomicState.locusCount*.5),genomicLocation=Math.floor(referenceFrame.start+referenceFrame.toBP(viewportHalfWidth)),self.altClick(genomicLocation,void 0,void 0),"show center guide"===igv.browser.centerGuide.$centerGuideToggle.text()&&igv.browser.centerGuide.$centerGuideToggle.trigger("click")},{name:void 0,object:$e,click:clickHandler,init:void 0}}var $e,html,tagLabel,selected,self=this,menuItems=[],colorByMenuItems=[];return menuItems.push(sortMenuItem(popover)),colorByMenuItems.push({key:"none",label:"track color"}),colorByMenuItems.push({key:"strand",label:"read strand"}),self.alignmentTrack.hasPairs&&(colorByMenuItems.push({key:"firstOfPairStrand",label:"first-of-pair strand"}),colorByMenuItems.push({key:"pairOrientation",label:"pair orientation"}),colorByMenuItems.push({key:"fragmentLength",label:"fragment length"})),tagLabel="tag"+(self.alignmentTrack.colorByTag?" ("+self.alignmentTrack.colorByTag+")":""),colorByMenuItems.push({key:"tag",label:tagLabel}),$e=$('<div class="igv-track-menu-category igv-track-menu-border-top">'),$e.text("Color by"),menuItems.push({name:void 0,object:$e,click:void 0,init:void 0}),colorByMenuItems.forEach(function(item){selected=self.alignmentTrack.colorBy===item.key,menuItems.push(colorByMarkup(item,selected))}),html=[],self.pairsSupported&&self.alignmentTrack.hasPairs&&(html.push('<div class="igv-track-menu-border-top">'),html.push(!0===self.viewAsPairs?'<i class="fa fa-check">':'<i class="fa fa-check fa-check-hidden">'),html.push("</i>"),html.push("View as pairs"),html.push("</div>"),menuItems.push({object:$(html.join("")),click:function(){var $fa=$(this).find("i");popover.hide(),self.viewAsPairs=!self.viewAsPairs,!0===self.viewAsPairs?$fa.removeClass("fa-check-hidden"):$fa.addClass("fa-check-hidden"),self.featureSource.setViewAsPairs(self.viewAsPairs),self.trackView.update()}})),menuItems},CoverageTrack=function(config,parent){this.parent=parent,this.featureSource=parent.featureSource,this.top=0,this.height=config.coverageTrackHeight,this.dataRange={min:0},this.paintAxis=igv.paintAxis},CoverageTrack.prototype.computePixelHeight=function(alignmentContainer){return this.height},CoverageTrack.prototype.draw=function(options){var bp,x,y,w,h,refBase,i,len,item,accumulatedHeight,sequence,self=this,alignmentContainer=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,bpEnd=bpStart+pixelWidth*bpPerPixel+1,coverageMap=alignmentContainer.coverageMap;for(this.top&&ctx.translate(0,top),coverageMap.refSeq&&(sequence=coverageMap.refSeq.toUpperCase()),this.dataRange.max=coverageMap.maximum,w=Math.max(1,Math.ceil(1/bpPerPixel)),i=0,len=coverageMap.coverage.length;i<len;i++)if(!((bp=coverageMap.bpStart+i)<bpStart)){if(bp>bpEnd)break;(item=coverageMap.coverage[i])&&(h=Math.round(item.total/this.dataRange.max*this.height),y=this.height-h,x=Math.floor((bp-bpStart)/bpPerPixel),igv.graphics.setProperties(ctx,{fillStyle:this.parent.color,strokeStyle:this.color}),igv.graphics.fillRect(ctx,x,y,w,h))}if(sequence)for(i=0,len=coverageMap.coverage.length;i<len;i++)if(!((bp=coverageMap.bpStart+i)<bpStart)){if(bp>bpEnd)break;(item=coverageMap.coverage[i])&&(h=item.total/this.dataRange.max*this.height,y=this.height-h,x=Math.floor((bp-bpStart)/bpPerPixel),refBase=sequence[i],item.isMismatch(refBase)&&(igv.graphics.setProperties(ctx,{fillStyle:igv.nucleotideColors[refBase]}),igv.graphics.fillRect(ctx,x,y,w,h),accumulatedHeight=0,["A","C","T","G"].forEach(function(nucleotide){var count,hh;count=item["pos"+nucleotide]+item["neg"+nucleotide],hh=count/self.dataRange.max*self.height,y=self.height-hh-accumulatedHeight,accumulatedHeight+=hh,igv.graphics.setProperties(ctx,{fillStyle:igv.nucleotideColors[nucleotide]}),igv.graphics.fillRect(ctx,x,y,w,hh)})))}},CoverageTrack.prototype.popupData=function(config){var coverageMapIndex,coverage,tmp,genomicLocation=config.genomicLocation,referenceFrame=(config.x,config.y,config.viewport.genomicState.referenceFrame),coverageMap=this.featureSource.alignmentContainer.coverageMap,nameValues=[];return coverageMapIndex=genomicLocation-coverageMap.bpStart,coverage=coverageMap.coverage[coverageMapIndex],coverage&&(nameValues.push(referenceFrame.chrName+":"+igv.numberFormatter(1+genomicLocation)),nameValues.push({name:"Total Count",value:coverage.total}),tmp=coverage.posA+coverage.negA,tmp>0&&(tmp=tmp.toString()+" ("+Math.floor((coverage.posA+coverage.negA)/coverage.total*100)+"%)"),nameValues.push({name:"A",value:tmp}),tmp=coverage.posC+coverage.negC,tmp>0&&(tmp=tmp.toString()+" ("+Math.floor(tmp/coverage.total*100)+"%)"),nameValues.push({name:"C",value:tmp}),tmp=coverage.posG+coverage.negG,tmp>0&&(tmp=tmp.toString()+" ("+Math.floor(tmp/coverage.total*100)+"%)"),nameValues.push({name:"G",value:tmp}),tmp=coverage.posT+coverage.negT,tmp>0&&(tmp=tmp.toString()+" ("+Math.floor(tmp/coverage.total*100)+"%)"),nameValues.push({name:"T",value:tmp}),tmp=coverage.posN+coverage.negN,tmp>0&&(tmp=tmp.toString()+" ("+Math.floor(tmp/coverage.total*100)+"%)"),nameValues.push({name:"N",value:tmp})),nameValues},AlignmentTrack=function(config,parent){this.parent=parent,this.featureSource=parent.featureSource,this.top=0==config.coverageTrackHeight?0:config.coverageTrackHeight+5,this.alignmentRowHeight=config.alignmentRowHeight||14,this.negStrandColor=config.negStrandColor||"rgba(150, 150, 230, 0.75)",this.posStrandColor=config.posStrandColor||"rgba(230, 150, 150, 0.75)",this.insertionColor=config.insertionColor||"rgb(138, 94, 161)",this.deletionColor=config.deletionColor||"black",this.skippedColor=config.skippedColor||"rgb(150, 170, 170)",this.smallFragmentLengthColor=config.smallFragmentLengthColor||"rgb(0, 0, 150)",this.largeFragmentLengthColor=config.largeFragmentLengthColor||"rgb(200, 0, 0)",this.pairOrientation=config.pairOrienation,this.pairColors={},this.pairColors.RL=config.rlColor||"rgb(0, 150, 0)",this.pairColors.RR=config.rrColor||"rgb(20, 50, 200)",this.pairColors.LL=config.llColor||"rgb(0, 150, 150)",this.colorBy=config.colorBy||"pairOrientation",this.colorByTag=config.colorByTag,this.bamColorTag=void 0===config.bamColorTag?"YC":config.bamColorTag,this.sortOption=config.sortOption||{sort:"NUCLEOTIDE"},this.sortDirection=!0,this.hasPairs=!1},AlignmentTrack.prototype.computePixelHeight=function(alignmentContainer){if(alignmentContainer.packedAlignmentRows){var h=0;return alignmentContainer.hasDownsampledIntervals()&&(h+=downsampleRowHeight+alignmentStartGap),h+this.alignmentRowHeight*alignmentContainer.packedAlignmentRows.length+5}return this.height},AlignmentTrack.prototype.draw=function(options){function drawPairConnector(alignment,yRect,alignmentHeight){var alignmentColor=getAlignmentColor.call(self,alignment.firstAlignment),xBlockStart=(alignment.connectingStart-bpStart)/bpPerPixel,xBlockEnd=(alignment.connectingEnd-bpStart)/bpPerPixel,yStrokedLine=yRect+alignmentHeight/2;alignment.connectingEnd<bpStart||alignment.connectingStart>bpEnd||(alignment.mq<=0&&(alignmentColor=igv.Color.addAlpha(alignmentColor,"0.15")),igv.graphics.setProperties(ctx,{fillStyle:alignmentColor,strokeStyle:alignmentColor}),igv.graphics.strokeLine(ctx,xBlockStart,yStrokedLine,xBlockEnd,yStrokedLine))}function drawSingleAlignment(alignment,yRect,alignmentHeight){function drawBlock(block){var refChar,readChar,readQual,xBase,widthBase,colorBase,x,y,i,len,seqOffset=block.start-alignmentContainer.start,xBlockStart=(block.start-bpStart)/bpPerPixel,xBlockEnd=(block.start+block.len-bpStart)/bpPerPixel,widthBlock=Math.max(1,xBlockEnd-xBlockStart),widthArrowHead=self.alignmentRowHeight/2,blockSeq=block.seq.toUpperCase(),skippedColor=self.skippedColor,deletionColor=self.deletionColor,yStrokedLine=yRect+alignmentHeight/2;if(void 0!==block.gapType&&void 0!==xBlockEnd&&void 0!==lastBlockEnd&&("D"===block.gapType?igv.graphics.strokeLine(ctx,lastBlockEnd,yStrokedLine,xBlockStart,yStrokedLine,{strokeStyle:deletionColor}):igv.graphics.strokeLine(ctx,lastBlockEnd,yStrokedLine,xBlockStart,yStrokedLine,{strokeStyle:skippedColor})),lastBlockEnd=xBlockEnd,!0===alignment.strand&&b===blocks.length-1?(x=[xBlockStart,xBlockEnd,xBlockEnd+widthArrowHead,xBlockEnd,xBlockStart,xBlockStart],y=[yRect,yRect,yRect+alignmentHeight/2,yRect+alignmentHeight,yRect+alignmentHeight,yRect],igv.graphics.fillPolygon(ctx,x,y,{fillStyle:alignmentColor}),self.highlightedAlignmentReadNamed===alignment.readName&&igv.graphics.strokePolygon(ctx,x,y,{strokeStyle:"red"}),alignment.mq<=0&&igv.graphics.strokePolygon(ctx,x,y,{strokeStyle:outlineColor})):!1===alignment.strand&&0===b?(x=[xBlockEnd,xBlockStart,xBlockStart-widthArrowHead,xBlockStart,xBlockEnd,xBlockEnd],y=[yRect,yRect,yRect+alignmentHeight/2,yRect+alignmentHeight,yRect+alignmentHeight,yRect],igv.graphics.fillPolygon(ctx,x,y,{fillStyle:alignmentColor}),self.highlightedAlignmentReadNamed===alignment.readName&&igv.graphics.strokePolygon(ctx,x,y,{strokeStyle:"red"}),alignment.mq<=0&&igv.graphics.strokePolygon(ctx,x,y,{strokeStyle:outlineColor})):(igv.graphics.fillRect(ctx,xBlockStart,yRect,widthBlock,alignmentHeight,{fillStyle:alignmentColor}),alignment.mq<=0&&(ctx.save(),ctx.strokeStyle=outlineColor,ctx.strokeRect(xBlockStart,yRect,widthBlock,alignmentHeight),ctx.restore())),sequence&&"*"!==blockSeq)for(i=0,len=blockSeq.length;i<len;i++)seqOffset+i<0||(readChar=blockSeq.charAt(i),refChar=sequence.charAt(seqOffset+i),"="===readChar&&(readChar=refChar),"X"!==readChar&&refChar===readChar||(block.qual&&block.qual.length>i?(readQual=block.qual[i],colorBase=shadedBaseColor(readQual,readChar,i+block.start)):colorBase=igv.nucleotideColors[readChar],colorBase&&(xBase=(block.start+i-bpStart)/bpPerPixel,widthBase=Math.max(1,1/bpPerPixel),igv.graphics.fillRect(ctx,xBase,yRect,widthBase,alignmentHeight,{fillStyle:colorBase}))))}var lastBlockEnd,block,b,alignmentColor=getAlignmentColor.call(self,alignment),outlineColor="alignmentColor",blocks=alignment.blocks;if(!(alignment.start+alignment.lengthOnRef<bpStart||alignment.start>bpEnd))for(alignment.mq<=0&&(alignmentColor=igv.Color.addAlpha(alignmentColor,"0.15")),igv.graphics.setProperties(ctx,{fillStyle:alignmentColor,strokeStyle:outlineColor}),b=0;b<blocks.length;b++)if(block=blocks[b],!(block.start+block.len<bpStart)){if(drawBlock(block),block.start+block.len>bpEnd)break;alignment.insertions&&alignment.insertions.forEach(function(block){var refOffset=block.start-bpStart,xBlockStart=refOffset/bpPerPixel-1;igv.graphics.fillRect(ctx,xBlockStart,yRect-1,3,alignmentHeight+2,{fillStyle:self.insertionColor})})}}var self=this,alignmentContainer=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,bpEnd=bpStart+pixelWidth*bpPerPixel+1,packedAlignmentRows=alignmentContainer.packedAlignmentRows,sequence=alignmentContainer.sequence,alignmentRowYInset=0;this.top&&ctx.translate(0,this.top),sequence&&(sequence=sequence.toUpperCase()),alignmentContainer.hasDownsampledIntervals()?(alignmentRowYInset=downsampleRowHeight+alignmentStartGap,alignmentContainer.downsampledIntervals.forEach(function(interval){var xBlockStart=(interval.start-bpStart)/bpPerPixel,xBlockEnd=(interval.end-bpStart)/bpPerPixel;xBlockEnd-xBlockStart>5&&(xBlockStart+=1,xBlockEnd-=1),igv.graphics.fillRect(ctx,xBlockStart,2,xBlockEnd-xBlockStart,downsampleRowHeight-2,{fillStyle:"black"})})):alignmentRowYInset=0,this.alignmentsYOffset=alignmentRowYInset,packedAlignmentRows&&packedAlignmentRows.forEach(function(alignmentRow,i){var i,alignment,yRect=alignmentRowYInset+self.alignmentRowHeight*i,alignmentHeight=self.alignmentRowHeight-2;for(i=0;i<alignmentRow.alignments.length;i++)if(alignment=alignmentRow.alignments[i],self.hasPairs=self.hasPairs||alignment.isPaired(),!(alignment.start+alignment.lengthOnRef<bpStart)){if(alignment.start>bpEnd)break;!0!==alignment.hidden&&(alignment instanceof igv.PairedAlignment?(drawPairConnector(alignment,yRect,alignmentHeight),drawSingleAlignment(alignment.firstAlignment,yRect,alignmentHeight),alignment.secondAlignment&&drawSingleAlignment(alignment.secondAlignment,yRect,alignmentHeight)):drawSingleAlignment(alignment,yRect,alignmentHeight))}})},AlignmentTrack.prototype.sortAlignmentRows=function(genomicLocation,sortOption){var self=this;this.featureSource.alignmentContainer.packedAlignmentRows.forEach(function(row){row.updateScore(genomicLocation,self.featureSource.alignmentContainer,sortOption)}),this.featureSource.alignmentContainer.packedAlignmentRows.sort(function(rowA,rowB){return!0===self.sortDirection?rowA.score-rowB.score:rowB.score-rowA.score})},AlignmentTrack.prototype.popupData=function(config){var clickedObject;return clickedObject=this.getClickedObject(config.viewport,config.y,config.genomicLocation),clickedObject?clickedObject.popupData(config.genomicLocation):void 0},AlignmentTrack.prototype.popupMenuItemList=function(config){function locusPairWithAlignmentAndViewport(alignment,viewport){var left,right,centroid,widthBP;return widthBP=viewport.$viewport.width()*viewport.genomicState.referenceFrame.bpPerPixel,centroid=(alignment.start+(alignment.start+alignment.lengthOnRef))/2,left=alignment.chr+":"+Math.round(centroid-widthBP/2).toString()+"-"+Math.round(centroid+widthBP/2).toString(),centroid=(alignment.mate.position+(alignment.mate.position+alignment.lengthOnRef))/2,right=alignment.chr+":"+Math.round(centroid-widthBP/2).toString()+"-"+Math.round(centroid+widthBP/2).toString(),[left,right]}var alignment,loci,mateLoci,index,head,tail;this.highlightedAlignmentReadNamed=void 0,config.popover.hide(),(alignment=this.getClickedObject(config.viewport,config.y,config.genomicLocation))&&(this.highlightedAlignmentReadNamed=alignment.readName,loci=igv.browser.genomicStateList.map(function(gs){return gs.locusSearchString}),index=config.viewport.genomicState.locusIndex,head=_.first(loci,1+index),tail=1===_.size(loci)?void 0:_.last(loci,_.size(loci)-(1+index)),mateLoci=locusPairWithAlignmentAndViewport(alignment,config.viewport),head.splice(-1,1),Array.prototype.push.apply(head,mateLoci),tail&&Array.prototype.push.apply(head,tail),igv.browser.search(head.join(" ")))},AlignmentTrack.prototype.getClickedObject=function(viewport,y,genomicLocation){var packedAlignmentRows,downsampledIntervals,packedAlignmentsIndex,alignmentRow,clicked,i;if(packedAlignmentRows=viewport.cachedFeatures.features.packedAlignmentRows,downsampledIntervals=viewport.cachedFeatures.features.downsampledIntervals,(packedAlignmentsIndex=Math.floor((y-this.top-this.alignmentsYOffset)/this.alignmentRowHeight))<0){for(i=0;i<downsampledIntervals.length;i++)if(downsampledIntervals[i].start<=genomicLocation&&downsampledIntervals[i].end>=genomicLocation)return downsampledIntervals[i]}else if(packedAlignmentsIndex<packedAlignmentRows.length&&(alignmentRow=packedAlignmentRows[packedAlignmentsIndex],clicked=alignmentRow.alignments.filter(function(alignment){return genomicLocation>=alignment.start&&genomicLocation<=alignment.start+alignment.lengthOnRef}),clicked.length>0))return clicked[0]};var orientationTypes={fr:{F1R2:"LR",F2R1:"LR",F1F2:"LL",F2F1:"LL",R1R2:"RR",R2R1:"RR",R1F2:"RL",R2F1:"RL"},rf:{R1F2:"LR",R2F1:"LR",R1R2:"LL",R2R1:"LL",F1F2:"RR",F2F1:"RR",F1R2:"RL",F2R1:"RL"},ff:{F2F1:"LR",R1R2:"LR",F2R1:"LL",R1F2:"LL",R2F1:"RR",F1R2:"RR",R2R1:"RL",F1F2:"RL"}};return igv}(igv||{}),igv=function(igv){function makeBlocks(record,cigarArray){for(var insertions,blockSeq,blockQuals,gapType,blocks=[],seqOffset=0,pos=record.start,len=cigarArray.length,i=0;i<len;i++){var c=cigarArray[i];switch(c.ltr){case"H":case"P":break;case"S":seqOffset+=c.len,gapType="S";break;case"N":pos+=c.len,gapType="N";break;case"D":pos+=c.len,gapType="D";break;case"I":blockSeq="*"===record.seq?"*":record.seq.substr(seqOffset,c.len),blockQuals=record.qual?record.qual.slice(seqOffset,c.len):void 0,void 0===insertions&&(insertions=[]),insertions.push({start:pos,len:c.len,seq:blockSeq,qual:blockQuals}),seqOffset+=c.len;break;case"M":case"EQ":case"=":case"X":blockSeq="*"===record.seq?"*":record.seq.substr(seqOffset,c.len),blockQuals=record.qual?record.qual.slice(seqOffset,c.len):void 0,blocks.push({start:pos,len:c.len,seq:blockSeq,qual:blockQuals,gapType:gapType}),seqOffset+=c.len,pos+=c.len;break;default:console.log("Error processing cigar element: "+c.len+c.ltr)}}return{blocks:blocks,insertions:insertions}}function readInt(ba,offset){return ba[offset+3]<<24|ba[offset+2]<<16|ba[offset+1]<<8|ba[offset]}function buildOperators(cigarString){var operators,buffer,i,len,prevOp,next,op,nBases;for(operators=[],buffer=[],prevOp=null,len=cigarString.length,i=0;i<len;i++)next=cigarString.charAt(i),isDigit(next)?buffer.push(next):(op=next,nBases=Number.parseInt(buffer.join("")),buffer=[],null!=prevOp&&prevOp.ltr==op?prevOp.len+=nBases:(prevOp={len:nBases,ltr:op},operators.push(prevOp)));return operators}function isDigit(a){var charCode=a.charCodeAt(0);return charCode>=48&&charCode<=57}function decodeSamTags(tags){var tagDict={};return tags.forEach(function(tag){var tokens=tag.split(":");tagDict[tokens[0]]=tokens[2]}),tagDict}var SEQ_DECODER=["=","A","C","x","G","x","x","x","T","x","x","x","x","x","x","N"],CIGAR_DECODER=["M","I","D","N","S","H","P","=","X","?","?","?","?","?","?","?"],READ_STRAND_FLAG=16,MATE_STRAND_FLAG=32,BAM1_MAGIC_BYTES=new Uint8Array([66,65,77,1]),BAM1_MAGIC_NUMBER=readInt(BAM1_MAGIC_BYTES,0);const MAXIMUM_SAMPLING_DEPTH=2500;return igv.BamUtils={readHeader:function(url,options,genome){return new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(url,options).then(function(compressedBuffer){var header,unc,uncba;unc=igv.unbgzf(compressedBuffer),uncba=new Uint8Array(unc),header=igv.BamUtils.decodeBamHeader(uncba,genome),fulfill(header)}).catch(function(error){reject(error)})})},decodeBamHeader:function(ba,genome){var magic,samHeaderLen,samHeader,chrToIndex,chrNames,chrAliasTable,alias;if((magic=readInt(ba,0))!==BAM1_MAGIC_NUMBER)throw new Error("BAM header contains an invalid BAM magic");samHeaderLen=readInt(ba,4),samHeader="";for(var i=0;i<samHeaderLen;++i)samHeader+=String.fromCharCode(ba[i+8]);var nRef=readInt(ba,samHeaderLen+8),p=samHeaderLen+12;for(chrToIndex={},chrNames=[],chrAliasTable={},i=0;i<nRef;++i){for(var lName=readInt(ba,p),name="",j=0;j<lName-1;++j)name+=String.fromCharCode(ba[p+4+j]);readInt(ba,p+lName+4),chrToIndex[name]=i,chrNames[i]=name,genome&&(alias=genome.getChromosomeName(name),chrAliasTable[alias]=name),p=p+8+lName}return{magicNumber:magic,size:p,chrNames:chrNames,chrToIndex:chrToIndex,chrAliasTable:chrAliasTable}},bam_tag2cigar:function(ba,block_end,seq_offset,lseq,al,cigarArray){function type2size(x){return"C"==x||"c"==x||"A"==x?1:"S"==x||"s"==x?2:"I"==x||"i"==x||"f"==x?4:0}if(1!=cigarArray.length||al.start<0)return!1;for(var p=seq_offset+(lseq+1>>1)+lseq;p+4<block_end&&"CG"!=String.fromCharCode(ba[p])+String.fromCharCode(ba[p+1]);){var type=String.fromCharCode(ba[p+2]);if("B"==type)type=String.fromCharCode(ba[p+3]),p+=8+type2size(type)*readInt(ba,p+4);else if("Z"==type||"H"==type)for(p+=3;0!=ba[p++];);else p+=3+type2size(type)}if(p>=block_end)return!1;if("B"!=String.fromCharCode(ba[p+2])||"I"!=String.fromCharCode(ba[p+3]))return!1;var cigar_len=readInt(ba,p+4),cigar_offset=p+8;if(cigar_offset+4*cigar_len>block_end)return!1;var cigar="",lengthOnRef=0;cigarArray.length=0,p=cigar_offset;for(var k=0;k<cigar_len;++k,p+=4){var cigop=readInt(ba,p),opLen=cigop>>4,opLtr=CIGAR_DECODER[15&cigop];"M"!=opLtr&&"EQ"!=opLtr&&"X"!=opLtr&&"D"!=opLtr&&"N"!=opLtr&&"="!=opLtr||(lengthOnRef+=opLen),cigar=cigar+opLen+opLtr,cigarArray.push({len:opLen,ltr:opLtr})}return al.cigar=cigar,al.lengthOnRef=lengthOnRef,!0},decodeBamRecords:function(ba,offset,alignmentContainer,chrNames,chrIdx,min,max,filter){for(var blockSize,blockEnd,alignment,blocks,refID,pos,bin_mq_nl,mq,nl,flag_nc,flag,nc,lseq,tlen,mateChrIdx,matePos,readName,j,p,lengthOnRef,cigar,c,cigarArray,seq,seqBytes,qualArray;offset<ba.length;){if(blockSize=readInt(ba,offset),(blockEnd=offset+blockSize+4)>ba.length)return;if(alignment=new igv.BamAlignment,refID=readInt(ba,offset+4),pos=readInt(ba,offset+8),!(refID<0)){if(chrIdx&&(refID>chrIdx||pos>max))return;if(!(chrIdx&&refID<chrIdx)){for(bin_mq_nl=readInt(ba,offset+12),mq=(65280&bin_mq_nl)>>8,nl=255&bin_mq_nl,flag_nc=readInt(ba,offset+16),flag=(4294901760&flag_nc)>>16,nc=65535&flag_nc,lseq=readInt(ba,offset+20),mateChrIdx=readInt(ba,offset+24),matePos=readInt(ba,offset+28),tlen=readInt(ba,offset+32),readName=[],j=0;j<nl-1;++j)readName.push(String.fromCharCode(ba[offset+36+j]));for(readName=readName.join(""),lengthOnRef=0,cigar="",p=offset+36+nl,cigarArray=[],c=0;c<nc;++c){var cigop=readInt(ba,p),opLen=cigop>>4,opLtr=CIGAR_DECODER[15&cigop];"M"!=opLtr&&"EQ"!=opLtr&&"X"!=opLtr&&"D"!=opLtr&&"N"!=opLtr&&"="!=opLtr||(lengthOnRef+=opLen),cigar=cigar+opLen+opLtr,p+=4,cigarArray.push({len:opLen,ltr:opLtr})}if(alignment.chr=chrNames[refID],alignment.start=pos,alignment.flags=flag,alignment.strand=!(flag&READ_STRAND_FLAG),alignment.readName=readName,alignment.cigar=cigar,alignment.lengthOnRef=lengthOnRef,alignment.fragmentLength=tlen,alignment.mq=mq,igv.BamUtils.bam_tag2cigar(ba,blockEnd,p,lseq,alignment,cigarArray),alignment.end=alignment.start+alignment.lengthOnRef,alignment.end<min)offset=blockEnd;else{for(seq=[],seqBytes=lseq+1>>1,j=0;j<seqBytes;++j){var sb=ba[p+j];seq.push(SEQ_DECODER[(240&sb)>>4]),seq.push(SEQ_DECODER[15&sb])}if(seq=seq.slice(0,lseq).join(""),p+=seqBytes,1===lseq&&"*"===String.fromCharCode(ba[p+j]+33));else for(qualArray=[],j=0;j<lseq;++j)qualArray.push(ba[p+j]);p+=lseq,mateChrIdx>=0&&(alignment.mate={chr:chrNames[mateChrIdx],position:matePos,strand:!(flag&MATE_STRAND_FLAG)}),alignment.seq=seq,alignment.qual=qualArray,alignment.tagBA=new Uint8Array(ba.buffer.slice(p,blockEnd)),this.setPairOrientation(alignment),(!min||alignment.start<=max&&alignment.start+alignment.lengthOnRef>=min&&(void 0===filter||filter.pass(alignment)))&&(void 0!==chrIdx&&refID!=chrIdx||(blocks=makeBlocks(alignment,cigarArray),alignment.blocks=blocks.blocks,alignment.insertions=blocks.insertions,alignmentContainer.push(alignment))),offset=blockEnd}}}}},decodeSamRecords:function(sam,alignmentContainer,chr,min,max,filter){var lines,i,j,len,tokens,blocks,qualString,rnext,lengthOnRef,alignment,cigarArray,started;for(lines=sam.splitLines(),len=lines.length,started=!1,i=0;i<len;i++)if(tokens=lines[i].split("\t"),alignment=new igv.BamAlignment,alignment.chr=tokens[2],alignment.start=Number.parseInt(tokens[3])-1,alignment.flags=Number.parseInt(tokens[1]),alignment.readName=tokens[0],alignment.strand=!(alignment.flags&READ_STRAND_FLAG),alignment.mq=Number.parseInt(tokens[4]),alignment.cigar=tokens[5],alignment.fragmentLength=Number.parseInt(tokens[8]),alignment.seq=tokens[9],"*"!==alignment.chr&&alignment.isMapped())if(alignment.chr===chr){if(alignment.start>max)break;if(lengthOnRef=0,cigarArray=buildOperators(alignment.cigar),cigarArray.forEach(function(op){var opLen=op.len,opLtr=op.ltr;"M"!=opLtr&&"EQ"!=opLtr&&"X"!=opLtr&&"D"!=opLtr&&"N"!=opLtr&&"="!=opLtr||(lengthOnRef+=opLen)}),alignment.lengthOnRef=lengthOnRef,!(alignment.start+lengthOnRef<min)){for(qualString=tokens[10],alignment.qual=[],j=0;j<qualString.length;j++)alignment.qual[j]=qualString.charCodeAt(j)-33;alignment.tagDict=tokens.length<11?{}:decodeSamTags(tokens.slice(11)),alignment.isMateMapped()&&(rnext=tokens[6],alignment.mate={chr:"="===rnext?alignment.chr:rnext,position:Number.parseInt(tokens[7]),strand:!(alignment.flags&MATE_STRAND_FLAG)}),this.setPairOrientation(alignment),(void 0===filter||filter.pass(alignment))&&(blocks=makeBlocks(alignment,cigarArray),alignment.blocks=blocks.blocks,alignment.insertions=blocks.insertions,alignmentContainer.push(alignment))}}else if(started)break},setReaderDefaults:function(reader,config){reader.filter=config.filter||new igv.BamFilter,reader.samplingWindowSize=void 0===config.samplingWindowSize?100:config.samplingWindowSize,reader.samplingDepth=void 0===config.samplingDepth?50:config.samplingDepth,reader.samplingDepth>MAXIMUM_SAMPLING_DEPTH&&(igv.log("Warning: attempt to set sampling depth > maximum value of 2500"),reader.samplingDepth=MAXIMUM_SAMPLING_DEPTH),config.viewAsPairs?reader.pairsSupported=!0:reader.pairsSupported=void 0===config.pairsSupported||config.pairsSupported},setPairOrientation:function(alignment){if(alignment.isMapped()&&alignment.mate&&alignment.isMateMapped()&&alignment.mate.chr===alignment.chr){var s1=alignment.strand?"F":"R",mate=alignment.mate,s2=mate.strand?"F":"R",o1=" ",o2=" ";alignment.isFirstOfPair()?(o1="1",o2="2"):alignment.isSecondOfPair()&&(o1="2",o2="1");var tmp=[],isize=alignment.fragmentLength,estReadLen=alignment.end-alignment.start;0==isize&&(isize=(alignment.start<mate.start?mate.start+estReadLen:mate.start-estReadLen)-alignment.start),isize>0?(tmp[0]=s1,tmp[1]=o1,tmp[2]=s2,tmp[3]=o2):(tmp[2]=s1,tmp[3]=o1,tmp[0]=s2,tmp[1]=o2),alignment.pairOrientation=tmp.join("")}}},igv}(igv||{}),igv=function(igv){function getHeader(){var self=this;if(this.header)return Promise.resolve(this.header);var url=this.config.url+"?file="+this.config.alignmentFile+"&options=-b,-H",options=igv.buildOptions(this.config),genome=igv.browser?igv.browser.genome:null;return new Promise(function(fulfill,reject){igv.BamUtils.readHeader(url,options,genome).then(function(header){self.header=header,fulfill(header)}).catch(reject)})}return igv.BamWebserviceReader=function(config){this.config=config,igv.BamUtils.setReaderDefaults(this,config)},igv.BamWebserviceReader.prototype.readAlignments=function(chr,bpStart,bpEnd){var self=this;return new Promise(function(fulfill,reject){getHeader.call(self).then(function(header){var queryChr,url;queryChr=header.chrAliasTable.hasOwnProperty(chr)?header.chrAliasTable[chr]:chr,url=self.config.url+"?reference="+self.config.referenceFile+"&file="+self.config.alignmentFile+"&region="+queryChr+":"+bpStart+"-"+bpEnd,igv.xhr.loadString(url,igv.buildOptions(self.config)).then(function(sam){var alignmentContainer;header.chrToIndex[queryChr],alignmentContainer=new igv.AlignmentContainer(chr,bpStart,bpEnd,self.samplingWindowSize,self.samplingDepth,self.pairsSupported),igv.BamUtils.decodeSamRecords(sam,alignmentContainer,queryChr,bpStart,bpEnd,self.filter),fulfill(alignmentContainer)}).catch(function(obj){reject(obj)})}).catch(reject)})},igv}(igv||{}),igv=function(igv){var BLOCK_HEADER_LENGTH=18;return igv.unbgzf=function(data,lim){var oBlockList=[],ptr=[0],totalSize=0;for(lim=lim||data.byteLength-18;ptr[0]<lim;){var ba=new Uint8Array(data,ptr[0],18),xlen=ba[11]<<8|ba[10],bsize=(ba[12],ba[13],ba[15],ba[14],ba[17]<<8|ba[16]+1),start=12+xlen+ptr[0],length=data.byteLength-start;if(length<bsize+8)break;var unc=jszlib_inflate_buffer(data,start,length,ptr);ptr[0]+=8,totalSize+=unc.byteLength,oBlockList.push(unc)}if(1==oBlockList.length)return oBlockList[0];for(var out=new Uint8Array(totalSize),cursor=0,i=0;i<oBlockList.length;++i){var b=new Uint8Array(oBlockList[i]);arrayCopy(b,0,out,cursor,b.length),cursor+=b.length}return out.buffer},igv.BGZFile=function(config){this.filePosition=0,this.config=config},igv.BGZFile.prototype.nextBlock=function(){var self=this;return new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:self.filePosition,size:BLOCK_HEADER_LENGTH}})).then(function(arrayBuffer){var ba=new Uint8Array(arrayBuffer),bsize=(ba[11],ba[10],ba[12],ba[13],ba[15],ba[14],ba[17]<<8|ba[16]+1);self.filePosition+=BLOCK_HEADER_LENGTH,igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:self.filePosition,size:bsize}})).then(function(arrayBuffer){var unc=jszlib_inflate_buffer(arrayBuffer);self.filePosition+=bsize+8,fulfill(unc)}).catch(reject)}).catch(reject)})},igv}(igv||{}),igv=function(igv){function Coverage(){this.posA=0,this.negA=0,this.posT=0,this.negT=0,this.posC=0,this.negC=0,this.posG=0,this.negG=0,this.posN=0,this.negN=0,this.pos=0,this.neg=0,this.qualA=0,this.qualT=0,this.qualC=0,this.qualG=0,this.qualN=0,this.qual=0,this.total=0}return igv.CoverageMap=function(chr,start,end,alignments,refSeq){var myself=this;this.refSeq=refSeq,this.chr=chr,this.bpStart=start,this.length=end-start,this.coverage=new Array(this.length),this.maximum=0,alignments.forEach(function(alignment){alignment.blocks.forEach(function(block){var key,base,i,j,q;for(i=block.start-myself.bpStart,j=0;j<block.len;i++,j++)myself.coverage[i]||(myself.coverage[i]=new Coverage),base=block.seq.charAt(j),key=alignment.strand?"pos"+base:"neg"+base,q=block.qual[j],myself.coverage[i][key]+=1,myself.coverage[i]["qual"+base]+=q,myself.coverage[i].total+=1,myself.coverage[i].qual+=q,myself.maximum=Math.max(myself.coverage[i].total,myself.maximum)})})},igv.CoverageMap.threshold=.2,igv.CoverageMap.qualityWeight=!0,Coverage.prototype.isMismatch=function(refBase){var mismatchQualitySum,myself=this,threshold=igv.CoverageMap.threshold*(igv.CoverageMap.qualityWeight&&this.qual?this.qual:this.total);return mismatchQualitySum=0,["A","T","C","G"].forEach(function(base){base!==refBase&&(mismatchQualitySum+=igv.CoverageMap.qualityWeight&&myself.qual?myself["qual"+base]:myself["pos"+base]+myself["neg"+base])}),mismatchQualitySum>=threshold},igv}(igv||{}),igv=function(igv){function loadUrls(urls){var promiseArray=[];return urls.forEach(function(urlData){if(urlData.url.startsWith("data:"))promiseArray.push(Promise.resolve(dataUriToBlob(urlData.url)));else{var options={};urlData.headers&&(options.headers=urlData.headers,options.headers.hasOwnProperty("referer")&&delete options.headers.referer),promiseArray.push(new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(urlData.url,options).then(function(buffer){fulfill(new Uint8Array(buffer))})}))}}),Promise.all(promiseArray)}function concatArrays(arrays){var len,newArray,offset;return len=0,arrays.forEach(function(a){len+=a.length}),offset=0,newArray=new Uint8Array(len),arrays.forEach(function(a){newArray.set(a,offset),offset+=a.length}),newArray}function dataUriToBlob(dataUri){var bytes,split=dataUri.split(","),info=split[0].split(":")[1],dataString=split[1];dataString=info.indexOf("base64")>=0?atob(dataString):decodeURI(dataString),bytes=new Uint8Array(dataString.length);for(var i=0;i<dataString.length;i++)bytes[i]=dataString.charCodeAt(i);return bytes}return igv.HtsgetReader=function(config){this.config=config,igv.BamUtils.setReaderDefaults(this,config)},igv.HtsgetReader.prototype.readAlignments=function(chr,start,end,retryCount){var queryChr,url,self=this;return queryChr=self.header&&self.header.chrAliasTable.hasOwnProperty(chr)?self.header.chrAliasTable[chr]:chr,url=self.config.endpoint+"/reads/"+self.config.id+"?referenceName="+queryChr+"&start="+start+"&end="+end,igv.xhr.loadJson(url,self.config).then(function(data){return loadUrls(data.htsget.urls)}).then(function(dataArr){var compressedData,unc,ba,alignmentContainer,chrIdx;if(compressedData=concatArrays(dataArr),unc=igv.unbgzf(compressedData.buffer),ba=new Uint8Array(unc),!self.header){var genome=igv.browser?igv.browser.genome:void 0;self.header=igv.BamUtils.decodeBamHeader(ba,genome)}return chrIdx=self.header.chrToIndex[chr],void 0!==chrIdx||queryChr===self.header.chrAliasTable.hasOwnProperty(chr)||retryCount?(alignmentContainer=new igv.AlignmentContainer(chr,start,end,self.samplingWindowSize,self.samplingDepth,self.pairsSupported),igv.BamUtils.decodeBamRecords(ba,self.header.size,alignmentContainer,self.header.chrNames,chrIdx,start,end),alignmentContainer.finish(),alignmentContainer):(queryChr=self.header.chrAliasTable[chr],self.readAlignments(queryChr,start,end,1))})},igv}(igv||{}),igv=function(igv){return igv.PairedAlignment=function(firstAlignment){this.firstAlignment=firstAlignment,this.chr=firstAlignment.chr,this.readName=firstAlignment.readName,firstAlignment.start<firstAlignment.mate.position?(this.start=firstAlignment.start,this.end=Math.max(firstAlignment.mate.position,firstAlignment.start+firstAlignment.lengthOnRef),this.connectingStart=firstAlignment.start+firstAlignment.lengthOnRef,this.connectingEnd=firstAlignment.mate.position):(this.start=firstAlignment.mate.position,this.end=firstAlignment.start+firstAlignment.lengthOnRef,this.connectingStart=firstAlignment.mate.position,this.connectingEnd=firstAlignment.start),this.lengthOnRef=this.end-this.start},igv.PairedAlignment.prototype.setSecondAlignment=function(alignment){this.secondAlignment=alignment,alignment.start>this.firstAlignment.start?(this.end=alignment.start+alignment.lengthOnRef,this.connectingEnd=alignment.start):(this.start=alignment.start,this.connectingStart=alignment.start+alignment.lengthOnRef),this.lengthOnRef=this.end-this.start},igv.PairedAlignment.prototype.popupData=function(genomicLocation){var nameValues=[];return nameValues=nameValues.concat(this.firstAlignment.popupData(genomicLocation)),this.secondAlignment&&(nameValues.push("-------------------------------"),nameValues=nameValues.concat(this.secondAlignment.popupData(genomicLocation))),nameValues},igv.PairedAlignment.prototype.isPaired=function(){return!0},igv.PairedAlignment.prototype.firstOfPairStrand=function(){return this.firstAlignment.isFirstOfPair()?this.firstAlignment.strand:this.secondAlignment&&this.secondAlignment.isFirstOfPair()?this.secondAlignment.strand:this.firstAlignment.mate.strand},igv}(igv||{}),igv=function(igv){return igv.ShardedBamReader=function(config){var genome,alias,bamReaders,chrAliasTable;this.config=config,bamReaders={},chrAliasTable={},genome=igv.browser?igv.browser.genome:void 0,config.sources.sequences.forEach(function(chr){bamReaders[chr]=null,genome&&(alias=genome.getChromosomeName(chr),chrAliasTable[alias]=chr)}),this.chrAliasTable=chrAliasTable,this.bamReaders=bamReaders,igv.BamUtils.setReaderDefaults(this,config)},igv.ShardedBamReader.prototype.readAlignments=function(chr,start,end){var queryChr,reader,tmp,bamConfig,self=this;return queryChr=self.chrAliasTable.hasOwnProperty(chr)?self.chrAliasTable[chr]:chr,this.bamReaders.hasOwnProperty(queryChr)&&"none"!==this.bamReaders[queryChr]?(reader=self.bamReaders[queryChr],reader||(tmp={url:self.config.sources.url.replace("$CHR",queryChr)},self.config.sources.indexURL&&(tmp.indexURL=self.config.sources.indexURL.replace("$CHR",queryChr)),bamConfig=Object.assign(self.config,tmp),reader=new igv.BamReader(bamConfig),self.bamReaders[queryChr]=reader),reader.readAlignments(queryChr,start,end).catch(function(error){return console.error(error),igv.presentAlert("Error reading BAM or index file for: "+tmp.url),self.bamReaders[queryChr]="none",new igv.AlignmentContainer(chr,start,end)})):Promise.resolve(new igv.AlignmentContainer(chr,start,end))},igv}(igv||{}),igv=function(igv){return igv.isb={querySegByStudy:function(study,limit){var q='SELECT * FROM [isb-cgc:tcga_201510_alpha.Copy_Number_segments] WHERE ParticipantBarcode IN (SELECT ParticipantBarcode FROM [isb-cgc:tcga_201510_alpha.Clinical_data] WHERE Study = "'+study+'")';return limit&&(q+=" limit "+limit),q},decodeSeg:function(row){var seg={};return seg.ParticipantBarcode=row.f[0].v,seg.Study=row.f[4].v,seg.Chromosome=row.f[6].v,seg.Start=row.f[7].v,seg.End=row.f[8].v,seg.Num_Probes=row.f[9].v,seg.Segment_mean=row.f[10].v,seg}},igv}(igv||{}),igv=function(igv){return igv.BufferedReader=function(config,contentLength,bufferSize){this.path=config.url,this.contentLength=contentLength,this.bufferSize=bufferSize||512e3,this.range={start:-1,size:-1},this.config=config},igv.BufferedReader.prototype.dataViewForRange=function(requestedRange,asUint8){function subbuffer(bufferedReader,requestedRange,asUint8){var len=bufferedReader.data.byteLength,bufferStart=requestedRange.start-bufferedReader.range.start;return asUint8?new Uint8Array(bufferedReader.data,bufferStart,len-bufferStart):new DataView(bufferedReader.data,bufferStart,len-bufferStart)}var bufferSize,loadRange,self=this,hasData=self.data&&self.range.start<=requestedRange.start&&self.range.start+self.range.size>=requestedRange.start+requestedRange.size;return hasData?Promise.resolve(subbuffer(self,requestedRange,asUint8)):(bufferSize=requestedRange.size?Math.max(self.bufferSize,requestedRange.size):self.bufferSize,loadRange=self.contentLength>0&&requestedRange.start+bufferSize>self.contentLength?{start:requestedRange.start}:{start:requestedRange.start,size:bufferSize},igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:loadRange})).then(function(arrayBuffer){return self.data=arrayBuffer,self.range=loadRange,subbuffer(self,requestedRange,asUint8)}))},igv}(igv||{}),igv=function(igv){function ZoomLevelHeader(index,byteBuffer){this.index=index,this.reductionLevel=byteBuffer.getInt(),this.reserved=byteBuffer.getInt(),this.dataOffset=byteBuffer.getLong(),this.indexOffset=byteBuffer.getLong()}function RPTree(fileOffset,contentLength,config,littleEndian){this.config=config,this.filesize=contentLength,this.fileOffset=fileOffset,this.path=config.url,this.littleEndian=littleEndian}function RPTreeNode(items){this.items=items;var i,item,minChromId=Number.MAX_VALUE,maxChromId=0,minStartBase=Number.MAX_VALUE,maxEndBase=0;for(i=0;i<items.length;i++)item=items[i],minChromId=Math.min(minChromId,item.startChrom),maxChromId=Math.max(maxChromId,item.endChrom),minStartBase=Math.min(minStartBase,item.startBase),maxEndBase=Math.max(maxEndBase,item.endBase);this.startChrom=minChromId,this.endChrom=maxChromId,this.startBase=minStartBase,this.endBase=maxEndBase}function BPTree(binaryParser,startOffset){function readTreeNode(byteBuffer,offset){offset>=0&&(byteBuffer.position=offset);var i,key,chromId,childOffset,bufferOffset,currOffset,type=byteBuffer.getByte(),count=(byteBuffer.getByte(),byteBuffer.getUShort());if(1==type)for(i=0;i<count;i++)key=byteBuffer.getFixedLengthTrimmedString(keySize),chromId=byteBuffer.getInt(),byteBuffer.getInt(),genome&&(key=genome.getChromosomeName(key)),chromToId[key]=chromId,idToChrom[chromId]=key;else for(i=0;i<count;i++)key=byteBuffer.getFixedLengthTrimmedString(keySize),childOffset=byteBuffer.getLong(),bufferOffset=childOffset-startOffset,currOffset=byteBuffer.position,readTreeNode(byteBuffer,bufferOffset),byteBuffer.position=currOffset}var genome=igv.browser?igv.browser.genome:null,keySize=(binaryParser.getInt(),binaryParser.getInt(),binaryParser.getInt()),chromToId=(binaryParser.getInt(),binaryParser.getLong(),binaryParser.getLong(),{}),idToChrom=[];this.chromToID=chromToId,this.idToChrom=idToChrom,readTreeNode(binaryParser,-1)}function overlaps(item,chrIdx1,startBase,chrIdx2,endBase){return item?(chrIdx2>item.startChrom||chrIdx2==item.startChrom&&endBase>=item.startBase)&&(chrIdx1<item.endChrom||chrIdx1==item.endChrom&&startBase<=item.endBase):(console.log("null item"),!1)}function BWTotalSummary(byteBuffer){byteBuffer?(this.basesCovered=byteBuffer.getLong(),this.minVal=byteBuffer.getDouble(),this.maxVal=byteBuffer.getDouble(),this.sumData=byteBuffer.getDouble(),this.sumSquares=byteBuffer.getDouble(),computeStats.call(this)):(this.basesCovered=0,this.minVal=0,this.maxVal=0,this.sumData=0,this.sumSquares=0,this.mean=0,this.stddev=0)}function computeStats(){var n=this.basesCovered;if(n>0){this.mean=this.sumData/n,this.stddev=Math.sqrt(this.sumSquares/(n-1));this.minVal<0&&(this.mean,this.stddev),this.maxVal>0&&(this.mean,this.stddev);this.defaultRange={min:0,max:this.mean+3*this.stddev}}}function zoomLevelForScale(bpPerPixel,zoomLevelHeaders){var i,zl,level=null;for(i=0;i<zoomLevelHeaders.length;i++)if(zl=zoomLevelHeaders[i],zl.reductionLevel<bpPerPixel){level=zl;break}return level}function decodeWigData(data,chrIdx1,bpStart,chrIdx2,bpEnd,featureArray,chrDict){var value,chr,binaryParser=new igv.BinaryParser(data),chromId=binaryParser.getInt(),chromStart=binaryParser.getInt(),chromEnd=binaryParser.getInt(),itemStep=binaryParser.getInt(),itemSpan=binaryParser.getInt(),type=binaryParser.getByte(),itemCount=(binaryParser.getByte(),binaryParser.getUShort());if(chromId>=chrIdx1&&chromId<=chrIdx2)for(;itemCount-- >0;){switch(type){case 1:chromStart=binaryParser.getInt(),chromEnd=binaryParser.getInt(),value=binaryParser.getFloat();break;case 2:chromStart=binaryParser.getInt(),value=binaryParser.getFloat(),chromEnd=chromStart+itemSpan;break;case 3:value=binaryParser.getFloat(),chromEnd=chromStart+itemSpan,chromStart+=itemStep}if(!(chromId<chrIdx1||chromId===chrIdx1&&chromEnd<bpStart)){if(chromId>chrIdx2||chromId===chrIdx2&&chromStart>=bpEnd)break;Number.isFinite(value)&&(chr=chrDict[chromId],featureArray.push({chr:chr,start:chromStart,end:chromEnd,value:value}))}}}function decodeBedData(data,chrIdx1,bpStart,chrIdx2,bpEnd,featureArray,chrDict){for(var chromId,chromStart,chromEnd,rest,tokens,feature,exonCount,exonSizes,exonStarts,exons,eStart,eEnd,chr,binaryParser=new igv.BinaryParser(data),minSize=13;binaryParser.remLength()>=minSize;)if(chromId=binaryParser.getInt(),chr=chrDict[chromId],chromStart=binaryParser.getInt(),chromEnd=binaryParser.getInt(),rest=binaryParser.getString(),!(chromId<chrIdx1||chromId===chrIdx1&&chromEnd<bpStart)){if(chromId>chrIdx2||chromId===chrIdx2&&chromStart>=bpEnd)break;if(feature={chr:chr,start:chromStart,end:chromEnd},featureArray.push(feature),tokens=rest.split("\t"),tokens.length>0&&(feature.name=tokens[0]),tokens.length>1&&(feature.score=parseFloat(tokens[1])),tokens.length>2&&(feature.strand=tokens[2]),tokens.length>3&&(feature.cdStart=parseInt(tokens[3])),tokens.length>4&&(feature.cdEnd=parseInt(tokens[4])),tokens.length>5&&"."!==tokens[5]&&"0"!==tokens[5]&&(feature.color=igv.Color.createColorString(tokens[5])),tokens.length>8){exonCount=parseInt(tokens[6]),exonSizes=tokens[7].split(","),exonStarts=tokens[8].split(","),exons=[];for(var i=0;i<exonCount;i++)eStart=start+parseInt(exonStarts[i]),eEnd=eStart+parseInt(exonSizes[i]),exons.push({start:eStart,end:eEnd});feature.exons=exons}}}function decodeZoomData(data,chrIdx1,bpStart,chrIdx2,bpEnd,featureArray,chrDict,windowFunction){for(var chromId,chromStart,chromEnd,validCount,minVal,maxVal,sumData,value,chr,binaryParser=new igv.BinaryParser(data),minSize=32;binaryParser.remLength()>=minSize;){switch(chromId=binaryParser.getInt(),chr=chrDict[chromId],chromStart=binaryParser.getInt(),chromEnd=binaryParser.getInt(),validCount=binaryParser.getInt(),minVal=binaryParser.getFloat(),maxVal=binaryParser.getFloat(),sumData=binaryParser.getFloat(),binaryParser.getFloat(),windowFunction){case"min":value=minVal;break;case"max":value=maxVal;break;default:value=0==validCount?0:sumData/validCount}if(!(chromId<chrIdx1||chromId===chrIdx1&&chromEnd<bpStart)){if(chromId>chrIdx2||chromId===chrIdx2&&chromStart>=bpEnd)break;Number.isFinite(value)&&featureArray.push({chr:chr,start:chromStart,end:chromEnd,value:value})}}}var BBFILE_HEADER_SIZE=64,BUFFER_SIZE=512e3;return igv.BWReader=function(config){this.path=config.url,this.headPath=config.headURL||this.path,this.rpTreeCache={},this.config=config},igv.BWReader.prototype.readWGFeatures=function(genome,bpPerPixel,windowFunction){var self=this;return self.getZoomHeaders().then(function(zoomLevelHeaders){var chrIdx1,chrIdx2,chr1,chr2;return chrIdx1=0,chrIdx2=self.chromTree.idToChrom.length-1,chr1=self.chromTree.idToChrom[chrIdx1],chr2=self.chromTree.idToChrom[chrIdx2],self.readFeatures(chr1,0,chr2,Number.MAX_VALUE,bpPerPixel,windowFunction)})},igv.BWReader.prototype.readFeatures=function(chr1,bpStart,chr2,bpEnd,bpPerPixel,windowFunction){var decodeFunction,chrIdx1,chrIdx2,self=this,bufferedReader=new igv.BufferedReader(self.config);return self.getZoomHeaders().then(function(zoomLevelHeaders){var treeOffset,zoomLevelHeader=zoomLevelForScale(bpPerPixel,zoomLevelHeaders);return zoomLevelHeader?(treeOffset=zoomLevelHeader.indexOffset,decodeFunction=decodeZoomData):(treeOffset=self.header.fullIndexOffset,decodeFunction="BigWig"===self.type?decodeWigData:decodeBedData),self.loadRPTree(treeOffset)}).then(function(rpTree){return chrIdx1=self.chromTree.chromToID[chr1],chrIdx2=self.chromTree.chromToID[chr2],void 0===chrIdx1||void 0===chrIdx2?void 0:rpTree.findLeafItemsOverlapping(chrIdx1,bpStart,chrIdx2,bpEnd)}).then(function(leafItems){var promises=[];return leafItems&&0!=leafItems.length?(leafItems.forEach(function(item){promises.push(bufferedReader.dataViewForRange({start:item.dataOffset,size:item.dataSize},!0).then(function(uint8Array){var features=[],inflate=new Zlib.Inflate(uint8Array),plain=inflate.decompress();return decodeFunction(new DataView(plain.buffer),chrIdx1,bpStart,chrIdx2,bpEnd,features,self.chromTree.idToChrom,windowFunction),features}))}),Promise.all(promises)):[]}).then(function(featureArrays){var allFeatures=[];return allFeatures=allFeatures.concat.apply(allFeatures,featureArrays),allFeatures.sort(function(a,b){return a.start-b.start}),allFeatures})},igv.BWReader.prototype.getZoomHeaders=function(){var self=this;return self.zoomLevelHeaders?Promise.resolve(self.zoomLevelHeaders):self.loadHeader().then(function(){return self.zoomLevelHeaders})},igv.BWReader.prototype.loadHeader=function(){function loadZoomHeadersAndChrTree(){var startOffset=BBFILE_HEADER_SIZE,self=this,range={start:startOffset,size:self.header.fullDataOffset-startOffset+5};return igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:range})).then(function(data){var i,zoomNumber,zlh,nZooms=self.header.nZoomLevels,binaryParser=new igv.BinaryParser(new DataView(data));for(self.zoomLevelHeaders=[],self.firstZoomDataOffset=Number.MAX_VALUE,i=1;i<=nZooms;i++)zoomNumber=nZooms-i,zlh=new ZoomLevelHeader(zoomNumber,binaryParser),self.firstZoomDataOffset=Math.min(zlh.dataOffset,self.firstZoomDataOffset),self.zoomLevelHeaders[zoomNumber]=zlh;return self.header.autoSqlOffset>0&&(binaryParser.position=self.header.autoSqlOffset-startOffset,self.autoSql=binaryParser.getString()),self.header.totalSummaryOffset>0&&(binaryParser.position=self.header.totalSummaryOffset-startOffset,self.totalSummary=new BWTotalSummary(binaryParser)),self.header.chromTreeOffset>0&&(binaryParser.position=self.header.chromTreeOffset-startOffset,self.chromTree=new BPTree(binaryParser,startOffset)),binaryParser.position=self.header.fullDataOffset-startOffset,self.dataCount=binaryParser.getInt(),self.header})}var self=this;return igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:0,size:BBFILE_HEADER_SIZE}})).then(function(data){var header;self.littleEndian=!0;var binaryParser=new igv.BinaryParser(new DataView(data)),magic=binaryParser.getUInt();if(2291137574===magic)self.type="BigWig";else if(2273964779==magic)self.type="BigBed";else{self.littleEndian=!1,binaryParser.littleEndian=!1,binaryParser.position=0;var magic=binaryParser.getUInt();654085990===magic?self.type="BigWig":3958540679==magic&&(self.type="BigBed")}return header={},header.bwVersion=binaryParser.getUShort(),header.nZoomLevels=binaryParser.getUShort(),header.chromTreeOffset=binaryParser.getLong(),header.fullDataOffset=binaryParser.getLong(),header.fullIndexOffset=binaryParser.getLong(),header.fieldCount=binaryParser.getUShort(),header.definedFieldCount=binaryParser.getUShort(),header.autoSqlOffset=binaryParser.getLong(),header.totalSummaryOffset=binaryParser.getLong(),header.uncompressBuffSize=binaryParser.getInt(),header.reserved=binaryParser.getLong(),header}).then(function(header){return self.header=header,loadZoomHeadersAndChrTree.call(self)})},igv.BWReader.prototype.loadRPTree=function(offset){var self=this,rpTree=self.rpTreeCache[offset];return rpTree?Promise.resolve(rpTree):(rpTree=new RPTree(offset,self.contentLength,self.config,self.littleEndian),self.rpTreeCache[offset]=rpTree,rpTree.load())},RPTree.prototype.load=function(){var self=this,rootNodeOffset=self.fileOffset+48,bufferedReader=new igv.BufferedReader(self.config,self.filesize,BUFFER_SIZE);return self.readNode(rootNodeOffset,bufferedReader).then(function(node){return self.rootNode=node,self})},RPTree.prototype.readNode=function(filePosition,bufferedReader){var count,isLeaf,self=this;return bufferedReader.dataViewForRange({start:filePosition,size:4},!1).then(function(dataView){var binaryParser,type;binaryParser=new igv.BinaryParser(dataView,self.littleEndian),type=binaryParser.getByte(),isLeaf=1===type,binaryParser.getByte(),count=binaryParser.getUShort(),filePosition+=4;var bytesRequired=count*(isLeaf?32:24),range2={start:filePosition,size:bytesRequired};return bufferedReader.dataViewForRange(range2,!1)}).then(function(dataView){var i,items=new Array(count),binaryParser=new igv.BinaryParser(dataView);if(isLeaf){for(i=0;i<count;i++){var item={isLeaf:!0,startChrom:binaryParser.getInt(),startBase:binaryParser.getInt(),endChrom:binaryParser.getInt(),endBase:binaryParser.getInt(),dataOffset:binaryParser.getLong(),dataSize:binaryParser.getLong()};items[i]=item}return new RPTreeNode(items)}for(i=0;i<count;i++){var item={isLeaf:!1,startChrom:binaryParser.getInt(),startBase:binaryParser.getInt(),endChrom:binaryParser.getInt(),endBase:binaryParser.getInt(),childOffset:binaryParser.getLong()};items[i]=item}return new RPTreeNode(items)})},RPTree.prototype.findLeafItemsOverlapping=function(chrIdx1,startBase,chrIdx2,endBase){var self=this;return new Promise(function(fulfill,reject){function findLeafItems(node,nodeId){overlaps(node,chrIdx1,startBase,chrIdx2,endBase)&&node.items.forEach(function(item){overlaps(item,chrIdx1,startBase,chrIdx2,endBase)&&(item.isLeaf?leafItems.push(item):item.childNode?findLeafItems(item.childNode):(processing.add(item.childOffset),self.readNode(item.childOffset,bufferedReader).then(function(node){item.childNode=node,findLeafItems(node,item.childOffset)}).catch(reject)))}),void 0!=nodeId&&processing.delete(nodeId),0===processing.size&&fulfill(leafItems)}var leafItems=[],processing=new Set,bufferedReader=new igv.BufferedReader(self.config,self.filesize,BUFFER_SIZE);processing.add(0),findLeafItems(self.rootNode,0)})},BWTotalSummary.prototype.updateStats=function(stats){this.basesCovered+=stats.count,this.sumData+=status.sumData,this.sumSquares+=sumSquares,this.minVal=MIN(_minVal,min),this.maxVal=MAX(_maxVal,max),computeStats.call(this)},igv}(igv||{}),igv=function(igv){return igv.BWSource=function(config){this.reader=new igv.BWReader(config),this.wgValues={}},igv.BWSource.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel,windowFunction){var self=this;return"all"===chr.toLowerCase()?self.getWGValues(windowFunction):self.reader.readFeatures(chr,bpStart,chr,bpEnd,bpPerPixel,windowFunction)},igv.BWSource.prototype.getDefaultRange=function(){return void 0!=this.reader.totalSummary?this.reader.totalSummary.defaultRange:void 0},igv.BWSource.prototype.getWGValues=function(windowFunction){var bpPerPixel,self=this;return self.wgValues[windowFunction]?Promise.resolve(self.wgValues[windowFunction]):(bpPerPixel=igv.browser.genome.getGenomeLength()/500,self.reader.readWGFeatures(igv.browser.genome,bpPerPixel,windowFunction).then(function(features){var wgValues=[];return features.forEach(function(f){var wgFeature,offset,chr;chr=f.chr,offset=igv.browser.genome.getCumulativeOffset(chr),wgFeature=Object.assign({},f),wgFeature.chr="all",wgFeature.start=offset+f.start,wgFeature.end=offset+f.end,wgValues.push(wgFeature)}),self.wgValues[windowFunction]=wgValues,wgValues}))},igv}(igv||{}),igv=function(igv){function VPointer(block,offset){this.block=block,this.offset=offset}return igv.BinaryParser=function(dataView,littleEndian){this.littleEndian=littleEndian||!0,this.position=0,this.view=dataView,this.length=dataView.byteLength},igv.BinaryParser.prototype.available=function(){return this.length-this.position},igv.BinaryParser.prototype.remLength=function(){return this.length-this.position},igv.BinaryParser.prototype.hasNext=function(){return this.position<this.length-1},igv.BinaryParser.prototype.getByte=function(){var retValue=this.view.getUint8(this.position,this.littleEndian);return this.position++,retValue},igv.BinaryParser.prototype.getShort=function(){var retValue=this.view.getInt16(this.position,this.littleEndian);return this.position+=2,retValue},igv.BinaryParser.prototype.getUShort=function(){var retValue=this.view.getUint16(this.position,this.littleEndian);return this.position+=2,retValue},igv.BinaryParser.prototype.getInt=function(){var retValue=this.view.getInt32(this.position,this.littleEndian);return this.position+=4,retValue},igv.BinaryParser.prototype.getUInt=function(){var retValue=this.view.getUint32(this.position,this.littleEndian);return this.position+=4,retValue},igv.BinaryParser.prototype.getLong=function(){var b=[];b[0]=this.view.getUint8(this.position),b[1]=this.view.getUint8(this.position+1),b[2]=this.view.getUint8(this.position+2),b[3]=this.view.getUint8(this.position+3),b[4]=this.view.getUint8(this.position+4),b[5]=this.view.getUint8(this.position+5),b[6]=this.view.getUint8(this.position+6),b[7]=this.view.getUint8(this.position+7);var value=0;if(this.littleEndian)for(var i=b.length-1;i>=0;i--)value=256*value+b[i];else for(var i=0;i<b.length;i++)value=256*value+b[i];return this.position+=8,value},igv.BinaryParser.prototype.getString=function(len){for(var c,s="";0!=(c=this.view.getUint8(this.position++))&&(s+=String.fromCharCode(c),!len||s.length!=len););return s},igv.BinaryParser.prototype.getFixedLengthString=function(len){var i,c,s="";for(i=0;i<len;i++)(c=this.view.getUint8(this.position++))>0&&(s+=String.fromCharCode(c));return s},igv.BinaryParser.prototype.getFixedLengthTrimmedString=function(len){var i,c,s="";for(i=0;i<len;i++)(c=this.view.getUint8(this.position++))>32&&(s+=String.fromCharCode(c));return s},igv.BinaryParser.prototype.getFloat=function(){var retValue=this.view.getFloat32(this.position,this.littleEndian);return this.position+=4,retValue},igv.BinaryParser.prototype.getDouble=function(){var retValue=this.view.getFloat64(this.position,this.littleEndian);return this.position+=8,retValue},igv.BinaryParser.prototype.skip=function(n){return this.position+=n,this.position},igv.BinaryParser.prototype.getVPointer=function(){var position=this.position,offset=this.view.getUint8(position+1)<<8|this.view.getUint8(position),byte6=4294967296*(255&this.view.getUint8(position+6)),byte5=16777216*(255&this.view.getUint8(position+5)),byte4=65536*(255&this.view.getUint8(position+4)),byte3=256*(255&this.view.getUint8(position+3)),byte2=255&this.view.getUint8(position+2),block=byte6+byte5+byte4+byte3+byte2;return this.position+=8,new VPointer(block,offset)},VPointer.prototype.isLessThan=function(vp){return this.block<vp.block||this.block===vp.block&&this.offset<vp.offset},VPointer.prototype.isGreaterThan=function(vp){return this.block>vp.block||this.block===vp.block&&this.offset>vp.offset},VPointer.prototype.print=function(){return this.block+":"+this.offset},igv}(igv||{}),igv=function(igv){function initialize(options){this.flanking=options.flanking,this.type=options.type||"IGV",this.crossDomainProxy=options.crossDomainProxy,this.formats=options.formats,this.trackDefaults=options.trackDefaults,options.search?this.searchConfig={type:"json",url:options.search.url,coords:void 0===options.search.coords?1:options.search.coords,chromosomeField:options.search.chromosomeField||"chromosome",startField:options.search.startField||"start",endField:options.search.endField||"end",geneField:options.search.geneField||"geneSymbol",snpField:options.search.snpField||"snp",resultsField:options.search.resultsField}:(options.reference&&options.reference.id?options.reference.id:options.genome?options.genome:"hg19",this.searchConfig={type:"plain",url:"https://portals.broadinstitute.org/webservices/igv/locus?genome=$GENOME$&name=$FEATURE$",coords:0,chromosomeField:"chromosome",startField:"start",endField:"end"})}function parseSearchResults(data){var lines,linesTrimmed=[],results=[];return lines=data.splitLines(),lines.forEach(function(item){""===item||linesTrimmed.push(item)}),linesTrimmed.forEach(function(line){var source,locusTokens,rangeTokens,obj,tokens=line.split("\t");tokens.length>=3&&(locusTokens=tokens[1].split(":"),rangeTokens=locusTokens[1].split("-"),source=tokens[2].trim(),obj={gene:tokens[0],chromosome:igv.browser.genome.getChromosomeName(locusTokens[0].trim()),start:parseInt(rangeTokens[0].replace(/,/g,"")),end:parseInt(rangeTokens[1].replace(/,/g,"")),type:"gtex"===source?"snp":"gene"},results.push(obj))}),results}function attachTrackContainerMouseHandlers(trackContainerDiv){function mouseUpOrOut(e){isRulerTrack||igv.browser.$cursorTrackingGuide&&e.toElement===igv.browser.$cursorTrackingGuide.get(0)&&"mouseleave"===e.type||(isDragging&&(igv.browser.fireEvent("trackdragend"),isDragging=!1),isMouseDown=!1,mouseDownX=lastMouseX=void 0,$viewport=viewport=void 0,referenceFrame=void 0)}var $viewport,viewport,viewports,referenceFrame,isRulerTrack=!1,isMouseDown=!1,isDragging=!1,lastMouseX=void 0,mouseDownX=void 0;$(trackContainerDiv).mousedown(function(e){var coords,$target;if(e.preventDefault(),igv.popover&&igv.popover.hide(),$target=$(e.target),$viewport=$target.parents(".igv-viewport-div"),0===_.size($viewport))return void($viewport=void 0);(isRulerTrack=!!$target.parents("div[data-ruler-track='rulerTrack']").get(0))||(isMouseDown=!0,coords=igv.translateMouseCoordinates(e,$viewport.get(0)),mouseDownX=lastMouseX=coords.x,viewport=igv.Viewport.viewportWithID($viewport.data("viewport")),referenceFrame=viewport.genomicState.referenceFrame,viewports=igv.Viewport.viewportsWithLocusIndex($viewport.data("locusindex")))}),$(trackContainerDiv).mousemove(function(e){var xy,_left,$element=igv.browser.$cursorTrackingGuide;e.preventDefault(),xy=igv.translateMouseCoordinates(e,trackContainerDiv),_left=Math.max(50,xy.x-5),_left=Math.min(igv.browser.trackContainerDiv.clientWidth-65,_left),$element.css({left:_left+"px"})}),$(trackContainerDiv).mousemove(igv.throttle(function(e){var coords,maxEnd,maxStart;if(e.preventDefault(),!0!==isRulerTrack&&void 0!==$viewport&&($viewport&&(coords=igv.translateMouseCoordinates(e,$viewport.get(0))),referenceFrame&&isMouseDown)){if(mouseDownX&&Math.abs(coords.x-mouseDownX)>igv.browser.constants.dragThreshold){if(igv.browser.loadInProgress())return;isDragging=!0,referenceFrame.shiftPixels(lastMouseX-coords.x),referenceFrame.start=Math.max(0,referenceFrame.start);maxEnd=igv.browser.genome.getChromosome(referenceFrame.chrName).bpLength,maxStart=maxEnd-viewport.$viewport.width()*referenceFrame.bpPerPixel,referenceFrame.start>maxStart&&(referenceFrame.start=maxStart),igv.browser.updateLocusSearchWidget(_.first(igv.browser.genomicStateList)),igv.browser.repaintWithLocusIndex(viewport.genomicState.locusIndex),igv.browser.fireEvent("trackdrag")}lastMouseX=coords.x}},10)),$(trackContainerDiv).mouseup(mouseUpOrOut),$(trackContainerDiv).mouseleave(mouseUpOrOut)}return igv.Browser=function(options,trackContainerDiv){this.config=options,igv.browser=this,igv.browser.$root=$('<div id="igvRootDiv" class="igv-root-div">'),initialize.call(this,options),$("input[id='trackHeightInput']").val(this.trackHeight),this.trackContainerDiv=trackContainerDiv,attachTrackContainerMouseHandlers(this.trackContainerDiv),this.trackViews=[],this.trackLabelsVisible=!0,this.featureDB={},this.constants={dragThreshold:3,defaultColor:"rgb(0,0,150)",doubleClickDelay:options.doubleClickDelay||500},this.eventHandlers={},window.onresize=igv.throttle(function(){igv.browser.resize()},10),$(document).mousedown(function(e){igv.browser.isMouseDown=!0}),$(document).mouseup(function(e){igv.browser.isMouseDown=void 0,igv.browser.dragTrackView&&igv.browser.dragTrackView.$trackDragScrim.hide(),igv.browser.dragTrackView=void 0}),$(document).click(function(e){var target=e.target;igv.browser.$root.get(0).contains(target)||igv.popover.hide()})},igv.Browser.hasKnownFileExtension=function(config){var extension=igv.getExtension(config);return void 0!==extension&&igv.Browser.knownFileExtensions.has(extension)},igv.Browser.prototype.disableZoomWidget=function(){this.$zoomContainer.hide()},igv.Browser.prototype.enableZoomWidget=function(){this.$zoomContainer.show()},igv.Browser.prototype.toggleCursorGuide=function(genomicStateList){_.size(genomicStateList)>1||"all"===_.first(genomicStateList).locusSearchString.toLowerCase()?(this.$cursorTrackingGuide.is(":visible")&&this.$cursorTrackingGuideToggle.click(),this.$cursorTrackingGuideToggle.hide()):this.$cursorTrackingGuideToggle.show()},igv.Browser.prototype.toggleCenterGuide=function(genomicStateList){_.size(genomicStateList)>1||"all"===_.first(genomicStateList).locusSearchString.toLowerCase()?(this.centerGuide.$container.is(":visible")&&this.centerGuide.$centerGuideToggle.click(),this.centerGuide.$centerGuideToggle.hide()):this.centerGuide.$centerGuideToggle.show()},igv.Browser.prototype.loadTracksWithConfigList=function(configList){var self=this,loadedTracks=[];return configList.forEach(function(config){var track=self.loadTrack(config);track&&loadedTracks.push(track)}),this.trackViews.forEach(function(trackView){trackView.resize()}),loadedTracks},igv.Browser.prototype.loadTrack=function(config){var settings,property,newTrack,self=this;if(igv.inferTrackTypes(config),this.trackDefaults&&config.type&&(settings=this.trackDefaults[config.type]))for(property in settings)settings.hasOwnProperty(property)&&void 0===config[property]&&(config[property]=settings[property]);return void 0===(newTrack=igv.createTrack(config))?(igv.presentAlert("Unknown file type: "+config.url,void 0),newTrack):(void 0===newTrack.order&&(newTrack.order=this.trackViews.length),"function"==typeof newTrack.getFileHeader?newTrack.getFileHeader().then(function(header){self.addTrack(newTrack)}).catch(function(error){igv.presentAlert(error)}):self.addTrack(newTrack),newTrack)},igv.Browser.prototype.addTrack=function(track){var trackView;void 0!==igv.popover&&igv.popover.hide(),trackView=new igv.TrackView(this,$(this.trackContainerDiv),track),this.trackViews.push(trackView),this.reorderTracks(),trackView.update()},igv.Browser.prototype.reorderTracks=function(){var myself=this;this.trackViews.sort(function(a,b){return(a.track.order||0)-(b.track.order||0)}),$(this.trackContainerDiv).children("igv-track-div").detach(),this.trackViews.forEach(function(trackView){myself.trackContainerDiv.appendChild(trackView.trackDiv)})},igv.Browser.prototype.removeTrackByName=function(name){var remove;remove=_.first(_.filter(this.trackViews,function(trackView){return name===trackView.track.name})),this.removeTrack(remove.track)},igv.Browser.prototype.removeTrack=function(track){for(var trackPanelRemoved,i=0;i<this.trackViews.length;i++)if(track===this.trackViews[i].track){trackPanelRemoved=this.trackViews[i];break}trackPanelRemoved&&(this.trackViews.splice(i,1),this.trackContainerDiv.removeChild(trackPanelRemoved.trackDiv),this.fireEvent("trackremoved",[trackPanelRemoved.track]))},igv.Browser.prototype.findTracks=function(property,value){var tracks=[];return this.trackViews.forEach(function(trackView){value===trackView.track[property]&&tracks.push(trackView.track)}),tracks},igv.Browser.prototype.reduceTrackOrder=function(trackView){var raisable,raiseableOrder,indices=[];1!==this.trackViews.length&&(this.trackViews.forEach(function(tv,i,tvs){indices.push({trackView:tv,index:i}),trackView===tv&&(raisable=indices[i])}),0!==raisable.index&&(raiseableOrder=raisable.trackView.track.order,raisable.trackView.track.order=indices[raisable.index-1].trackView.track.order,indices[raisable.index-1].trackView.track.order=raiseableOrder,this.reorderTracks()))},igv.Browser.prototype.increaseTrackOrder=function(trackView){var raisable,raiseableOrder,indices=[];1!==this.trackViews.length&&(this.trackViews.forEach(function(tv,i,tvs){indices.push({trackView:tv,index:i}),trackView===tv&&(raisable=indices[i])}),this.trackViews.length-1!==raisable.index&&(raiseableOrder=raisable.trackView.track.order,raisable.trackView.track.order=indices[1+raisable.index].trackView.track.order,indices[1+raisable.index].trackView.track.order=raiseableOrder,this.reorderTracks()))},igv.Browser.prototype.setTrackHeight=function(newHeight){this.trackHeight=newHeight,this.trackViews.forEach(function(trackView){trackView.setTrackHeight(newHeight)})},igv.Browser.prototype.resize=function(){function resizeWillExceedChromosomeLength(trackViews){var result,trackView,viewport,pixel,bpp,bp;return _.size(trackViews)>0?(trackView=_.first(trackViews),_.size(trackView.viewports)>0?(viewport=_.first(trackView.viewports),pixel=viewport.$viewport.width(),bpp=viewport.genomicState.referenceFrame.bpPerPixel,bp=pixel*bpp,result=bp>viewport.genomicState.chromosome.bpLength):result=!1):result=!1,result}var viewport;!0===resizeWillExceedChromosomeLength(this.trackViews)?(viewport=_.first(_.first(this.trackViews).viewports),this.search(viewport.genomicState.chromosome.name)):_.each(_.union([this.ideoPanel,this.karyoPanel,this.centerGuide],this.trackViews),function(renderable){renderable&&renderable.resize()})},igv.Browser.prototype.repaint=function(){_.each(_.union([this.ideoPanel,this.karyoPanel,this.centerGuide],this.trackViews),function(renderable){renderable&&renderable.repaint()})},igv.Browser.prototype.repaintWithLocusIndex=function(locusIndex){this.karyoPanel&&this.karyoPanel.repaint(),this.ideoPanel&&igv.IdeoPanel.repaintPanel(this.ideoPanel.panelWithLocusIndex(locusIndex)),_.each(igv.Viewport.viewportsWithLocusIndex(locusIndex),function(viewport){viewport.repaint()})},igv.Browser.prototype.update=function(){this.updateLocusSearchWidget(_.first(this.genomicStateList)),this.windowSizePanel.updateWithGenomicState(_.first(this.genomicStateList)),_.each([this.ideoPanel,this.karyoPanel,this.centerGuide],function(renderable){renderable&&renderable.repaint()}),_.each(this.trackViews,function(trackView){trackView.update()})},igv.Browser.prototype.updateWithLocusIndex=function(locusIndex){igv.browser.updateLocusSearchWidget(_.first(this.genomicStateList)),0===locusIndex&&this.windowSizePanel.updateWithGenomicState(this.genomicStateList[locusIndex]),this.ideoPanel&&igv.IdeoPanel.repaintPanel(this.ideoPanel.panelWithLocusIndex(locusIndex)),this.karyoPanel&&this.karyoPanel.repaint(),_.each(igv.Viewport.viewportsWithLocusIndex(locusIndex),function(viewport){viewport.update()}),this.centerGuide&&this.centerGuide.repaint()},igv.Browser.prototype.loadInProgress=function(){var anyTrackViewIsLoading;return anyTrackViewIsLoading=!1,_.each(this.trackViews,function(t){!1===anyTrackViewIsLoading&&(anyTrackViewIsLoading=t.isLoading())}),anyTrackViewIsLoading},igv.Browser.prototype.updateLocusSearchWidget=function(genomicState){var referenceFrame,ss,ee,str,end,chromosome,self=this;0===genomicState.locusIndex&&1===genomicState.locusCount?"all"===genomicState.locusSearchString.toLowerCase()?(this.$searchInput.val(genomicState.locusSearchString),this.chromosomeSelectWidget.$select.val("all")):(referenceFrame=genomicState.referenceFrame,this.chromosomeSelectWidget.$select.val(referenceFrame.chrName),this.$searchInput&&(end=referenceFrame.start+referenceFrame.bpPerPixel*(self.viewportContainerWidth()/genomicState.locusCount),this.genome&&(chromosome=this.genome.getChromosome(referenceFrame.chrName))&&(end=Math.min(end,chromosome.bpLength)),ss=igv.numberFormatter(Math.floor(referenceFrame.start+1)),ee=igv.numberFormatter(Math.floor(end)),str=referenceFrame.chrName+":"+ss+"-"+ee,this.$searchInput.val(str)),this.fireEvent("locuschange",[referenceFrame,str])):this.$searchInput.val("")},igv.Browser.prototype.syntheticViewportContainerBBox=function(){var $trackContainer=$(this.trackContainerDiv),$track=$('<div class="igv-track-div">'),$viewportContainer=$('<div class="igv-viewport-container igv-viewport-container-shim">'),rect={};return $trackContainer.append($track),$track.append($viewportContainer),rect={position:$viewportContainer.position(),width:$viewportContainer.width(),height:$viewportContainer.height()},$track.remove(),rect},igv.Browser.prototype.syntheticViewportContainerWidth=function(){return this.syntheticViewportContainerBBox().width},igv.Browser.prototype.viewportContainerWidth=function(){return this.trackViews&&this.trackViews.length>0?this.trackViews[0].$viewportContainer.width():this.syntheticViewportContainerWidth()},igv.Browser.prototype.minimumBasesExtent=function(){return this.config.minimumBases},igv.Browser.prototype.goto=function(chrName,start,end){var genomicState,viewportWidth,referenceFrame,width,maxBpPerPixel;if(igv.popover&&igv.popover.hide(),void 0===this.genome)return void console.log("Missing genome - bailing ...");genomicState=_.first(this.genomicStateList),genomicState.chromosome=this.genome.getChromosome(chrName),viewportWidth=igv.browser.viewportContainerWidth()/genomicState.locusCount,referenceFrame=genomicState.referenceFrame,referenceFrame.chrName=genomicState.chromosome.name,void 0===end?(width=Math.round(viewportWidth*referenceFrame.bpPerPixel/2),start=Math.max(0,start-width)):referenceFrame.bpPerPixel=(end-start)/viewportWidth,genomicState.chromosome?(genomicState.chromosome.bpLength||(genomicState.chromosome.bpLength=1),maxBpPerPixel=genomicState.chromosome.bpLength/viewportWidth,referenceFrame.bpPerPixel>maxBpPerPixel&&(referenceFrame.bpPerPixel=maxBpPerPixel),void 0===end&&(end=start+viewportWidth*referenceFrame.bpPerPixel),genomicState.chromosome&&end>genomicState.chromosome.bpLength&&(start-=end-genomicState.chromosome.bpLength)):console&&console.log&&console.log("Could not find chromsome "+referenceFrame.chrName),referenceFrame.start=start,this.update()},igv.Browser.prototype.zoomIn=function(){function zoomInWithLocusIndex(browser,locusIndex){function basesExtent(width,bpp){return Math.floor(width*bpp)}var centerBP,mbe,be,genomicState=browser.genomicStateList[locusIndex],referenceFrame=genomicState.referenceFrame,viewportWidth=Math.floor(browser.viewportContainerWidth()/genomicState.locusCount);mbe=browser.minimumBasesExtent(),be=basesExtent(viewportWidth,referenceFrame.bpPerPixel/2),mbe>be||(centerBP=referenceFrame.start+referenceFrame.bpPerPixel*(viewportWidth/2),referenceFrame.start=centerBP-viewportWidth/2*(referenceFrame.bpPerPixel/2),referenceFrame.bpPerPixel/=2,browser.updateWithLocusIndex(locusIndex))}var self=this;this.loadInProgress()||_.each(_.range(_.size(this.genomicStateList)),function(locusIndex){zoomInWithLocusIndex(self,locusIndex)})},igv.Browser.prototype.zoomOut=function(){function zoomOutWithLocusIndex(browser,locusIndex){var chromosome,newScale,maxScale,centerBP,chromosomeLengthBP,widthBP,genomicState=igv.browser.genomicStateList[locusIndex],referenceFrame=genomicState.referenceFrame,viewportWidth=Math.floor(browser.viewportContainerWidth()/genomicState.locusCount);newScale=2*referenceFrame.bpPerPixel,chromosomeLengthBP=25e7,browser.genome&&(chromosome=browser.genome.getChromosome(referenceFrame.chrName))&&(chromosomeLengthBP=chromosome.bpLength),maxScale=chromosomeLengthBP/viewportWidth,newScale>maxScale&&(newScale=maxScale),centerBP=referenceFrame.start+referenceFrame.bpPerPixel*viewportWidth/2,widthBP=newScale*viewportWidth,referenceFrame.start=Math.round(centerBP-widthBP/2),referenceFrame.start<0?referenceFrame.start=0:referenceFrame.start>chromosomeLengthBP-widthBP&&(referenceFrame.start=chromosomeLengthBP-widthBP),referenceFrame.bpPerPixel=newScale,browser.updateWithLocusIndex(locusIndex)}var self=this;this.loadInProgress()||_.each(_.range(_.size(this.genomicStateList)),function(locusIndex){zoomOutWithLocusIndex(self,locusIndex)})},igv.Browser.prototype.selectMultiLocusPanelWithGenomicState=function(genomicState){this.multiLocusPanelLayoutWithTruthFunction(function(candidate){return _.isEqual(candidate,genomicState)})},igv.Browser.prototype.closeMultiLocusPanelWithGenomicState=function(genomicState){this.multiLocusPanelLayoutWithTruthFunction(function(candidate){return!_.isEqual(candidate,genomicState)})},igv.Browser.prototype.multiLocusPanelLayoutWithTruthFunction=function(filterFunction){var filtered,self=this,$content_header=$("#igv-content-header");!0===this.config.showIdeogram&&igv.IdeoPanel.$empty($content_header),this.emptyViewportContainers(),filtered=this.genomicStateList.filter(function(gs){return filterFunction(gs)}),this.genomicStateList=filtered.map(function(f,i,list){return f.locusIndex=i,f.locusCount=list.length,f.referenceFrame.bpPerPixel=(f.end-f.start)/(self.viewportContainerWidth()/f.locusCount),f}),!0===this.config.showIdeogram&&this.ideoPanel.buildPanels($content_header),this.buildViewportsWithGenomicStateList(this.genomicStateList),this.zoomWidgetLayout(),this.toggleCenterGuide(this.genomicStateList),this.toggleCursorGuide(this.genomicStateList),this.resize()},igv.Browser.prototype.emptyViewportContainers=function(){$(".igv-scrollbar-outer-div").remove(),$(".igv-viewport-div").remove(),$(".igv-ruler-sweeper-div").remove(),_.each(this.trackViews,function(trackView){trackView.viewports=[],trackView.scrollbar=void 0,_.each(_.keys(trackView.track.rulerSweepers),function(key){trackView.track.rulerSweepers[key]=void 0}),trackView.track.rulerSweepers=void 0})},igv.Browser.prototype.buildViewportsWithGenomicStateList=function(genomicStateList){this.trackViews.forEach(function(trackView){genomicStateList.forEach(function(genomicState,i){trackView.viewports.push(new igv.Viewport(trackView,trackView.$viewportContainer,genomicState)),trackView.track instanceof igv.RulerTrack&&trackView.track.createRulerSweeper(trackView.viewports[i],trackView.viewports[i].$viewport,$(trackView.viewports[i].contentDiv),genomicState)}),trackView.configureViewportContainer(trackView.$viewportContainer,trackView.viewports)})},igv.Browser.prototype.search=function(string){var loci,self=this;loci=string.split(" "),this.getGenomicStateList(loci,this.viewportContainerWidth()).then(function(genomicStateList){var $content_header;if(genomicStateList.length>0)return genomicStateList.forEach(function(genomicState,index){genomicState.locusIndex=index,genomicState.locusCount=_.size(genomicStateList),genomicState.referenceFrame=new igv.ReferenceFrame(genomicState.chromosome.name,genomicState.start,(genomicState.end-genomicState.start)/(self.viewportContainerWidth()/genomicState.locusCount))}),self.genomicStateList=genomicStateList,self.emptyViewportContainers(),self.updateLocusSearchWidget(_.first(self.genomicStateList)),self.zoomWidgetLayout(),self.toggleCenterGuide(self.genomicStateList),self.toggleCursorGuide(self.genomicStateList),!0===self.config.showIdeogram&&($content_header=$("#igv-content-header"),igv.IdeoPanel.$empty($content_header),self.ideoPanel.buildPanels($content_header)),self.buildViewportsWithGenomicStateList(genomicStateList),self.update(),genomicStateList;throw new Error("Unrecognized locus "+string)}).catch(function(error){igv.presentAlert(error)})},igv.Browser.prototype.zoomWidgetLayout=function(){var found;found=_.filter(this.genomicStateList,function(g){return"all"===g.locusSearchString.toLowerCase()}),_.size(found)>0?this.disableZoomWidget():this.enableZoomWidget()},igv.Browser.prototype.getGenomicStateList=function(loci){function searchPromise(locus){var path=searchConfig.url.replace("$FEATURE$",locus);return path.indexOf("$GENOME$")>-1&&(path=path.replace("$GENOME$",self.genome.id?self.genome.id:"hg19")),igv.xhr.loadString(path).then(function(result){return{result:result,locusSearchString:locus}})}function processSearchResult(searchServiceResponse,locusSearchString){var results,result,chr,start,end,geneNameLocusObject;return results="plain"===searchConfig.type?parseSearchResults(searchServiceResponse):JSON.parse(searchServiceResponse),searchConfig.resultsField&&(results=results[searchConfig.resultsField]),results&&0!==results.length?(result=results[0],result.hasOwnProperty(searchConfig.chromosomeField)&&result.hasOwnProperty(searchConfig.startField)?(chr=result[searchConfig.chromosomeField],start=result[searchConfig.startField]-searchConfig.coords,end=result[searchConfig.endField],void 0===end&&(end=start+1),igv.browser.flanking&&(start=Math.max(0,start-igv.browser.flanking),end+=igv.browser.flanking),geneNameLocusObject=Object.assign({},result),geneNameLocusObject.chromosome=self.genome.getChromosome(chr),geneNameLocusObject.start=start,geneNameLocusObject.end=end,geneNameLocusObject.locusSearchString=locusSearchString,geneNameLocusObject.selection=new igv.GtexSelection(result[searchConfig.geneField],result[searchConfig.snpField]),geneNameLocusObject):void console.log("Search service results must includ chromosome and start fields: "+result)):void 0}function isLocusChrNameStartEnd(locus,genome){var a,b,numeric,chr,chromosome,locusObject;if(locusObject={},a=locus.split(":"),chr=a[0],!(chromosome=genome.getChromosome(chr.toLowerCase())))return!1;if(locusObject.chromosome=chromosome,locusObject.start=0,locusObject.end=chromosome.bpLength,1===a.length)return locusObject;if(b=_.last(a).split("-"),b.length>2)return!1;if(locusObject.start=locusObject.end=void 0,numeric=b[0].replace(/\,/g,""),isNaN(numeric))return!1;if(locusObject.start=parseInt(numeric,10)-1,2===b.length){if(numeric=b[1].replace(/\,/g,""),isNaN(numeric))return!1;locusObject.end=parseInt(numeric,10)}return igv.Browser.validateLocusExtent(locusObject.chromosome,locusObject),locusObject}var geneNameLoci,genomicState,promises,self=this,searchConfig=igv.browser.searchConfig,locusGenomicStates=[];return geneNameLoci=[],loci.forEach(function(locus){genomicState=isLocusChrNameStartEnd(locus,self.genome),genomicState?(genomicState.locusSearchString=locus,locusGenomicStates.push(genomicState)):geneNameLoci.push(locus)}),0==geneNameLoci.length?Promise.resolve(locusGenomicStates):(promises=[],geneNameLoci.forEach(function(locus){var result,genomicState;result=self.featureDB[locus.toUpperCase()],result?(genomicState=processSearchResult(result,locus))&&locusGenomicStates.push(genomicState):promises.push(searchPromise(locus))}),promises.length>0?Promise.all(promises).then(function(searchResponses){return searchResponses.forEach(function(response){var genomicState=processSearchResult(response.result,response.locusSearchString);genomicState&&locusGenomicStates.push(genomicState)}),locusGenomicStates}):void 0)},igv.Browser.validateLocusExtent=function(chromosome,extent){var center,ss=extent.start,ee=extent.end;void 0===ee?(ss-=igv.browser.minimumBasesExtent()/2,ee=ss+igv.browser.minimumBasesExtent(),ee>chromosome.bpLength?(ee=chromosome.bpLength,ss=ee-igv.browser.minimumBasesExtent()):ss<0&&(ss=0,ee=igv.browser.minimumBasesExtent())):ee-ss<igv.browser.minimumBasesExtent()&&(center=(ee+ss)/2,center-igv.browser.minimumBasesExtent()/2<0?(ss=0,ee=ss+igv.browser.minimumBasesExtent()):center+igv.browser.minimumBasesExtent()/2>chromosome.bpLength?(ee=chromosome.bpLength,ss=ee-igv.browser.minimumBasesExtent()):(ss=center-igv.browser.minimumBasesExtent()/2,ee=ss+igv.browser.minimumBasesExtent())),extent.start=Math.ceil(ss),extent.end=Math.floor(ee)},igv.Browser.prototype.loadSampleInformation=function(url){var name=url;url instanceof File&&(name=url.name),"fam"===name.substr(name.lastIndexOf(".")+1)&&igv.sampleInformation.loadPlinkFile(url)},igv.Browser.prototype.on=function(eventName,fn){this.eventHandlers[eventName]||(this.eventHandlers[eventName]=[]),this.eventHandlers[eventName].push(fn)},igv.Browser.prototype.un=function(eventName,fn){if(this.eventHandlers[eventName]){var callbackIndex=this.eventHandlers[eventName].indexOf(fn);-1!==callbackIndex&&this.eventHandlers[eventName].splice(callbackIndex,1)}},igv.Browser.prototype.fireEvent=function(eventName,args,thisObj){var scope,results,eventHandler=this.eventHandlers[eventName];if(void 0!==eventHandler&&0!==eventHandler.length)return scope=thisObj||window,results=eventHandler.map(function(event){return event.apply(scope,args)}),results[0]},igv}(igv||{}),igv=function(igv){function urlString(assembly,fileFormat){return"https://www.encodeproject.org/search/?type=experiment&assembly="+assembly+"&files.file_format="+fileFormat+"&format=json&field=lab.title&field=biosample_term_name&field=assay_term_name&field=target.label&field=files.file_format&field=files.output_type&field=files.href&field=files.replicate.technical_replicate_number&field=files.replicate.biological_replicate_number&field=files.assembly&limit=all"}function parseJSONData(json,assembly,fileFormat){var rows;return rows=[],_.each(json["@graph"],function(record){var cellType,target,filtered,mapped;cellType=record.biosample_term_name||"",target=record.target?record.target.label:"",filtered=_.filter(record.files,function(file){return fileFormat===file.file_format&&assembly===file.assembly}),mapped=_.map(filtered,function(file){var bioRep=file.replicate?file.replicate.bioligcal_replicate_number:void 0,techRep=file.replicate?file.replicate.technical_replicate_number:void 0,name=cellType+" "+target;return bioRep&&(name+=" "+bioRep),techRep&&(name+=(bioRep?":":"0:")+techRep),{Assembly:file.assembly,ExperimentID:record["@id"],"Cell Type":cellType,"Assay Type":record.assay_term_name,Target:target,Lab:record.lab?record.lab.title:"",Format:file.file_format,"Output Type":file.output_type,url:"https://www.encodeproject.org"+file.href,"Bio Rep":bioRep,"Tech Rep":techRep,Name:name}}),Array.prototype.push.apply(rows,mapped)}),_.map(rows,function(row){return _.mapObject(row,function(val){return void 0===val||""===val?"-":val})})}function encodeSort(a,b){var aa1,aa2,cc1,cc2,tt1,tt2;return aa1=a.Assembly,aa2=b.Assembly,cc1=a["Cell Type"],cc2=b["Cell Type"],tt1=a.Target,tt2=b.Target,aa1===aa2?cc1===cc2?tt1===tt2?0:tt1<tt2?-1:1:cc1<cc2?-1:1:aa1<aa2?-1:1}return igv.EncodeDataSource=function(columnFormat){this.columnFormat=columnFormat},igv.EncodeDataSource.prototype.retrieveData=function(genomeID){var fileFormat,assembly;return fileFormat="bigWig",assembly=genomeID,igv.xhr.loadJson(urlString(assembly,fileFormat),{}).then(function(json){return parseJSONData(json,assembly,fileFormat)}).then(function(data){return data.sort(encodeSort),Promise.resolve(data)})},igv.EncodeDataSource.prototype.tableData=function(data){var self=this;return _.map(data,function(row){return _.values(_.pick(row,_.map(self.columnFormat,function(column){return _.first(_.keys(column))})))})},igv.EncodeDataSource.prototype.tableColumns=function(){return _.map(this.columnFormat,function(obj){var key,val;return key=_.first(_.keys(obj)),val=_.first(_.values(obj)),{title:key,width:val}})},igv.EncodeDataSource.prototype.dataAtRowIndex=function(data,index){function encodeAntibodyColor(antibody){var colors,key;return colors={DEFAULT:"rgb(3, 116, 178)",H3K27AC:"rgb(200, 0, 0)",H3K27ME3:"rgb(130, 0, 4)",H3K36ME3:"rgb(0, 0, 150)",H3K4ME1:"rgb(0, 150, 0)",H3K4ME2:"rgb(0, 150, 0)",H3K4ME3:"rgb(0, 150, 0)",H3K9AC:"rgb(100, 0, 0)",H3K9ME1:"rgb(100, 0, 0)"},key=void 0===antibody||""===antibody||"-"===antibody?"DEFAULT":antibody.toUpperCase(),colors[key]}var row;return row=data[index],{url:row.url,color:encodeAntibodyColor(row.Target),name:row.Name}},igv}(igv||{}),igv=function(igv){function buildConfig(reference){var key,config={};for(key in reference)reference.hasOwnProperty(key)&&!reservedProperties.has(key)&&(config[key]=reference[key]);return config}function getSequenceIndexed(chr,start,end){var self=this;return new Promise(function(fulfill,reject){function getSequenceFromInterval(interval,start,end){var offset=start-interval.start,n=end-start;return interval.features?interval.features.substr(offset,n):null}var interval=self.interval;if(interval&&interval.contains(chr,start,end))fulfill(getSequenceFromInterval(interval,start,end));else{var qstart=start,qend=end;if(end-start<1e5){var w=end-start,center=Math.round(start+w/2);qstart=Math.max(0,center-5e4),qend=center+5e4}self.readSequence(chr,qstart,qend).then(function(seqBytes){self.interval=new igv.GenomicInterval(chr,qstart,qend,seqBytes),fulfill(getSequenceFromInterval(self.interval,start,end))}).catch(reject)}})}function getSequenceNonIndexed(chr,start,end){var self=this,seq=self.sequences[chr];return seq&&seq.length>=end?Promise.resolve(seq.substring(start,end)):Promise.resolve("")}function decodeDataUri(dataUri){var bytes,split=dataUri.split(","),info=split[0].split(":")[1],dataString=split[1];dataString=info.indexOf("base64")>=0?atob(dataString):decodeURI(dataString),bytes=new Uint8Array(dataString.length);for(var i=0;i<dataString.length;i++)bytes[i]=dataString.charCodeAt(i);var inflate=new Zlib.Gunzip(bytes),plain=inflate.decompress();return String.fromCharCode.apply(null,plain)}var reservedProperties=new Set(["fastaURL","indexURL","cytobandURL","indexed"]);return igv.FastaSequence=function(reference){reference.fastaURL.startsWith("data:")?(this.file=decodeDataUri(reference.fastaURL),this.indexed=!1,this.isDataURI=!0):(this.file=reference.fastaURL,this.indexed=!1!==reference.indexed,this.indexed&&(this.indexFile=reference.indexURL||reference.indexFile||this.file+".fai")),this.withCredentials=reference.withCredentials,this.config=buildConfig(reference)},igv.FastaSequence.prototype.init=function(){var self=this;return self.indexed?new Promise(function(fulfill,reject){self.getIndex().then(function(index){var order=0;self.chromosomes={},self.chromosomeNames.forEach(function(chrName){var bpLength=self.index[chrName].size;self.chromosomes[chrName]=new igv.Chromosome(chrName,order++,bpLength)}),fulfill()}).catch(reject)}):self.loadAll()},igv.FastaSequence.prototype.getSequence=function(chr,start,end){var genome;return genome=igv.browser?igv.browser.genome:void 0,genome&&(chr=genome.getChromosomeName(chr)),this.indexed?getSequenceIndexed.call(this,chr,start,end):getSequenceNonIndexed.call(this,chr,start,end)},igv.FastaSequence.prototype.getIndex=function(){var self=this;return new Promise(function(fulfill,reject){self.index?fulfill(self.index):igv.xhr.load(self.indexFile,igv.buildOptions(self.config)).then(function(data){var lines=data.splitLines(),len=lines.length,lineNo=0;for(self.chromosomeNames=[],self.index={};lineNo<len;){var tokens=lines[lineNo++].split("\t");if(5==tokens.length){var chr=tokens[0],size=parseInt(tokens[1]),position=parseInt(tokens[2]),basesPerLine=parseInt(tokens[3]),bytesPerLine=parseInt(tokens[4]),indexEntry={size:size,position:position,basesPerLine:basesPerLine,bytesPerLine:bytesPerLine};self.chromosomeNames.push(chr),self.index[chr]=indexEntry}}fulfill&&fulfill(self.index)}).catch(reject)})},igv.FastaSequence.prototype.loadAll=function(){function parseFasta(data){self.chromosomeNames=[],self.chromosomes={},self.sequences={};for(var nextLine,currentChr,lines=data.splitLines(),len=lines.length,lineNo=0,currentSeq="",order=0;lineNo<len;)nextLine=lines[lineNo++].trim(),nextLine.startsWith("#")||0===nextLine.length||(nextLine.startsWith(">")?(currentSeq&&(self.chromosomeNames.push(currentChr),self.sequences[currentChr]=currentSeq,self.chromosomes[currentChr]=new igv.Chromosome(currentChr,order++,currentSeq.length)),currentChr=nextLine.substr(1).split("\\s+")[0],currentSeq=""):currentSeq+=nextLine);currentSeq&&(self.chromosomeNames.push(currentChr),self.sequences[currentChr]=currentSeq,self.chromosomes[currentChr]=new igv.Chromosome(currentChr,order++,currentSeq.length))}var self=this;return this.isDataURI?Promise.resolve(parseFasta(this.file)):igv.xhr.load(self.file,igv.buildOptions(self.config)).then(parseFasta)},igv.FastaSequence.prototype.readSequence=function(chr,qstart,qend){var self=this;return new Promise(function(fulfill,reject){self.getIndex().then(function(){var idxEntry=self.index[chr];if(idxEntry){var start=Math.max(0,qstart),end=Math.min(idxEntry.size,qend),bytesPerLine=idxEntry.bytesPerLine,basesPerLine=idxEntry.basesPerLine,position=idxEntry.position,nEndBytes=bytesPerLine-basesPerLine,startLine=Math.floor(start/basesPerLine),endLine=Math.floor(end/basesPerLine),base0=startLine*basesPerLine,offset=start-base0,startByte=position+startLine*bytesPerLine+offset,base1=endLine*basesPerLine,offset1=end-base1,endByte=position+endLine*bytesPerLine+offset1-1,byteCount=endByte-startByte+1;byteCount<=0&&fulfill(null),igv.xhr.load(self.file,igv.buildOptions(self.config,{range:{start:startByte,size:byteCount}})).then(function(allBytes){var nBases,seqBytes="",srcPos=0,desPos=0,allBytesLength=allBytes.length;for(offset>0&&(nBases=Math.min(end-start,basesPerLine-offset),seqBytes+=allBytes.substr(srcPos,nBases),srcPos+=nBases+nEndBytes,desPos+=nBases);srcPos<allBytesLength;)nBases=Math.min(basesPerLine,allBytesLength-srcPos),seqBytes+=allBytes.substr(srcPos,nBases),srcPos+=nBases+nEndBytes,desPos+=nBases;fulfill(seqBytes)}).catch(reject)}else console.log("No index entry for chr: "+chr),self.interval=new igv.GenomicInterval(chr,qstart,qend,null),fulfill(null)}).catch(reject)})},igv}(igv||{}),igv=function(igv){return igv.AneuFeatureSource=function(config,thefilename){function getPath(urlorfile){var last;return last=urlorfile.lastIndexOf("/"),urlorfile.substring(0,last+1)}function getParser(format){return new igv.FeatureParser(format)}this.config=config||{},igv.isFilePath(this.config.url)?this.filename=getPath(this.config.url.name)+thefilename:(this.config.url=getPath(this.config.url)+thefilename,this.filename=thefilename,this.headURL=this.config.headURL||thefilename),this.parser=getParser("aneu")},igv.AneuFeatureSource.prototype.getFeatures=function(chr,bpStart,bpEnd,success){var self=this,range=new igv.GenomicInterval(chr,bpStart,bpEnd),featureCache=this.featureCache;if(featureCache&&(void 0===featureCache.range||featureCache.range.containsRange(range))){var features=this.featureCache.queryFeatures(chr,bpStart,bpEnd);success(features)}else this.loadFeatures(function(featureList){self.featureCache=new igv.FeatureCache(featureList);var features=self.featureCache.queryFeatures(chr,bpStart,bpEnd);success(features)},range)},igv.AneuFeatureSource.prototype.getFeatureCache=function(success){var self=this;this.featureCache?success(this.featureCache):this.loadFeatures(function(featureList){self.featureCache=new igv.FeatureCache(featureList),success(self.featureCache)})},igv.AneuFeatureSource.prototype.loadFeatures=function(continuation,range){var options,success,features,self=this;options=igv.buildOptions(self.config,{tokens:self.config.tokensc}),success=function(data){self.header=self.parser.parseHeader(data),features=self.parser.parseFeatures(data),continuation(features)},igv.xhr.loadString(self.config.url,options).then(success)},igv}(igv||{}),igv=function(igv){function loadJson(){var self=this;return new Promise(function(fulfill,reject){var afterJsonLoaded,afterload;self.featureSourceRed?fulfill():(afterJsonLoaded=function(json){json=JSON.parse(json),log("Got json: "+json+", diff :"+json.diff),self.featureSource=new igv.AneuFeatureSource(self.config,json.diff),self.featureSourceRed=new igv.AneuFeatureSource(self.config,json.redline),fulfill()},afterload=igv.buildOptions(self.config,{tokens:self.config.tokens}),igv.xhr.loadString(self.config.url,afterload).then(afterJsonLoaded))})}var debug=!1,log=function(msg){if(debug){var d=new Date,time=d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();"undefined"!=typeof copy&&copy(msg),"undefined"!=typeof console&&console.log("AneuTrack: "+time+" "+msg)}},sortDirection="ASC";return igv.AneuTrack=function(config){igv.configTrack(this,config),this.maxHeight=config.maxHeight-2||500,this.sampleSquishHeight=config.sampleSquishHeight||20,this.sampleExpandHeight=config.sampleExpandHeight||125,this.sampleHeight=this.sampleExpandHeight,this.highColor=config.highColor||"rgb(30,30,255)",this.lowColor=config.lowColor||"rgb(220,0,0)",this.midColor=config.midColor||"rgb(150,150,150)",this.posColorScale=config.posColorScale||new igv.GradientColorScale({low:.1,lowR:255,lowG:255,lowB:255,high:1.5,highR:255,highG:0,highB:0}),this.negColorScale=config.negColorScale||new igv.GradientColorScale({low:-1.5,lowR:0,lowG:0,lowB:255,high:-.1,highR:255,highG:255,highB:255}),this.sampleCount=0,this.samples={},this.sampleNames=[],log("AneuTrack: config: "+JSON.stringify(config)),this.config=config},igv.AneuTrack.prototype.getSummary=function(chr,bpStart,bpEnd,continuation){filtersummary=function(redlinedata){var i,len,summarydata=[];for(i=0,len=redlinedata.length;i<len;i++){var feature=redlinedata[i];Math.abs(feature.score-2)>.5&&feature.end-feature.start>5e6&&summarydata.push(feature)}continuation(summarydata)},this.featureSourceRed?this.featureSourceRed.getFeatures(chr,bpStart,bpEnd,filtersummary):(log("Aneu track has no summary data yet"),continuation(null))},igv.AneuTrack.prototype.loadSummary=function(chr,bpStart,bpEnd,continuation){var afterload,self=this;if(!this.featureSourceRed){var afterJsonLoaded=function(json){json&&(json=JSON.parse(json),self.featureSourceRed=new igv.AneuFeatureSource(config,json.redline),self.getSummary(chr,bpStart,bpEnd,continuation))};return afterload=igv.buildOptions(self.config,{tokens:self.config.tokens,success:afterJsonLoaded}),igv.xhr.loadString(self.config.url,afterload),null}this.featureSourceRed.getFeatures(chr,bpStart,bpEnd,continuation)},igv.AneuTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){var self=this;return new Promise(function(fulfill,reject){loadJson.call(self).then(function(){var loadsecondfile=function(redlinedata){self.redlinedata=redlinedata,self.featureSource.getFeatures(chr,bpStart,bpEnd,fulfill)};self.featureSourceRed.getFeatures(chr,bpStart,bpEnd,loadsecondfile)})})},igv.AneuTrack.prototype.getColor=function(value){var expected=2;return value<expected?this.lowColor:value>expected?this.highColor:this.midColor},igv.AneuTrack.prototype.paintAxis=function(ctx,pixelWidth,pixelHeight){function computeH(min,max,value,maxpixels){return maxpixels-Math.round((value-min)/max*maxpixels)}var track=this,font=(track.maxLogP,track.minLogP,{font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"});igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"});var max=track.max;max||(max=8);var min=0,x=49;igv.graphics.strokeLine(ctx,x,computeH(min,max,0,track.maxheight),x,computeH(min,max,max,track.maxheight),font),x-=5;for(var p=0;p<=max;p+=1){var h=computeH(min,max,p,track.maxheight);igv.graphics.strokeLine(ctx,x,h,x+5,h,font),p>0&&p<max&&igv.graphics.fillText(ctx,p,x-4,h+3,font)}font.textAlign="center",igv.graphics.fillText(ctx,"ploidy",x-15,pixelHeight/2,font,{rotate:{angle:-90}})},igv.AneuTrack.prototype.draw=function(options){function computeH(min,max,value,maxpixels){return maxpixels-Math.round((value-min)/max*maxpixels)}function checkForLog(featureList){var i;if(void 0===myself.isLog)for(myself.isLog=!1,i=0;i<featureList.length;i++)if(featureList[i].value<0)return void(myself.isLog=!0)}var ctx,bpPerPixel,bpStart,pixelWidth,pixelHeight,bpEnd,segment,len,sample,i,y,color,value,px,px1,pw,xScale,myself=this;ctx=options.context,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight;var max=4,min=0,PLOIDYMAX=10;igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"});var track=this;window.track=track;var computeMinMax=function(featureList){for(i=0,len=featureList.length;i<len;i++){sample=featureList[i].sample;var value=featureList[i].value;value>max&&(max=value),value<min&&(min=value)}max>PLOIDYMAX&&(max=PLOIDYMAX),min=Math.max(min,0),track.max=max},drawFeatureList=function(ctx,featureList,debug){for(bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,bpEnd=bpStart+pixelWidth*bpPerPixel+1,xScale=bpPerPixel,i=0,len=featureList.length;i<len;i++)(sample=featureList[i].sample)&&this.samples&&this.samples.hasOwnProperty(sample)&&(this.samples[sample]=myself.sampleCount,this.sampleNames.push(sample),this.sampleCount++);checkForLog(featureList);var expected=2;myself.isLog&&(min=0,expected=0);var maxheight=myself.height-4;myself.maxheight=maxheight;var len=featureList.length;for(i=0;i<len;i++)if(segment=featureList[i],!(segment.end<bpStart)){if(segment.start>bpEnd)break;if(segment.sample?(y=myself.samples[segment.sample]*myself.sampleHeight,log("Got sample y="+y)):y=0,value=segment.score,color=myself.midColor,myself.isLog?(value=Math.log2(value/2),value<expected-.1?color=myself.negColorScale.getColor(value):value>expected+.1&&(color=myself.posColorScale.getColor(value))):value<expected-.2?color=myself.lowColor:value>expected+.2&&(color=myself.highColor),px=Math.round((segment.start-bpStart)/xScale),px1=Math.round((segment.end-bpStart)/xScale),pw=Math.max(2,px1-px),value<=max){var h=computeH(min,max,value,maxheight);1==debug&&log(" Got value "+value+", h="+h+", y+h="+(y+h)+", px="+px+", px1="+px1+", pw="+pw+", color="+color+", maxh="+maxheight),igv.graphics.fillRect(ctx,px,y+h,pw,2,{fillStyle:color})}}},maxheight=myself.height-4,font={font:"normal 10px Arial",textAlign:"right",strokeStyle:"rgb(150,150,150)",fillStyle:"rgb(150,150,150)"};if(options.features&&computeMinMax(options.features),this.redlinedata&&computeMinMax(this.redlinedata),min<2&&2<max){var mid=computeH(min,max,2,maxheight);console.log("drawing dashed line and solid line at "+mid+" to "+pixelWidth),igv.graphics.dashedLine(ctx,20,mid,pixelWidth,mid,4,font);var zero=computeH(min,max,0,maxheight);igv.graphics.strokeLine(ctx,20,zero,pixelWidth,zero,font)}else log("NOT drawing line at 2");options.features?drawFeatureList(ctx,options.features,!1):console.log("No diff feature list. options="+JSON.stringify(options)),this.redlinedata?drawFeatureList(ctx,this.redlinedata,!1):console.log("No redline feature list")},igv.AneuTrack.prototype.computePixelHeight=function(features){var i,len,sample;for(i=0,len=features.length;i<len;i++)sample=features[i].sample,this.samples&&!this.samples.hasOwnProperty(sample)&&(this.samples[sample]=this.sampleCount,this.sampleNames.push(sample),this.sampleCount++);this.sampleCount=Math.max(1,this.sampleCount);var h=Math.max(30,this.sampleCount*this.sampleHeight);return this.height=h,h},igv.AneuTrack.prototype.sortSamples=function(chr,bpStart,bpEnd,direction,callback){var segment,min,max,f,i,s,sampleNames,self=this,len=bpEnd-bpStart,scores={};this.featureSource.getFeatures(chr,bpStart,bpEnd,function(featureList){for(i=0,len=featureList.length;i<len;i++)if(segment=featureList[i],!(segment.end<bpStart)){if(segment.start>bpEnd)break;min=Math.max(bpStart,segment.start),max=Math.min(bpEnd,segment.end),f=(max-min)/len,s=scores[segment.sample],s||(s=0),scores[segment.sample]=s+f*segment.value}for(sampleNames=Object.keys(self.samples),sampleNames.sort(function(a,b){var s1=scores[a],s2=scores[b];return s1||(s1=Number.MAX_VALUE),s2||(s2=Number.MAX_VALUE),s1==s2?0:s1>s2?direction:-1*direction}),i=0;i<sampleNames.length;i++)self.samples[sampleNames[i]]=i;self.sampleNames=sampleNames,callback()})},igv.AneuTrack.prototype.altClick=function(genomicLocation,referenceFrame,event){var bpWidth=referenceFrame.toBP(2.5);this.sortSamples(referenceFrame.chr,genomicLocation-bpWidth,genomicLocation+bpWidth,sortDirection),sortDirection="ASC"===sortDirection?"DESC":"ASC"},igv.AneuTrack.prototype.popupData=function(config){var sampleName,items,genomicLocation=config.genomicLocation,yOffset=(config.x,config.y),referenceFrame=config.viewport.genomicState.referenceFrame,row=Math.floor(yOffset/this.sampleHeight);if(log("popupData for row "+row+", sampleNames="+JSON.stringify(this.sampleNames)),row<this.sampleNames.length){if(sampleName=this.sampleNames[row],items=sampleName?[{name:"Sample",value:sampleName}]:[],this.featureSource.featureCache){var chr=referenceFrame.chrName,featureList=this.featureSource.featureCache.queryFeatures(chr,genomicLocation,genomicLocation);featureList.forEach(function(f){f.sample===sampleName&&(items.push({name:"Value",value:f.value}),items.push({name:"Start",value:f.start}),items.push({name:"End",value:f.end}))})}if(this.featureSourceRed.featureCache){var chr=referenceFrame.chrName,featureList=this.featureSourceRed.featureCache.queryFeatures(chr,genomicLocation,genomicLocation);featureList.forEach(function(f){f.sample===sampleName&&(items.push({name:"Value",value:f.value}),items.push({name:"Start",value:f.start}),items.push({name:"End",value:f.end}))})}return items}return null},igv}(igv||{}),igv=function(igv){return igv.CustomServiceReader=function(config){this.config=config,this.supportsWholeGenome=!0},igv.CustomServiceReader.prototype.readFeatures=function(chr,start,end){var self=this,url=self.config.url,body=self.config.body;return"all"!==chr.toLowerCase()&&(url=url.replace("$CHR",chr).replace("$START",start).replace("$END",end),void 0!==body&&(self.config.body=self.config.body.replace("$CHR",chr).replace("$START",start).replace("$END",end))),igv.xhr.load(url,self.config).then(function(data){if(data){return"function"==typeof self.config.parser?self.config.parser(data):data}return null})},igv}(igv||{}),igv=function(igv){igv.getDataWrapper=function(data){return"string"==typeof data||data instanceof String?new StringDataWrapper(data):new ByteArrayDataWrapper(data)};var StringDataWrapper=function(string){this.data=string,this.ptr=0};StringDataWrapper.prototype.nextLine=function(){var start=this.ptr,idx=this.data.indexOf("\n",start);return idx>0?(this.ptr=idx+1,idx===start?void 0:this.data.substring(start,idx).trim()):(this.ptr=this.data.length,start>=this.data.length?void 0:this.data.substring(start).trim())};var ByteArrayDataWrapper=function(array){this.data=array,this.length=this.data.length,this.ptr=0};return ByteArrayDataWrapper.prototype.nextLine=function(){var c,result;if(result="",!(this.ptr>=this.length)){for(var i=this.ptr;i<this.length;i++)if("\r"!==(c=String.fromCharCode(this.data[i]))){if("\n"===c)break;result+=c}return this.ptr=i+1,result}},igv}(igv||{}),igv=function(igv){function buildTreeMap(featureList){var i,chr,featureCache={},chromosomes=[],treeMap={},genome=igv.browser?igv.browser.genome:null;if(featureList)for(featureList.forEach(function(feature){var geneList,chr=feature.chr;genome&&(chr=genome.getChromosomeName(chr)),geneList=featureCache[chr],geneList||(chromosomes.push(chr),geneList=[],featureCache[chr]=geneList),geneList.push(feature)}),i=0;i<chromosomes.length;i++)chr=chromosomes[i],treeMap[chr]=buildIntervalTree(featureCache[chr]);return treeMap}function buildIntervalTree(featureList){var i,e,iStart,iEnd,tree,chunkSize,len,subArray;for(tree=new igv.IntervalTree,len=featureList.length,chunkSize=Math.max(10,Math.round(len/100)),featureList.sort(function(f1,f2){return f1.start===f2.start?0:f1.start>f2.start?1:-1}),i=0;i<len;i+=chunkSize)e=Math.min(len,i+chunkSize),subArray=featureList.slice(i,e),iStart=subArray[0].start,iEnd=iStart,subArray.forEach(function(feature){iEnd=Math.max(iEnd,feature.end)}),tree.insert(iStart,iEnd,subArray);return tree}return igv.FeatureCache=function(featureList,range){this.treeMap=buildTreeMap(featureList),this.range=range},igv.FeatureCache.prototype.queryFeatures=function(chr,start,end){var featureList,intervalFeatures,feature,len,i,tree,intervals;return(tree=this.treeMap[chr])?(intervals=tree.findOverlapping(start,end),0==intervals.length?[]:(featureList=[],intervals.forEach(function(interval){for(intervalFeatures=interval.value,len=intervalFeatures.length,i=0;i<len&&(feature=intervalFeatures[i],!(feature.start>end));i++)feature.end>=start&&featureList.push(feature)}),featureList.sort(function(a,b){return a.start-b.start}),featureList)):[]},igv.FeatureCache.prototype.allFeatures=function(){var allFeatures=[],treeMap=this.treeMap;if(treeMap)for(var key in treeMap)if(treeMap.hasOwnProperty(key)){var tree=treeMap[key];tree.mapIntervals(function(interval){allFeatures=allFeatures.concat(interval.value)})}return allFeatures.sort(function(a,b){return a.start-b.start}),allFeatures},igv}(igv||{}),igv=function(igv){return igv.FeatureFileReader=function(config){var uriParts;this.config=config||{},this.indexURL=config.indexURL,this.indexed=config.indexed,igv.isFilePath(this.config.url)?this.filename=this.config.url.name:this.config.url.startsWith("data:")?(this.indexed=!1,this.dataURI=config.url):(uriParts=igv.parseUri(this.config.url),this.filename=uriParts.file,this.path=uriParts.path),this.format=this.config.format,this.parser=this.getParser(this.format,this.config.decode),this.supportsWholeGenome="seg"===this.format},igv.FeatureFileReader.prototype.readFeatures=function(chr,start,end){return this.index?this.loadFeaturesWithIndex(chr,start,end):this.dataURI?this.loadFeaturesFromDataURI():this.loadFeaturesNoIndex()},igv.FeatureFileReader.prototype.readHeader=function(){var self=this;return self.header?Promise.resolve(self.header):self.getIndex().then(function(index){var options;return self.dataURI?self.loadFeaturesFromDataURI(self.dataURI).then(function(features){var header=self.header||{};return header.features=features,header}):index?(options=igv.buildOptions(self.config,{bgz:index.tabix,range:{start:0,size:65e3}}),igv.xhr.loadString(self.config.url,options).then(function(data){return self.header=self.parser.parseHeader(data),self.header})):self.loadFeaturesNoIndex().then(function(features){var header=self.header||{};return header.features=features,header})})},igv.FeatureFileReader.prototype.getParser=function(format,decode){switch(format){case"vcf":return new igv.VcfParser;case"seg":return new igv.SegParser;default:return new igv.FeatureParser(format,decode,this.config)}},igv.FeatureFileReader.prototype.loadIndex=function(){var idxFile=this.config.indexURL;return this.filename.endsWith(".gz")?(idxFile||(idxFile=this.config.url+".tbi"),igv.loadBamIndex(idxFile,this.config,!0)):(idxFile||(idxFile=this.config.url+".idx"),igv.loadTribbleIndex(idxFile,this.config))},igv.FeatureFileReader.prototype.loadFeaturesNoIndex=function(){var self=this,options=igv.buildOptions(self.config);return igv.xhr.loadString(self.config.url,options).then(function(data){return self.header=self.parser.parseHeader(data),self.header instanceof String&&self.header.startsWith("##gff-version 3")&&(self.format="gff3"),self.parser.parseFeatures(data)})},igv.FeatureFileReader.prototype.loadFeaturesWithIndex=function(chr,start,end){var blocks,self=this,tabix=self.index&&self.index.tabix,refId=tabix?self.index.sequenceIndexMap[chr]:chr,promises=[];return blocks=self.index.blocksForRange(refId,start,end),blocks&&0!==blocks.length?(blocks.forEach(function(block){promises.push(new Promise(function(fullfill,reject){var endPos,options,success,startPos=block.minv.block,startOffset=block.minv.offset;endPos=endPos=block.maxv.block+65536,options=igv.buildOptions(self.config,{range:{start:startPos,size:endPos-startPos+1}}),success=function(data){var inflated,slicedData,slicedFeatures,filteredFeatures,f,i;for(inflated=self.index.tabix?new Uint8Array(igv.unbgzf(data)):data,slicedData=startOffset?inflated.slice(startOffset):inflated,slicedFeatures=self.parser.parseFeatures(slicedData),filteredFeatures=[],i=0;i<slicedFeatures.length&&(f=slicedFeatures[i],!(f.start>end));i++)f.end>=start&&f.start<=end&&filteredFeatures.push(f);fullfill(filteredFeatures)},self.index.tabix?igv.xhr.loadArrayBuffer(self.config.url,options).then(success).catch(reject):igv.xhr.loadString(self.config.url,options).then(success).catch(reject)}))}),Promise.all(promises).then(function(featureArrays){var i,allFeatures;if(1===featureArrays.length)allFeatures=featureArrays[0];else{for(allFeatures=featureArrays[0],i=1;i<featureArrays.length;i++)allFeatures=allFeatures.concat(featureArrays[i]);allFeatures.sort(function(a,b){return a.start-b.start})}return allFeatures})):Promise.resolve([])},igv.FeatureFileReader.prototype.getIndex=function(){var self=this;return void 0!==self.index||!1===self.indexed?Promise.resolve(self.index):self.indexURL||self.indexed||"string"==typeof self.config.url&&self.config.url.endsWith(".gz")?self.loadIndex().then(function(indexOrUndefined){return indexOrUndefined?(self.index=indexOrUndefined,self.indexed=!0):self.indexed=!1,self.index}).catch(function(error){if(self.indexed=!1,"404"!==error.message||void 0!==self.config.indexURL)throw error;igv.presentAlert("Index file not found. Check track configuration",void 0)}):(self.indexed=!1,Promise.resolve(void 0))},igv.FeatureFileReader.prototype.loadFeaturesFromDataURI=function(){var bytes,inflate,plain,features,split=this.dataURI.split(","),info=split[0].split(":")[1],dataString=split[1];dataString=info.indexOf("base64")>=0?atob(dataString):decodeURI(dataString),bytes=new Uint8Array(dataString.length);for(var i=0;i<dataString.length;i++)bytes[i]=dataString.charCodeAt(i);return inflate=new Zlib.Gunzip(bytes),plain=inflate.decompress(),features=this.parser.parseFeatures(plain),Promise.resolve(features)},igv}(igv||{}),igv=function(igv){function parseFixedStep(line){var tokens=line.split(/\s+/);return{format:"fixedStep",chrom:tokens[1].split("=")[1],start:parseInt(tokens[2].split("=")[1],10),step:parseInt(tokens[3].split("=")[1],10),span:tokens.length>4?parseInt(tokens[4].split("=")[1],10):1,index:0}}function parseVariableStep(line){var tokens=line.split(/\s+/);return{format:"variableStep",chrom:tokens[1].split("=")[1],span:tokens.length>2?parseInt(tokens[2].split("=")[1],10):1}}function parseTrackLine(line){var i,tk,curr,properties={},tokens=line.split(/(?:")([^"]+)(?:")|([^\s"]+)(?=\s+|$)/g),tmp=[];for(i=1;i<tokens.length;i++)tokens[i]&&0!==tokens[i].trim().length&&(tk=tokens[i].trim(),tk.endsWith("=")>0?curr=tk:curr?(tmp.push(curr+tk),curr=void 0):tmp.push(tk));return tmp.forEach(function(str){if(str){var kv=str.split("=",2);2==kv.length&&(properties[kv[0]]=kv[1])}}),properties}function decodeBed(tokens,ignore){var chr,start,end,id,name,tmp,idName,exonCount,exonSizes,exonStarts,exons,exon,feature,eStart,eEnd;if(!(tokens.length<3)){if(chr=tokens[0],start=parseInt(tokens[1]),end=tokens.length>2?parseInt(tokens[2]):start+1,feature={chr:chr,start:start,end:end,score:1e3},tokens.length>3){tmp=tokens[3].replace(/"/g,""),idName=tmp.split(";");for(var i=0;i<idName.length;i++){var kv=idName[i].split("=");"gene_id"==kv[0]&&(id=kv[1]),"gene_name"==kv[0]&&(name=kv[1])}feature.id=id||tmp,feature.name=name||tmp}if(tokens.length>4&&(feature.score=parseFloat(tokens[4])),tokens.length>5&&(feature.strand=tokens[5]),tokens.length>6&&(feature.cdStart=parseInt(tokens[6])),tokens.length>7&&(feature.cdEnd=parseInt(tokens[7])),tokens.length>8&&"."!==tokens[8]&&"0"!==tokens[8]&&(feature.color=igv.Color.createColorString(tokens[8])),tokens.length>11){exonCount=parseInt(tokens[9]),exonSizes=tokens[10].split(","),exonStarts=tokens[11].split(","),exons=[];for(var i=0;i<exonCount;i++){eStart=start+parseInt(exonStarts[i]),eEnd=eStart+parseInt(exonSizes[i]);var exon={start:eStart,end:eEnd};(feature.cdStart>eEnd||feature.cdEnd<feature.cdStart)&&(exon.utr=!0),feature.cdStart>=eStart&&feature.cdStart<=eEnd&&(exon.cdStart=feature.cdStart),feature.cdEnd>=eStart&&feature.cdEnd<=eEnd&&(exon.cdEnd=feature.cdEnd),exons.push(exon)}feature.exons=exons}return feature.popupData=function(){var data=[];return feature.name&&data.push({name:"Name",value:feature.name}),"+"!==feature.strand&&"-"!==feature.strand||data.push({name:"Strand",value:feature.strand}),data},feature}}function decodeGenePred(tokens,ignore){var shift=void 0===this.shift?0:1;if(!(tokens.length<9+shift)){for(var feature={name:tokens[0+shift],chr:tokens[1+shift],strand:tokens[2+shift],start:parseInt(tokens[3+shift]),end:parseInt(tokens[4+shift]),cdStart:parseInt(tokens[5+shift]),cdEnd:parseInt(tokens[6+shift]),id:tokens[0+shift]},exonCount=parseInt(tokens[7+shift]),exonStarts=tokens[8+shift].split(","),exonEnds=tokens[9+shift].split(","),exons=[],i=0;i<exonCount;i++)exons.push({start:parseInt(exonStarts[i]),end:parseInt(exonEnds[i])});return feature.exons=exons,feature.popupData=function(){return[{name:"Name",value:feature.name}]},feature}}function decodeGenePredExt(tokens,ignore){var shift=void 0===this.shift?0:1;if(!(tokens.length<11+shift)){for(var feature={name:tokens[11+shift],chr:tokens[1+shift],strand:tokens[2+shift],start:parseInt(tokens[3+shift]),end:parseInt(tokens[4+shift]),cdStart:parseInt(tokens[5+shift]),cdEnd:parseInt(tokens[6+shift]),id:tokens[0+shift]},exonCount=parseInt(tokens[7+shift]),exonStarts=tokens[8+shift].split(","),exonEnds=tokens[9+shift].split(","),exons=[],i=0;i<exonCount;i++)exons.push({start:parseInt(exonStarts[i]),end:parseInt(exonEnds[i])});return feature.exons=exons,feature.popupData=function(){return[{name:"Name",value:feature.name}]},feature}}function decodeReflat(tokens,ignore){var shift=void 0===this.shift?0:1;if(!(tokens.length<10+shift)){for(var feature={name:tokens[0+shift],id:tokens[1+shift],chr:tokens[2+shift],strand:tokens[3+shift],start:parseInt(tokens[4+shift]),end:parseInt(tokens[5+shift]),cdStart:parseInt(tokens[6+shift]),cdEnd:parseInt(tokens[7+shift])},exonCount=parseInt(tokens[8+shift]),exonStarts=tokens[9+shift].split(","),exonEnds=tokens[10+shift].split(","),exons=[],i=0;i<exonCount;i++)exons.push({start:parseInt(exonStarts[i]),end:parseInt(exonEnds[i])});return feature.exons=exons,feature.popupData=function(){return[{name:"Name",value:feature.name}]},feature}}function decodePeak(tokens,ignore){var chr,start,end,strand,name,score,qValue,signal,pValue;return tokens.length<9?null:(chr=tokens[0],start=parseInt(tokens[1]),end=parseInt(tokens[2]),name=tokens[3],score=parseFloat(tokens[4]),strand=tokens[5].trim(),signal=parseFloat(tokens[6]),pValue=parseFloat(tokens[7]),qValue=parseFloat(tokens[8]),0===score&&(score=signal),{chr:chr,start:start,end:end,name:name,score:score,strand:strand,signal:signal,pValue:pValue,qValue:qValue})}function decodeBedGraph(tokens,ignore){var chr,start,end,value;return tokens.length<3?null:(chr=tokens[0],start=parseInt(tokens[1]),end=parseInt(tokens[2]),value=parseFloat(tokens[3]),{chr:chr,start:start,end:end,value:value})}function decodeWig(tokens,wig){var ss,ee,value;return"fixedStep"===wig.format?(ss=wig.index*wig.step+wig.start,ee=ss+wig.span,value=parseFloat(tokens[0]),++wig.index,isNaN(value)?null:{chr:wig.chrom,start:ss,end:ee,value:value}):"variableStep"===wig.format?tokens.length<2?null:(ss=parseInt(tokens[0],10),ee=ss+wig.span,value=parseFloat(tokens[1]),isNaN(value)?null:{chr:wig.chrom,start:ss,end:ee,value:value}):decodeBedGraph(tokens)}function decodeAneu(tokens,ignore){var chr,start,end,feature;return tokens.length<4?null:(chr=tokens[1],start=parseInt(tokens[2]),end=tokens.length>3?parseInt(tokens[3]):start+1,feature={chr:chr,start:start,end:end},tokens.length>4&&(feature.score=parseFloat(tokens[4]),feature.value=feature.score),feature.popupData=function(){return[{name:"Name",value:feature.name}]},feature)}function decodeFusionJuncSpan(tokens,ignore){var chr=tokens[0],fusion_name=tokens[1],junction_left=parseInt(tokens[2]),junction_right=parseInt(tokens[3]),num_junction_reads=parseInt(tokens[4]),num_spanning_frags=parseInt(tokens[5]),spanning_frag_coords_text=tokens[6],feature={chr:chr,name:fusion_name,junction_left:junction_left,junction_right:junction_right,num_junction_reads:num_junction_reads,num_spanning_frags:num_spanning_frags,spanning_frag_coords:[],start:-1,end:-1},min_coord=junction_left,max_coord=junction_right;if(num_spanning_frags>0)for(var coord_pairs=spanning_frag_coords_text.split(","),i=0;i<coord_pairs.length;i++){var split_coords=coord_pairs[i].split("-"),span_left=split_coords[0],span_right=split_coords[1];span_left<min_coord&&(min_coord=span_left),span_right>max_coord&&(max_coord=span_right),feature.spanning_frag_coords.push({left:span_left,right:span_right})}return feature.start=min_coord,feature.end=max_coord,feature.popupData=function(){return[{name:"Name",value:feature.name}]},feature}function decodeGtexGWAS(tokens,ignore){var chr,start,end,pValue;return tokens.length<8?null:(chr=tokens[0],start=parseInt(tokens[1])-1,end=parseInt(tokens[3].split(":")[1]),pValue=parseFloat(tokens[5]),{chr:chr,start:start,end:end,pvalue:pValue})}function decodeGFF(tokens,ignore){var chr,start,end,strand,type,score,attributeString,id,parent,color,name,i,format=this.format;if(tokens.length<9)return null;chr=tokens[0],type=tokens[2],start=parseInt(tokens[3])-1,end=parseInt(tokens[4]),score="."===tokens[5]?0:parseFloat(tokens[5]),strand=tokens[6],"."===tokens[7]||parseInt(tokens[7]),attributeString=tokens[8];var delim="gff3"===format?"=":/\s+/,attributes={};if(attributeString.split(";").forEach(function(kv){var key,value,t=kv.trim().split(delim,2);2==t.length&&(key=t[0].trim(),value=t[1].trim(),value.startsWith('"')&&value.endsWith('"')&&(value=value.substr(1,value.length-2)),"ID"===t[0]?id=t[1]:"Parent"===t[0]?parent=t[1]:"color"===t[0].toLowerCase()?color=igv.Color.createColorString(t[1]):"transcript_id"===t[0]&&(id=t[1]),attributes[key]=value)}),this.nameField)name=attributes[this.nameField];else for(i=0;i<gffNameFields.length;i++)if(attributes.hasOwnProperty(gffNameFields[i])){this.nameField=gffNameFields[i],name=attributes[this.nameField];break}return{id:id,parent:parent,name:name,type:type,chr:chr,start:start,end:end,score:score,strand:strand,color:color,attributeString:attributeString,popupData:function(){var key,value,kvs=this.attributeString.split(";"),pd=[];return kvs.forEach(function(kv){var t=kv.trim().split(delim,2);2===t.length&&void 0!==t[1]&&(key=t[0].trim(),value=t[1].trim(),value.startsWith('"')&&value.endsWith('"')&&(value=value.substr(1,value.length-2)),pd.push({name:key,value:value}))}),pd}}}function decodeCustom(tokens,ignore){var feature,chr,start,end,format=this.format,coords=format.coords||0;return tokens.length<3?null:(chr=tokens[format.chr],start=parseInt(tokens[format.start])-coords,end=void 0!==format.end?parseInt(tokens[format.end]):start+1,feature={chr:chr,start:start,end:end},format.fields&&format.fields.forEach(function(field,index){index!=format.chr&&index!=format.start&&index!=format.end&&(feature[field]=tokens[index])}),feature)}var maxFeatureCount=Number.MAX_VALUE,gffNameFields=["Name","gene_name","gene","gene_id","alias","locus"];return igv.FeatureParser=function(format,decode,config){var customFormat;switch(void 0!==format&&(this.format=format.toLowerCase()),this.nameField=config?config.nameField:void 0,this.skipRows=0,decode&&(this.decode=decode),this.format){case"narrowpeak":case"broadpeak":case"peaks":this.decode=decodePeak,this.delimiter=/\s+/;break;case"bedgraph":this.decode=decodeBedGraph,this.delimiter=/\s+/;break;case"wig":this.decode=decodeWig,this.delimiter=/\s+/;break;case"gff3":case"gff":case"gtf":this.decode=decodeGFF,this.delimiter="\t";break;case"aneu":this.decode=decodeAneu,this.delimiter="\t";break;case"fusionjuncspan":this.decode=decodeFusionJuncSpan,this.delimiter=/\s+/;break;case"gtexgwas":this.skipRows=1,this.decode=decodeGtexGWAS,this.delimiter="\t";break;case"refflat":this.decode=decodeReflat,this.delimiter=/\s+/;break;case"genepred":this.decode=decodeGenePred,this.delimiter=/\s+/;break;case"genepredext":this.decode=decodeGenePredExt,this.delimiter=/\s+/;break;case"refgene":this.decode=decodeGenePredExt,this.delimiter=/\s+/,this.shift=1;break;case"bed":this.decode=decodeBed,this.delimiter=config.delimiter||/\s+/;default:customFormat=igv.getFormat(format),void 0!==customFormat?(this.decode=decodeCustom,this.format=customFormat,this.delimiter=customFormat.delimiter||"\t"):(this.decode=decodeBed,this.delimiter=/\s+/)}},igv.FeatureParser.prototype.parseHeader=function(data){var line,header,dataWrapper;for(dataWrapper=igv.getDataWrapper(data);(line=dataWrapper.nextLine())&&(line.startsWith("track")||line.startsWith("#")||line.startsWith("browser"));)line.startsWith("track")?header=parseTrackLine(line):line.startsWith("##gff-version 3")&&(this.format="gff3",header||(header={}),header.format="gff3");return header},igv.FeatureParser.prototype.parseFeatures=function(data){if(!data)return null;var dataWrapper,wig,feature,tokens,line,i,j,allFeatures=[],cnt=0,decode=this.decode,format=this.format,delimiter=this.delimiter||"\t";for(dataWrapper=igv.getDataWrapper(data),i=0;line=dataWrapper.nextLine();)i<this.skipRows||line.startsWith("track")||line.startsWith("#")||line.startsWith("browser")||("wig"===format&&line.startsWith("fixedStep")?wig=parseFixedStep(line):"wig"===format&&line.startsWith("variableStep")?wig=parseVariableStep(line):(tokens=line.split(delimiter),tokens.length<1||(feature=decode.call(this,tokens,wig),feature&&(allFeatures.length<maxFeatureCount?allFeatures.push(feature):(j=Math.floor(Math.random()*cnt))<maxFeatureCount&&(allFeatures[j]=feature),cnt++),i++)));return allFeatures},igv}(igv||{}),igv=function(igv){function addFeaturesToDB(featureList){featureList.forEach(function(feature){feature.name&&(igv.browser.featureDB[feature.name.toUpperCase()]=feature)})}function packFeatures(features,maxRows){function pack(featureList,maxRows){var rows=[];featureList.sort(function(a,b){return a.start-b.start}),rows.push(-1e3),featureList.forEach(function(feature){var r,len=Math.min(rows.length,maxRows),start=feature.start;for(r=0;r<len;r++)if(start>=rows[r])return feature.row=r,void(rows[r]=feature.end);feature.row=r,rows[r]=feature.end})}if(null!=features&&0!==features.length){var chrFeatureMap={},chrs=[];features.forEach(function(feature){var chr=feature.chr,flist=chrFeatureMap[chr];flist||(flist=[],chrFeatureMap[chr]=flist,chrs.push(chr)),flist.push(feature)}),chrs.forEach(function(chr){pack(chrFeatureMap[chr],maxRows)})}}function getWGFeatures(features){var wgFeatures,wgChromosomeNames,genome;return genome=igv.browser.genome,wgChromosomeNames=new Set(genome.wgChromosomeNames),wgFeatures=[],features.forEach(function(f){var wg,queryChr;queryChr=genome.getChromosomeName(f.chr),wgChromosomeNames.has(queryChr)&&(wg=Object.assign({},f),wg.start=igv.browser.genome.getGenomeCoordinate(f.chr,f.start),wg.end=igv.browser.genome.getGenomeCoordinate(f.chr,f.end),wgFeatures.push(wg))}),wgFeatures}return igv.FeatureSource=function(config){this.config=config||{},this.sourceType=void 0===config.sourceType?"file":config.sourceType,"ga4gh"===config.sourceType?this.reader=new igv.Ga4ghVariantReader(config):"immvar"===config.sourceType?this.reader=new igv.ImmVarReader(config):"eqtl"===config.type?"gtex-ws"===config.sourceType?this.reader=new igv.GtexReader(config):this.reader=new igv.GtexFileReader(config):"bigquery"===config.sourceType?this.reader=new igv.BigQueryFeatureReader(config):"ucscservice"===config.sourceType?this.reader=new igv.UCSCServiceReader(config.source):"custom"===config.sourceType||void 0!==config.source?this.reader=new igv.CustomServiceReader(config.source):this.reader=new igv.FeatureFileReader(config),this.visibilityWindow=config.visibilityWindow},igv.FeatureSource.prototype.getFileHeader=function(){var self=this,maxRows=this.config.maxRows||500;return self.header?Promise.resolve(self.header):"function"==typeof self.reader.readHeader?self.reader.readHeader().then(function(header){if(header){self.header=header;var features=header.features;features&&("gtf"!==self.config.format&&"gff3"!==self.config.format&&"gff"!==self.config.format||(features=new igv.GFFHelper(self.config.format).combineFeatures(features)),packFeatures(features,maxRows),self.featureCache=new igv.FeatureCache(features),self.config.searchable&&addFeaturesToDB(features))}return header&&header.format&&(self.config.format=header.format),header}):(self.header={},Promise.resolve(self.header))},igv.FeatureSource.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel){var genomicInterval,featureCache,maxRows,queryChr,self=this;if(queryChr=igv.browser&&igv.browser.genome?igv.browser.genome.getChromosomeName(chr):chr,genomicInterval=new igv.GenomicInterval(queryChr,bpStart,bpEnd),featureCache=self.featureCache,maxRows=self.config.maxRows||500,"all"===chr.toLowerCase())return self.reader.supportsWholeGenome?featureCache&&void 0===featureCache.range?Promise.resolve(getWGFeatures(featureCache.allFeatures())):self.reader.readFeatures(queryChr).then(function(featureList){return featureList&&"function"==typeof featureList.forEach&&("gtf"!==self.config.format&&"gff3"!==self.config.format&&"gff"!==self.config.format||(featureList=new igv.GFFHelper(self.config.format).combineFeatures(featureList)),self.featureCache=new igv.FeatureCache(featureList),packFeatures(featureList,maxRows)),getWGFeatures(self.featureCache.allFeatures())}):Promise.resolve(null);if(featureCache&&(void 0===featureCache.range||featureCache.range.containsRange(genomicInterval)))return Promise.resolve(self.featureCache.queryFeatures(queryChr,bpStart,bpEnd));if("file"===self.sourceType&&(void 0===self.visibilityWindow||self.visibilityWindow<=0)){genomicInterval.start=0;var chromosome=igv.browser?igv.browser.genome.getChromosome(chr):void 0;genomicInterval.end=void 0===chromosome?Number.MAX_VALUE:chromosome.bpLength}return self.reader.readFeatures(queryChr,genomicInterval.start,genomicInterval.end).then(function(featureList){if(featureList){var isQueryable=self.reader.indexed||"file"!==self.config.sourceType;return"gtf"!==self.config.format&&"gff3"!==self.config.format&&"gff"!==self.config.format||(featureList=new igv.GFFHelper(self.config.format).combineFeatures(featureList)),self.featureCache=isQueryable?new igv.FeatureCache(featureList,genomicInterval):new igv.FeatureCache(featureList),packFeatures(featureList,maxRows),self.config.searchable&&addFeaturesToDB(featureList),featureList}})},igv}(igv||{}),igv=function(igv){function extractPopupData(feature){var data=[];for(var property in feature)feature.hasOwnProperty(property)&&"chr"!==property&&"start"!==property&&"end"!==property&&"row"!==property&&igv.isStringOrNumber(feature[property])&&data.push({name:property,value:feature[property]});return data}function calculateFeatureCoordinates(feature,bpStart,xScale){var px=Math.round((feature.start-bpStart)/xScale),px1=Math.round((feature.end-bpStart)/xScale),pw=px1-px;return pw<3&&(pw=3,px-=1),{px:px,px1:px1,pw:pw}}function renderFeature(feature,bpStart,xScale,pixelHeight,ctx,options){var x,e,exonCount,cy,direction,exon,ePx,ePx1,ePxU,ePw,py2,h2,py,windowX,windowX1,coord=calculateFeatureCoordinates(feature,bpStart,xScale),h=this.featureHeight,step=this.arrowSpacing,color=this.color;if(this.config.colorBy){var colorByValue=feature[this.config.colorBy.field];colorByValue&&(color=this.config.colorBy.pallete[colorByValue])}else feature.color&&(color=feature.color);if(ctx.fillStyle=color,ctx.strokeStyle=color,"SQUISHED"===this.displayMode&&void 0!==feature.row?(h=this.featureHeight/2,py=this.expandedCallHeight*feature.row+2):py="EXPANDED"===this.displayMode&&void 0!==feature.row?this.squishedCallHeight*feature.row+5:5,cy=py+h/2,h2=h/2,py2=cy-h2/2,0===(exonCount=feature.exons?feature.exons.length:0))ctx.fillRect(coord.px,py,coord.pw,h);else{for(igv.graphics.strokeLine(ctx,coord.px+1,cy,coord.px1-1,cy),direction="+"===feature.strand?1:-1,x=coord.px+step/2;x<coord.px1;x+=step)igv.graphics.strokeLine(ctx,x-2*direction,cy-2,x,cy),igv.graphics.strokeLine(ctx,x-2*direction,cy+2,x,cy);for(e=0;e<exonCount;e++)if(exon=feature.exons[e],ePx=Math.round((exon.start-bpStart)/xScale),ePx1=Math.round((exon.end-bpStart)/xScale),ePw=Math.max(1,ePx1-ePx),exon.utr)ctx.fillRect(ePx,py2,ePw,h2);else if(exon.cdStart&&(ePxU=Math.round((exon.cdStart-bpStart)/xScale),ctx.fillRect(ePx,py2,ePxU-ePx,h2),ePw-=ePxU-ePx,ePx=ePxU),exon.cdEnd&&(ePxU=Math.round((exon.cdEnd-bpStart)/xScale),ctx.fillRect(ePxU,py2,ePx1-ePxU,h2),ePw-=ePx1-ePxU,ePx1=ePxU),ctx.fillRect(ePx,py,ePw,h),ePw>step+5){for(ctx.fillStyle="white",ctx.strokeStyle="white",x=ePx+step/2;x<ePx1;x+=step)igv.graphics.strokeLine(ctx,x-2*direction,cy-2,x,cy),igv.graphics.strokeLine(ctx,x-2*direction,cy+2,x,cy);ctx.fillStyle=color,ctx.strokeStyle=color}}windowX=Math.round(options.viewportContainerX),windowX1=windowX+options.viewportContainerWidth/(options.genomicState.locusCount||1),renderFeatureLabels.call(this,ctx,feature,coord.px,coord.px1,py,windowX,windowX1,options.genomicState,options)}function renderFeatureLabels(ctx,feature,featureX,featureX1,featureY,windowX,windowX1,genomicState,options){var geneColor,geneFontStyle,transform,boxX,boxX1,labelX,labelY,textFitsInBox,selectedFeatureName=igv.FeatureTrack.selectedGene?igv.FeatureTrack.selectedGene.toUpperCase():void 0;options.selection;featureX1<windowX||featureX>windowX1?(boxX=featureX,boxX1=featureX1):(boxX=Math.max(featureX,windowX),boxX1=Math.min(featureX1,windowX1)),genomicState.selection&&"genes"===this.config.type&&void 0!==feature.name&&(geneColor=genomicState.selection.colorForGene(feature.name)),textFitsInBox=boxX1-boxX>ctx.measureText(feature.name).width,(void 0!==feature.name&&feature.name.toUpperCase()===selectedFeatureName||(textFitsInBox||geneColor)&&"SQUISHED"!==this.displayMode&&void 0!==feature.name)&&(geneFontStyle={font:"10px PT Sans",textAlign:"center",fillStyle:geneColor||feature.color||this.color,strokeStyle:geneColor||feature.color||this.color},"COLLAPSED"===this.displayMode&&"SLANT"===this.labelDisplayMode&&(transform={rotate:{angle:45}},delete geneFontStyle.textAlign),labelX=boxX+(boxX1-boxX)/2,labelY=getFeatureLabelY(featureY,transform),options.labelTransform?(ctx.save(),options.labelTransform(ctx,labelX),igv.graphics.fillText(ctx,feature.name,labelX,labelY,geneFontStyle,void 0),ctx.restore()):igv.graphics.fillText(ctx,feature.name,labelX,labelY,geneFontStyle,transform))}function getFeatureLabelY(featureY,transform){return transform?featureY+20:featureY+25}function monitorTrackDrag(track){var onDragEnd=function(){track.trackView&&track.trackView.tile&&"SQUISHED"!==track.displayMode&&track.trackView.update()},unSubscribe=function(removedTrack){igv.browser.un&&track===removedTrack&&(igv.browser.un("trackdrag",onDragEnd),igv.browser.un("trackremoved",unSubscribe))};igv.browser.on&&(igv.browser.on("trackdragend",onDragEnd),igv.browser.on("trackremoved",unSubscribe))}function renderVariant(variant,bpStart,xScale,pixelHeight,ctx){var style,coord=calculateFeatureCoordinates(variant,bpStart,xScale),py=20,h=10;switch(variant.genotype){case"HOMVAR":style=this.homvarColor;break;case"HETVAR":style=this.hetvarColor;break;default:style=this.color}ctx.fillStyle=style,ctx.fillRect(coord.px,py,coord.pw,h)}function renderFusionJuncSpan(feature,bpStart,xScale,pixelHeight,ctx){var py=(calculateFeatureCoordinates(feature,bpStart,xScale),5),rowHeight="EXPANDED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight;"SQUISHED"===this.displayMode&&void 0!=feature.row?py=rowHeight*feature.row:"EXPANDED"===this.displayMode&&void 0!=feature.row&&(py=rowHeight*feature.row);var cy=py+.5*rowHeight,top_y=cy-.5*rowHeight,bottom_y=cy+.5*rowHeight,junction_left_px=Math.round((feature.junction_left-bpStart)/xScale),junction_right_px=Math.round((feature.junction_right-bpStart)/xScale);ctx.beginPath(),ctx.moveTo(junction_left_px,cy),ctx.bezierCurveTo(junction_left_px,top_y,junction_right_px,top_y,junction_right_px,cy),ctx.lineWidth=1+Math.log(feature.num_junction_reads)/Math.log(2),ctx.strokeStyle="blue",ctx.stroke();for(var spanning_coords=feature.spanning_frag_coords,i=0;i<spanning_coords.length;i++){var spanning_info=spanning_coords[i],span_left_px=Math.round((spanning_info.left-bpStart)/xScale),span_right_px=Math.round((spanning_info.right-bpStart)/xScale);ctx.beginPath(),ctx.moveTo(span_left_px,cy),ctx.bezierCurveTo(span_left_px,bottom_y,span_right_px,bottom_y,span_right_px,cy),ctx.lineWidth=1,ctx.strokeStyle="purple",ctx.stroke()}}function renderSnp(snp,bpStart,xScale,pixelHeight,ctx){function colorByFunc(theFunc){var priorities,funcArray=theFunc.split(","),codingNonSynonSet=new Set(["nonsense","missense","stop-loss","frameshift","cds-indel"]),codingSynonSet=new Set(["coding-synon"]),spliceSiteSet=new Set(["splice-3","splice-5"]),untranslatedSet=new Set(["untranslated-5","untranslated-3"]);return priorities=funcArray.map(function(func){return codingNonSynonSet.has(func)||spliceSiteSet.has(func)?colorArrLength-1:codingSynonSet.has(func)?colorArrLength-2:untranslatedSet.has(func)?colorArrLength-3:0}),priorities.reduce(function(a,b){return Math.max(a,b)})}function colorByClass(cls){return"deletion"===cls?colorArrLength-1:"mnp"===cls?colorArrLength-2:"microsatellite"===cls||"named"===cls?colorArrLength-3:0}var colorPriority,coord=calculateFeatureCoordinates(snp,bpStart,xScale),py=20,h=10,colorArrLength=this.snpColors.length;switch(this.colorBy){case"function":colorPriority=colorByFunc(snp.func);break;case"class":colorPriority=colorByClass(snp.class)}ctx.fillStyle=this.snpColors[colorPriority],ctx.fillRect(coord.px,py,coord.pw,h)}return igv.FeatureTrack=function(config){void 0===config.height&&(config.height=50),void 0===config.maxRows&&(config.maxRows=500),igv.configTrack(this,config),this.displayMode=config.displayMode||"COLLAPSED",this.labelDisplayMode=config.labelDisplayMode,this.variantHeight=config.variantHeight||this.height,this.squishedCallHeight=config.squishedCallHeight||30,this.expandedCallHeight=config.expandedCallHeight||15,this.featureHeight=config.featureHeight||14,this.maxRows=config.maxRows,config.url&&(igv.filenameOrURLHasSuffix(config.url,".bigbed")||igv.filenameOrURLHasSuffix(config.url,".bb")||igv.filenameOrURLHasSuffix(config.url,".bigwig")||igv.filenameOrURLHasSuffix(config.url,".bw"))?this.featureSource=new igv.BWSource(config):this.featureSource=new igv.FeatureSource(config),config.render?this.render=config.render:"variant"===config.type?(this.render=renderVariant,this.homvarColor="rgb(17,248,254)",this.hetvarColor="rgb(34,12,253)"):"FusionJuncSpan"===config.type?(this.render=renderFusionJuncSpan,this.height=config.height||50,this.autoHeight=!1):"snp"===config.type?(this.render=renderSnp,this.snpColors=["rgb(0,0,0)","rgb(0,0,255)","rgb(0,255,0)","rgb(255,0,0)"],this.colorBy="function"):(this.render=renderFeature,this.arrowSpacing=30,monitorTrackDrag(this))},igv.FeatureTrack.prototype.getFileHeader=function(){var self=this;return"function"==typeof self.featureSource.getFileHeader?self.featureSource.getFileHeader().then(function(header){return header&&(header.name&&!self.config.name&&(self.name=header.name),header.color&&!self.config.color&&(self.color="rgb("+header.color+")")),header}):Promise.resolve(void 0)},igv.FeatureTrack.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel){return this.featureSource.getFeatures(chr,bpStart,bpEnd,bpPerPixel)},igv.FeatureTrack.prototype.computePixelHeight=function(features){if("COLLAPSED"===this.displayMode)return this.variantHeight;var maxRow=0;return features&&"function"==typeof features.forEach&&features.forEach(function(feature){feature.row&&feature.row>maxRow&&(maxRow=feature.row)}),Math.max(this.variantHeight,(maxRow+1)*("SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight))},igv.FeatureTrack.prototype.draw=function(options){var selectedFeatureName,selectedFeature,c,track=this,featureList=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight,bpEnd=bpStart+pixelWidth*bpPerPixel+1;if(igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"}),featureList){selectedFeatureName=igv.FeatureTrack.selectedGene?igv.FeatureTrack.selectedGene.toUpperCase():void 0;for(var gene,i=0,len=featureList.length;i<len;i++)if(gene=featureList[i],!(gene.end<bpStart)){if(gene.start>bpEnd)break;!selectedFeature&&selectedFeatureName&&selectedFeatureName===gene.name.toUpperCase()?selectedFeature=gene:track.render.call(this,gene,bpStart,bpPerPixel,pixelHeight,ctx,options)}selectedFeature&&(c=selectedFeature.color,selectedFeature.color="rgb(255,0,0)",track.render.call(this,selectedFeature,bpStart,bpPerPixel,pixelHeight,ctx,options),selectedFeature.color=c)}else console.log("No feature list")},igv.FeatureTrack.prototype.popupData=function(config){if(config.viewport.cachedFeatures){var tolerance,featureList,row,popupData,ss,ee,genomicLocation=config.genomicLocation,yOffset=config.y,referenceFrame=config.viewport.genomicState.referenceFrame;if(tolerance=2*referenceFrame.bpPerPixel,ss=genomicLocation-tolerance,ee=genomicLocation+tolerance,featureList=config.viewport.cachedFeatures.features,"COLLAPSED"!==this.displayMode&&(row="SQUISHED"===this.displayMode?Math.floor((yOffset-2)/this.expandedCallHeight):Math.floor((yOffset-5)/this.squishedCallHeight)),featureList&&featureList.length>0)return popupData=[],featureList.forEach(function(feature){var featureData;feature.end>=ss&&feature.start<=ee&&(void 0!==row&&void 0!==feature.row&&row!==feature.row||(featureData=feature.popupData?feature.popupData(genomicLocation):extractPopupData(feature))&&(popupData.length>0&&popupData.push("<HR>"),Array.prototype.push.apply(popupData,featureData)))}),popupData}return null},igv.FeatureTrack.prototype.menuItemList=function(popover){function markupStringified(displayMode,index,selfDisplayMode){var lut,chosen;return lut={COLLAPSED:"Collapse",SQUISHED:"Squish",EXPANDED:"Expand"},chosen=0===index?'<div class="igv-track-menu-border-top">':"<div>",displayMode===selfDisplayMode?chosen+'<i class="fa fa-check fa-check-shim"></i>'+lut[displayMode]+"</div>":chosen+'<i class="fa fa-check fa-check-shim fa-check-hidden"></i>'+lut[displayMode]+"</div>"}function colorSchemeMarkup(colorScheme,index,selfColorScheme){var chosen=0===index?'<div class="igv-track-menu-border-top">':"<div>";return colorScheme===selfColorScheme?chosen+'<i class="fa fa-check fa-check-shim"></i>Color by '+colorScheme+"</div>":chosen+'<i class="fa fa-check fa-check-shim fa-check-hidden"></i>Color by '+colorScheme+"</div>"}var mapped,self=this,menuItems=[];if(this.render===renderSnp){var colorByItems=["function","class"].map(function(colorScheme,index){return{object:$(colorSchemeMarkup(colorScheme,index,self.colorBy)),click:function(){popover.hide(),self.colorBy=colorScheme,self.trackView.update()}}});menuItems=menuItems.concat(colorByItems)}return mapped=["COLLAPSED","SQUISHED","EXPANDED"].map(function(displayMode,index){return{object:$(markupStringified(displayMode,index,self.displayMode)),click:function(){popover.hide(),self.displayMode=displayMode,self.trackView.update()}}}),menuItems=menuItems.concat(mapped)},igv.FeatureTrack.prototype.popupMenuItemList=function(config){function setColorBy(value){self.colorBy=value,self.trackView.update(),config.popover.hide()}if(this.render===renderSnp){var menuItems=[],self=this;return menuItems.push({name:"Color by function",click:function(){setColorBy("function")}}),menuItems.push({name:"Color by class",click:function(){setColorBy("class")}}),menuItems}},igv.FeatureTrack.prototype.description=function(){var desc;return renderSnp===this.render?(desc="<html>"+this.name+"<hr>",desc+="<em>Color By Function:</em><br>",desc+='<span style="color:red">Red</span>: Coding-Non-Synonymous, Splice Site<br>',desc+='<span style="color:green">Green</span>: Coding-Synonymous<br>',desc+='<span style="color:blue">Blue</span>: Untranslated<br>',desc+='<span style="color:black">Black</span>: Intron, Locus, Unknown<br><br>',desc+="<em>Color By Class:</em><br>",desc+='<span style="color:red">Red</span>: Deletion<br>',desc+='<span style="color:green">Green</span>: MNP<br>',desc+='<span style="color:blue">Blue</span>: Microsatellite, Named<br>',desc+='<span style="color:black">Black</span>: Indel, Insertion, SNP',desc+="</html>"):this.name},igv.FeatureTrack.prototype.popupMenuItemList=function(config){function setColorBy(value){self.colorBy=value,self.trackView.update(),config.popover.hide()}if(this.render===renderSnp){var menuItems=[],self=this;return menuItems.push({name:"Color by function",click:function(){setColorBy("function")}}),menuItems.push({name:"Color by class",click:function(){setColorBy("class")}}),menuItems}},igv}(igv||{}),igv=function(igv){return igv.FeatureUtils={packFeatures:function(features,maxRows,sorted){var start,end;if(features){if(maxRows=maxRows||1e4,sorted||features.sort(function(a,b){return a.start-b.start}),0===features.length)return[];var nextStart,row,index,bucket,feature,bucketStart,bucketList=[],allocatedCount=0,lastAllocatedCount=0,gap=2,packedRows=[];for(start=features[0].start,end=features[features.length-1].start,bucketStart=Math.max(start,features[0].start),nextStart=bucketStart,features.forEach(function(alignment){var buckListIndex=Math.max(0,alignment.start-bucketStart);void 0===bucketList[buckListIndex]&&(bucketList[buckListIndex]=[]),bucketList[buckListIndex].push(alignment)}),row=0;allocatedCount<features.length&&packedRows.length<maxRows;){for(;nextStart<=end;){for(bucket=void 0;!bucket&&nextStart<=end;)index=nextStart-bucketStart,void 0===bucketList[index]?++nextStart:bucket=bucketList[index];if(!bucket)break;feature=bucket.pop(),0===bucket.length&&(bucketList[index]=void 0),feature.row=row,nextStart=feature.end+gap,++allocatedCount}if(row++,nextStart=bucketStart,allocatedCount===lastAllocatedCount)break;lastAllocatedCount=allocatedCount}}}},igv}(igv||{}),igv=function(igv){function setTypes(){transcriptTypes=new Set,cdsTypes=new Set,utrTypes=new Set,exonTypes=new Set,["transcript","primary_transcript","processed_transcript","mRNA","mrna"].forEach(function(m){transcriptTypes.add(m)}),["CDS","cds","start_codon","stop_codon"].forEach(function(m){cdsTypes.add(m)}),["5UTR","3UTR","UTR","five_prime_UTR","three_prime_UTR","3'-UTR","5'-UTR"].forEach(function(m){utrTypes.add(m)}),["exon","coding-exon"].forEach(function(m){exonTypes.add(m)})}function combineFeaturesGTF(features){var transcripts={},combinedFeatures=[];return features.forEach(function(f){var transcriptId,gffTranscript;transcriptTypes.has(f.type)&&(transcriptId=f.id,transcriptId?(gffTranscript=new GFFTranscript(f),transcripts[transcriptId]=gffTranscript,combinedFeatures.push(gffTranscript)):combinedFeatures.push(f))}),features.forEach(function(f){var id,transcript;exonTypes.has(f.type)&&(id=f.id)&&(transcript=transcripts[id],void 0===transcript&&(transcript=new GFFTranscript(f),transcripts[id]=transcript,combinedFeatures.push(transcript)),transcript.addExon(f))}),features.forEach(function(f){var id,transcript;(cdsTypes.has(f.type)||utrTypes.has(f.type))&&(id=f.id)&&(transcript=transcripts[id],void 0===transcript&&(transcript=new GFFTranscript(f),transcripts[id]=transcript,combinedFeatures.push(transcript)),utrTypes.has(f.type)?transcript.addUTR(f):transcript.addCDS(f))}),combinedFeatures.forEach(function(f){f instanceof GFFTranscript&&f.finish()}),combinedFeatures.sort(function(a,b){return a.start-b.start}),combinedFeatures}function combineFeaturesGFF(features){function getParents(f){return f.parent&&""!==f.parent.trim()?f.parent.trim().split(","):null}var parents,transcripts={},combinedFeatures=[];return features.forEach(function(f){var transcriptId,gffTranscript;transcriptTypes.has(f.type)&&(transcriptId=f.id,transcriptId?(gffTranscript=new GFFTranscript(f),transcripts[transcriptId]=gffTranscript,combinedFeatures.push(gffTranscript)):combinedFeatures.push(f))}),features.forEach(function(f){var transcript;exonTypes.has(f.type)&&(parents=getParents(f),parents?parents.forEach(function(id){transcript=transcripts[id],void 0===transcript&&(transcript=new GFFTranscript(f),transcripts[id]=transcript,combinedFeatures.push(transcript)),transcript.addExon(f)}):combinedFeatures.push(f))}),features.forEach(function(f){var transcript;(cdsTypes.has(f.type)||utrTypes.has(f.type))&&(parents=getParents(f),parents?parents.forEach(function(id){transcript=transcripts[id],void 0===transcript&&(transcript=new GFFTranscript(f),transcripts[id]=transcript,combinedFeatures.push(transcript)),utrTypes.has(f.type)?transcript.addUTR(f):transcript.addCDS(f)}):combinedFeatures.push(f))}),combinedFeatures.forEach(function(f){f instanceof GFFTranscript&&f.finish()}),combinedFeatures.sort(function(a,b){return a.start-b.start}),combinedFeatures}var transcriptTypes,cdsTypes,utrTypes,exonTypes;return igv.GFFHelper=function(format){this.format=format},igv.GFFHelper.prototype.combineFeatures=function(features){return void 0===transcriptTypes&&setTypes(),"gff3"===this.format?combineFeaturesGFF.call(this,features):combineFeaturesGTF.call(this,features)},GFFTranscript=function(feature){Object.assign(this,feature),this.exons=[],this.attributeString=feature.attributeString},GFFTranscript.prototype.addExon=function(feature){this.exons.push({start:feature.start,end:feature.end}),this.start=Math.min(this.start,feature.start),this.end=Math.max(this.end,feature.end)},GFFTranscript.prototype.addCDS=function(cds){var i,exon,exons=this.exons;for(i=0;i<exons.length;i++)if(exons[i].start<=cds.start&&exons[i].end>=cds.end){exon=exons[i];break}exon?(exon.cdStart=exon.cdStart?Math.min(cds.start,exon.cdStart):cds.start,exon.cdEnd=exon.cdEnd?Math.max(cds.end,exon.cdEnd):cds.end):exons.push({start:cds.start,end:cds.end,cdStart:cds.start,cdEnd:cds.end}),this.start=Math.min(this.start,cds.start),this.end=Math.max(this.end,cds.end),this.cdStart=this.cdStart?Math.min(cds.start,this.cdStart):cds.start,this.cdEnd=this.cdEnd?Math.max(cds.end,this.cdEnd):cds.end},GFFTranscript.prototype.addUTR=function(utr){var i,exon,exons=this.exons;for(i=0;i<exons.length;i++)if(exons[i].start<=utr.start&&exons[i].end>=utr.end){exon=exons[i];break}exon?utr.start===exon.start&&utr.end===exon.end&&(exon.utr=!0):exons.push({start:utr.start,end:utr.end,utr:!0}),this.start=Math.min(this.start,utr.start),this.end=Math.max(this.end,utr.end)},GFFTranscript.prototype.finish=function(){var cdStart=this.cdStart,cdEnd=this.cdEnd;this.exons.sort(function(a,b){return a.start-b.start}),cdStart&&this.exons.forEach(function(exon){(exon.end<cdStart||exon.start>cdEnd)&&(exon.utr=!0)})},igv}(igv||{}),igv=function(igv){function autoscale(chr,featureArrays){var min=0,max=-Number.MAX_VALUE;return featureArrays.forEach(function(features){features.forEach(function(f){Number.isNaN(f.value)||(min=Math.min(min,f.value),max=Math.max(max,f.value))})}),{min:min,max:max}}return igv.MergedTrack=function(config){var self=this;if(!config.tracks)return void console.log("Error: not tracks defined for merged track. "+config);void 0===config.height&&(config.height=50),igv.configTrack(this,config),this.tracks=[],config.tracks.forEach(function(tconf){tconf.type||igv.inferTrackTypes(tconf);var t=igv.createTrack(tconf);t?(t.autoscale=!1,self.tracks.push(t)):console.log("Could not create track "+tconf)})},igv.MergedTrack.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel){var promises=this.tracks.map(function(t){return t.getFeatures(chr,bpStart,bpEnd,bpPerPixel)});return Promise.all(promises)},igv.MergedTrack.prototype.draw=function(options){var i,len,mergedFeatures,trackOptions,dataRange;for(mergedFeatures=options.features,dataRange=autoscale(options.genomicState.chromosome.name,mergedFeatures),i=0,len=this.tracks.length;i<len;i++)trackOptions=Object.assign({},options),trackOptions.features=mergedFeatures[i],this.tracks[i].dataRange=dataRange,this.tracks[i].draw(trackOptions)},igv.MergedTrack.prototype.paintAxis=function(ctx,pixelWidth,pixelHeight){var i,len,autoscale,track;for(autoscale=!0,i=0,len=this.tracks.length;i<len&&(track=this.tracks[i],"function"!=typeof track.paintAxis||(track.paintAxis(ctx,pixelWidth,pixelHeight),!autoscale));i++);},igv}(igv||{}),igv=function(igv){Number.MAX_VALUE;return igv.SegParser=function(){},igv.SegParser.prototype.parseHeader=function(data){var line,i,tokens,lines=data.splitLines(),len=lines.length;for(i=0;i<len;i++)if(line=lines[i],!line.startsWith("#"))return tokens=line.split("\t"),this.header={headings:tokens,lineCount:i+1},this.header;return this.header},igv.SegParser.prototype.parseFeatures=function(data){var tokens,i,dataColumn,lines=data?data.splitLines():[],len=lines.length,allFeatures=[];for(this.header||(this.header=this.parseHeader(data)),dataColumn=this.header.headings.length-1,i=this.header.lineCount;i<len;i++)lines[i],tokens=lines[i].split("\t"),tokens.length>dataColumn&&allFeatures.push({sample:tokens[0],chr:tokens[1],start:parseInt(tokens[2]),end:parseInt(tokens[3]),value:parseFloat(tokens[dataColumn])});return allFeatures},igv}(igv||{}),igv=function(igv){var sortDirection="DESC";return igv.SegTrack=function(config){igv.configTrack(this,config),this.isLog=void 0!==config.isLog&&config.isLog,this.displayMode=config.displayMode||"SQUISHED",this.maxHeight=config.maxHeight||500,this.sampleSquishHeight=config.sampleSquishHeight||2,this.sampleExpandHeight=config.sampleExpandHeight||12,this.posColorScale=config.posColorScale||new igv.GradientColorScale({low:.1,lowR:255,lowG:255,lowB:255,high:1.5,highR:255,highG:0,highB:0}),this.negColorScale=config.negColorScale||new igv.GradientColorScale({low:-1.5,lowR:0,lowG:0,lowB:255,high:-.1,highR:255,highG:255,highB:255}),this.sampleCount=0,this.samples={},this.sampleNames=[],this.featureSource=new igv.FeatureSource(this.config),this.supportsWholeGenome=!0},igv.SegTrack.prototype.menuItemList=function(popover){var self=this;return[{name:"SQUISHED"===this.displayMode?"Expand sample hgt":"Squish sample hgt",click:function(){popover.hide(),self.toggleSampleHeight()}}]},igv.SegTrack.prototype.toggleSampleHeight=function(){this.displayMode="SQUISHED"===this.displayMode?"EXPANDED":"SQUISHED",this.trackView.update()},igv.SegTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){var self=this;return 0===self.sampleCount&&"function"==typeof self.featureSource.reader.allSamples?self.featureSource.reader.allSamples().then(function(samples){return samples.forEach(function(sample){self.samples[sample]=self.sampleCount,self.sampleNames.push(sample),self.sampleCount++}),self.featureSource.getFeatures(chr,bpStart,bpEnd)}):self.featureSource.getFeatures(chr,bpStart,bpEnd)},igv.SegTrack.prototype.draw=function(options){var featureList,ctx,bpPerPixel,bpStart,pixelWidth,pixelHeight,bpEnd,segment,len,sample,i,y,color,value,px,px1,pw,xScale,sampleHeight,border,myself=this;if(sampleHeight="SQUISHED"===this.displayMode?this.sampleSquishHeight:this.sampleExpandHeight,border="SQUISHED"===this.displayMode?0:1,ctx=options.context,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight,igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"}),featureList=options.features){for(bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,bpEnd=bpStart+pixelWidth*bpPerPixel+1,xScale=bpPerPixel,i=0,len=featureList.length;i<len;i++)sample=featureList[i].sample,this.samples.hasOwnProperty(sample)||(this.samples[sample]=myself.sampleCount,this.sampleNames.push(sample),this.sampleCount++);for(i=0,len=featureList.length;i<len;i++)if(segment=featureList[i],!(segment.end<bpStart)){if(segment.start>bpEnd)break;y=myself.samples[segment.sample]*sampleHeight+border,value=segment.value,myself.isLog||(value=Math.log2(value/2)),color=value<-.1?myself.negColorScale.getColor(value):value>.1?myself.posColorScale.getColor(value):"white",px=Math.round((segment.start-bpStart)/xScale),px1=Math.round((segment.end-bpStart)/xScale),pw=Math.max(1,px1-px),igv.graphics.fillRect(ctx,px,y,pw,sampleHeight-2*border,{fillStyle:color})}}else console.log("No feature list")},igv.SegTrack.prototype.computePixelHeight=function(features){var i,len,sample,sampleHeight="SQUISHED"===this.displayMode?this.sampleSquishHeight:this.sampleExpandHeight;for(i=0,len=features.length;i<len;i++)sample=features[i].sample,this.samples.hasOwnProperty(sample)||(this.samples[sample]=this.sampleCount,this.sampleNames.push(sample),this.sampleCount++);return this.sampleCount*sampleHeight},igv.SegTrack.prototype.sortSamples=function(chr,bpStart,bpEnd,direction){var self=this,d2="ASC"===direction?1:-1;this.featureSource.getFeatures(chr,bpStart,bpEnd).then(function(featureList){var segment,min,max,f,i,s,sampleNames,scores={},bpLength=bpEnd-bpStart+1;for(i=0;i<featureList.length;i++)if(segment=featureList[i],!(segment.end<bpStart)){if(segment.start>bpEnd)break;min=Math.max(bpStart,segment.start),max=Math.min(bpEnd,segment.end),f=(max-min)/bpLength,s=scores[segment.sample],s||(s=0),scores[segment.sample]=s+f*segment.value}for(sampleNames=Object.keys(self.samples),sampleNames.sort(function(a,b){var s1=scores[a],s2=scores[b];return s1||(s1=Number.MAX_VALUE),s2||(s2=Number.MAX_VALUE),s1==s2?0:s1>s2?d2:-1*d2}),i=0;i<sampleNames.length;i++)self.samples[sampleNames[i]]=i;self.sampleNames=sampleNames,self.trackView.update()})},igv.SegTrack.prototype.popupData=function(config){var sampleName,row,items,genomicLocation=config.genomicLocation,yOffset=(config.x,config.y),referenceFrame=config.viewport.genomicState.referenceFrame,sampleHeight="SQUISHED"===this.displayMode?this.sampleSquishHeight:this.sampleExpandHeight;if((row=Math.floor(yOffset/sampleHeight))<this.sampleNames.length){if(sampleName=this.sampleNames[row],items=[{name:"Sample",value:sampleName}],this.featureSource.featureCache){var chr=referenceFrame.chrName;this.featureSource.featureCache.queryFeatures(chr,genomicLocation,genomicLocation).forEach(function(f){f.sample===sampleName&&items.push({name:"Value",value:f.value})})}return items}return null},igv.SegTrack.prototype.popupMenuItemList=function(config){var $e,clickHandler,self=this;return $e=$("<div>"),$e.text("Sort by value"),clickHandler=function(){var genomicLocation=config.genomicLocation,referenceFrame=config.viewport.genomicState.referenceFrame,bpWidth=referenceFrame.toBP(2.5);self.sortSamples(referenceFrame.chrName,genomicLocation-bpWidth,genomicLocation+bpWidth,sortDirection),sortDirection="ASC"===sortDirection?"DESC":"ASC",config.popover.hide()},[{name:void 0,object:$e,click:clickHandler,init:void 0}]},igv}(igv||{}),igv=function(igv){return igv.loadTribbleIndex=function(indexFile,config){var genome=igv.browser?igv.browser.genome:null;return new Promise(function(fullfill){function readHeader(parser){var version=(parser.getInt(),parser.getInt(),parser.getInt());parser.getString(),parser.getLong(),parser.getLong(),parser.getString(),parser.getInt();if(version<3&&(SEQUENCE_DICTIONARY_FLAG,SEQUENCE_DICTIONARY_FLAG),version>=3)for(var nProperties=parser.getInt();nProperties-- >0;){parser.getString(),parser.getString()}}function readLinear(parser){var chr=parser.getString(),blockMax=0;genome&&(chr=genome.getChromosomeName(chr));for(var nBins=(parser.getInt(),parser.getInt()),blocks=(parser.getInt(),parser.getInt(),parser.getInt(),new Array),pos=parser.getLong(),blocks=new Array,binNumber=0;binNumber<nBins;binNumber++){var nextPos=parser.getLong();blocks.push({min:pos,max:nextPos}),pos=nextPos,nextPos>blockMax&&(blockMax=nextPos)}return{chr:chr,blocks:blocks}}igv.xhr.loadArrayBuffer(indexFile,igv.buildOptions(config)).then(function(arrayBuffer){if(arrayBuffer){var index={},parser=new igv.BinaryParser(new DataView(arrayBuffer));readHeader(parser);for(var nChrs=parser.getInt();nChrs-- >0;){var chrIdx=readLinear(parser);index[chrIdx.chr]=chrIdx}fullfill(new igv.TribbleIndex(index))}else fullfill(null)}).catch(function(error){console.log(error),fullfill(null)})})},igv.TribbleIndex=function(chrIndexTable){this.chrIndex=chrIndexTable},igv.TribbleIndex.prototype.blocksForRange=function(queryChr,min,max){var chrIdx=this.chrIndex[queryChr];if(chrIdx){var blocks=chrIdx.blocks,lastBlock=blocks[blocks.length-1];return[{minv:{block:blocks[0].min,offset:0},maxv:{block:lastBlock.max,offset:0}}]}return null},igv}(igv||{}),igv=function(igv){function addExons(sample){var exonCount,exonStarts,exonEnds,exons,eStart,eEnd;exonCount=sample.exonCount,exonStarts=sample.exonStarts.split(","),exonEnds=sample.exonEnds.split(","),exons=[];for(var i=0;i<exonCount;i++){eStart=parseInt(exonStarts[i]),eEnd=parseInt(exonEnds[i]);var exon={start:eStart,end:eEnd};(sample.cdsStart>eEnd||sample.cdsEnd<sample.cdsStart)&&(exon.utr=!0),sample.cdsStart>=eStart&&sample.cdsStart<=eEnd&&(exon.cdStart=sample.cdsStart),sample.cdsEnd>=eStart&&sample.cdsEnd<=eEnd&&(exon.cdEnd=sample.cdsEnd),exons.push(exon)}sample.exons=exons}return igv.UCSCServiceReader=function(config){this.config=config},igv.UCSCServiceReader.prototype.readFeatures=function(chr,start,end){var self=this,url=this.config.url+"&table="+this.config.tableName+"&chr="+chr+"&start="+start+"&end="+end;return igv.xhr.loadJson(url,self.config).then(function(data){return data?(data.forEach(function(sample){sample.hasOwnProperty("exonStarts")&&sample.hasOwnProperty("exonEnds")&&sample.hasOwnProperty("exonCount")&&sample.hasOwnProperty("cdsStart")&&sample.hasOwnProperty("cdsEnd")&&addExons(sample)}),data):null})},igv}(igv||{}),igv=function(igv){function autoscale(features){var min=0,max=-Number.MAX_VALUE;return features.forEach(function(f){Number.isNaN(f.value)||(min=Math.min(min,f.value),max=Math.max(max,f.value))}),{min:min,max:max}}function signsDiffer(a,b){return a>0&&b<0||a<0&&b>0}function binarySearch(features,position,tolerance){function test(feature,position,tolerance){return position>=feature.start-tolerance&&position<=feature.end+tolerance}function delta(feature,position){return Math.min(Math.abs(feature.start-position),Math.abs(feature.end-position))}for(var candidateFeature,tmp,delta,startIndex=0,stopIndex=features.length-1,index=startIndex+stopIndex>>1;!test(features[index],position,tolerance)&&startIndex<stopIndex;)position<features[index].start?stopIndex=index-1:position>features[index].end&&(startIndex=index+1),index=startIndex+stopIndex>>1;if(test(features[index],position,tolerance)){if(candidateFeature=features[index],test(candidateFeature,position,0))return candidateFeature;for(tmp=index;tmp-- >=0&&(test(features[tmp]),!tolerance);){if(test(features[tmp],position,0))return features[tmp];for(delta(features[tmp],position)<delta(candidateFeature,position)&&(candidateFeature=features[tmp]),tmp=index;tmp++<features.length&&(test(features[tmp]),!tolerance);){if(test(features[tmp],position,0))return features[tmp];delta(features[tmp],position)<delta(candidateFeature,position)&&(candidateFeature=features[tmp])}}return candidateFeature}return void console.log(position+" not found!")}return igv.WIGTrack=function(config){this.config=config,this.url=config.url,void 0===config.color&&(config.color="rgb(150,150,150)"),void 0===config.height&&(config.height=50),igv.configTrack(this,config),"bigwig"===config.format?this.featureSource=new igv.BWSource(config):"tdf"===config.format?this.featureSource=new igv.TDFSource(config):this.featureSource=new igv.FeatureSource(config),void 0!==config.max?this.dataRange={min:config.min||0,max:config.max}:this.autoscale=!0,this.windowFunction=config.windowFunction||"mean",this.paintAxis=igv.paintAxis},igv.WIGTrack.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel){return this.featureSource.getFeatures(chr,bpStart,bpEnd,bpPerPixel,this.windowFunction)},igv.WIGTrack.prototype.menuItemList=function(popover){function htmlStringified(autoscale){var html=[];return html.push('<div id="datarange-autoscale">'),html.push(!0===autoscale?'<i class="fa fa-check">':'<i class="fa fa-check fa-check-hidden">'),html.push("</i>"),html.push("Autoscale"),html.push("</div>"),html.join("")}var self=this,menuItems=[];return menuItems.push(igv.dataRangeMenuItem(popover,this.trackView)),menuItems.push({object:$(htmlStringified(self.autoscale)),click:function(){var $fa=$(this).find("i");popover.hide(),self.autoscale=!self.autoscale,!0===self.autoscale?$fa.removeClass("fa-check-hidden"):$fa.addClass("fa-check-hidden"),self.trackView.setDataRange(void 0,void 0,self.autoscale)}}),menuItems},igv.WIGTrack.prototype.getFileHeader=function(){var self=this;return"function"==typeof self.featureSource.getFileHeader?self.featureSource.getFileHeader().then(function(header){return header&&(header.name&&!self.config.name&&(self.name=header.name),header.color&&!self.config.color&&(self.color="rgb("+header.color+")")),header}):Promise.resolve(null)},igv.WIGTrack.prototype.draw=function(options){function renderFeature(feature,index,featureList){var yUnitless,heightUnitLess,x,width,color,rectEnd;feature.end<bpStart||feature.start>bpEnd||(x=Math.floor((feature.start-bpStart)/bpPerPixel),rectEnd=Math.ceil((feature.end-bpStart)/bpPerPixel),width=Math.max(1,rectEnd-x),signsDiffer(featureValueMinimum,featureValueMaximum)?feature.value<0?(yUnitless=featureValueMaximum/featureValueRange,heightUnitLess=-feature.value/featureValueRange):(yUnitless=(featureValueMaximum-feature.value)/featureValueRange,heightUnitLess=feature.value/featureValueRange):featureValueMinimum<0?(yUnitless=0,heightUnitLess=-feature.value/featureValueRange):(yUnitless=1-feature.value/featureValueRange,heightUnitLess=feature.value/featureValueRange),color="function"==typeof self.color?self.color(feature.value):self.color,igv.graphics.fillRect(ctx,x,yUnitless*pixelHeight,width,heightUnitLess*pixelHeight,{fillStyle:color}))}var featureValueMinimum,featureValueMaximum,featureValueRange,baselineColor,self=this,features=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight,bpEnd=bpStart+pixelWidth*bpPerPixel+1;if(this.currentFeatures=options.features,"string"==typeof self.color&&self.color.startsWith("rgb(")&&(baselineColor=igv.Color.addAlpha(self.color,.1)),features&&features.length>0){if(self.autoscale||void 0===self.dataRange){var s=autoscale(features);featureValueMinimum=self.config.min||s.min,featureValueMaximum=s.max}else featureValueMinimum=void 0===self.dataRange.min?0:self.dataRange.min,featureValueMaximum=self.dataRange.max;if(void 0===self.dataRange&&(self.dataRange={}),self.dataRange.min=featureValueMinimum,self.dataRange.max=featureValueMaximum,featureValueMaximum>featureValueMinimum){if(featureValueRange=featureValueMaximum-featureValueMinimum,features.forEach(renderFeature),featureValueMinimum<0){var alpha=ctx.lineWidth;ctx.lineWidth=5;var basepx=featureValueMaximum/(featureValueMaximum-featureValueMinimum)*options.pixelHeight;ctx.lineWidth=alpha}igv.graphics.strokeLine(ctx,0,basepx,options.pixelWidth,basepx,{strokeStyle:baselineColor})}}},igv.WIGTrack.prototype.popupData=function(config){if(!this.currentFeatures)return null;var tolerance,featureList,popupData,selectedFeature,genomicLocation=config.genomicLocation,referenceFrame=config.viewport.genomicState.referenceFrame;return featureList=this.currentFeatures,featureList.length>0?(popupData=[],tolerance=2*referenceFrame.bpPerPixel,selectedFeature=binarySearch(featureList,genomicLocation,tolerance),selectedFeature&&(popupData.push({name:"Position:",value:igv.numberFormatter(selectedFeature.start+1)+"-"+igv.numberFormatter(selectedFeature.end)}),popupData.push({name:"Value:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",value:igv.numberFormatter(selectedFeature.value)})),popupData):void 0},igv}(igv||{}),igv=function(igv){function translateCigar(cigar){var cigarUnit,opLen,opLtr,i,lengthOnRef=0,cigarArray=[];for(i=0;i<cigar.length;i++)cigarUnit=cigar[i],opLtr=CigarOperationTable[cigarUnit.operation],opLen=parseInt(cigarUnit.operationLength),"M"!=opLtr&&"EQ"!=opLtr&&"X"!=opLtr&&"D"!=opLtr&&"N"!=opLtr&&"="!=opLtr||(lengthOnRef+=opLen),cigarArray.push({len:opLen,ltr:opLtr});return{lengthOnRef:lengthOnRef,array:cigarArray}}function makeBlocks(record,cigarArray){for(var blockSeq,blockQuals,gapType,blocks=[],seqOffset=0,pos=record.start,len=cigarArray.length,i=0;i<len;i++){var c=cigarArray[i];switch(c.ltr){case"H":case"P":break;case"S":seqOffset+=c.len,gapType="S";break;case"N":pos+=c.len,gapType="N";break;case"D":pos+=c.len,gapType="D";break;case"I":seqOffset+=c.len;break;case"M":case"EQ":case"=":case"X":blockSeq="*"===record.seq?"*":record.seq.substr(seqOffset,c.len),blockQuals="*"===record.qual?"*":record.qual.slice(seqOffset,c.len),blocks.push({start:pos,len:c.len,seq:blockSeq,qual:blockQuals,gapType:gapType}),seqOffset+=c.len,pos+=c.len;break;default:console.log("Error processing cigar element: "+c.len+c.ltr)}}return blocks}var CigarOperationTable={ALIGNMENT_MATCH:"M",INSERT:"I",DELETE:"D",SKIP:"N",CLIP_SOFT:"S",CLIP_HARD:"H",PAD:"P",SEQUENCE_MATCH:"=",SEQUENCE_MISMATCH:"X"};return igv.Ga4ghAlignment=function(json,genome){var alignment,cigarDecoded;this.readName=json.fragmentName,this.properPlacement=json.properPlacement,this.duplicateFragment=json.duplicateFragment,this.numberReads=json.numberReads,this.fragmentLength=json.fragmentLength,this.readNumber=json.readNumber,this.failedVendorQualityChecks=json.failedVendorQualityChecks,this.secondaryAlignment=json.secondaryAlignment,this.supplementaryAlignment=json.supplementaryAlignment,this.seq=json.alignedSequence,this.qual=json.alignedQuality,this.tagDict=json.info,alignment=json.alignment,alignment?(this.mapped=!0,this.chr=json.alignment.position.referenceName,genome&&(this.chr=genome.getChromosomeName(this.chr)),this.start=parseInt(json.alignment.position.position),this.strand=!json.alignment.position.reverseStrand,this.mq=json.alignment.mappingQuality,cigarDecoded=translateCigar(json.alignment.cigar),this.lengthOnRef=cigarDecoded.lengthOnRef,this.blocks=makeBlocks(this,cigarDecoded.array)):this.mapped=!1,json.nextMatePosition&&(this.mate={chr:json.nextMatePosition.referenceFrame,position:parseInt(json.nextMatePosition.position),strand:!json.nextMatePosition.reverseStrand},this.info=json.info),igv.BamUtils.setPairOrientation(this)},igv.Ga4ghAlignment.prototype.isMapped=function(){return this.mapped},igv.Ga4ghAlignment.prototype.isPaired=function(){return this.numberReads&&this.numberReads>1},igv.Ga4ghAlignment.prototype.isProperPair=function(){return void 0===this.properPlacement||this.properPlacement},igv.Ga4ghAlignment.prototype.isFirstOfPair=function(){return this.readNumber&&0===this.readNumber},igv.Ga4ghAlignment.prototype.isSecondOfPair=function(){return this.readNumber&&1===this.readNumber},igv.Ga4ghAlignment.prototype.isSecondary=function(){return this.secondaryAlignment},igv.Ga4ghAlignment.prototype.isSupplementary=function(){return this.supplementaryAlignment},igv.Ga4ghAlignment.prototype.isFailsVendorQualityCheck=function(){return this.failedVendorQualityChecks},igv.Ga4ghAlignment.prototype.isDuplicate=function(){return this.duplicateFragment},igv.Ga4ghAlignment.prototype.isMateMapped=function(){return this.mate},igv.Ga4ghAlignment.prototype.mateStrand=function(){return this.mate&&this.mate.strand},igv.Ga4ghAlignment.prototype.tags=function(){return this.info},igv.Ga4ghAlignment.prototype.popupData=function(genomicLocation){function yesNo(bool){return bool?"Yes":"No"}var isFirst,nameValues;nameValues=[],nameValues.push({name:"Read Name",value:this.readName}),nameValues.push("<hr>"),nameValues.push({name:"Alignment Start",value:igv.numberFormatter(1+this.start),borderTop:!0}),nameValues.push({name:"Read Strand",value:!0===this.strand?"(+)":"(-)",borderTop:!0}),nameValues.push({name:"Cigar",value:this.cigar}),nameValues.push({name:"Mapped",value:yesNo(this.isMapped())}),nameValues.push({name:"Mapping Quality",value:this.mq}),nameValues.push({name:"Secondary",value:yesNo(this.isSecondary())}),nameValues.push({name:"Supplementary",value:yesNo(this.isSupplementary())}),nameValues.push({name:"Duplicate",value:yesNo(this.isDuplicate())}),nameValues.push({name:"Failed QC",value:yesNo(this.isFailsVendorQualityCheck())}),this.isPaired()&&(nameValues.push("<hr>"),nameValues.push({name:"First in Pair",value:!this.isSecondOfPair(),borderTop:!0}),nameValues.push({name:"Mate is Mapped",value:yesNo(this.isMateMapped())}),this.pairOrientation&&nameValues.push({name:"Pair Orientation",value:this.pairOrientation}),this.isMateMapped()&&(nameValues.push({name:"Mate Start",value:this.matePos}),nameValues.push({name:"Mate Strand",value:this.mateStrand()?"(-)":"(+)"}),nameValues.push({name:"Insert Size",value:this.fragmentLength}))),nameValues.push("<hr>"),this.tags(),isFirst=!0;for(var key in this.tagDict)this.tagDict.hasOwnProperty(key)&&(isFirst?(nameValues.push({name:key,value:this.tagDict[key],borderTop:!0}),isFirst=!1):nameValues.push({name:key,value:this.tagDict[key]}));return nameValues},igv}(igv||{}),igv=function(igv){function populateChrAliasTable(chrAliasTable,datasetId){var i;if("461916304629"===datasetId||"337315832689"===datasetId){for(i=1;i<23;i++)chrAliasTable["chr"+i]=i;chrAliasTable.chrX="X",chrAliasTable.chrY="Y",chrAliasTable.chrM="MT"}}var CigarOperationTable={ALIGNMENT_MATCH:"M",INSERT:"I",DELETE:"D",SKIP:"N",CLIP_SOFT:"S",CLIP_HARD:"H",PAD:"P",SEQUENCE_MATCH:"=",SEQUENCE_MISMATCH:"X"};return igv.Ga4ghAlignmentReader=function(config){this.config=config,this.url=config.url,this.filter=config.filter||new igv.BamFilter,this.readGroupSetIds=config.readGroupSetIds,this.authKey=config.authKey,this.samplingWindowSize=void 0===config.samplingWindowSize?100:config.samplingWindowSize,this.samplingDepth=void 0===config.samplingDepth?100:config.samplingDepth,config.viewAsPairs?this.pairsSupported=!0:this.pairsSupported=void 0===config.pairsSupported||config.pairsSupported},igv.Ga4ghAlignmentReader.prototype.readAlignments=function(chr,bpStart,bpEnd){var self=this;return new Promise(function(fulfill,reject){function getChrAliasTable(){return self.chrAliasTable?Promise.resolve(self.chrAliasTable):new Promise(function(fulfill,reject){self.readMetadata().then(function(json){if(self.chrAliasTable={},igv.browser&&json.readGroups&&json.readGroups.length>0){var referenceSetId=json.readGroups[0].referenceSetId;if(console.log("No reference set specified"),referenceSetId){var readURL=self.url+"/references/search";igv.ga4ghSearch({url:readURL,body:{referenceSetId:referenceSetId},decode:function(j){return j.references}}).then(function(references){references.forEach(function(ref){var refName=ref.name,alias=igv.browser.genome.getChromosomeName(refName);self.chrAliasTable[alias]=refName}),fulfill(self.chrAliasTable)}).catch(reject)}else populateChrAliasTable(self.chrAliasTable,self.config.datasetId),fulfill(self.chrAliasTable)}else fulfill(self.chrAliasTable)}).catch(reject)})}function decodeGa4ghReads(json){function encodeCigar(cigarArray){var cigarString="";return cigarArray.forEach(function(cigarUnit){var op=CigarOperationTable[cigarUnit.operation],len=cigarUnit.operationLength;cigarString+=len+op}),cigarString}function encodeFlags(json){return 0}function translateCigar(cigar){var cigarUnit,opLen,opLtr,i,lengthOnRef=0,cigarArray=[];for(i=0;i<cigar.length;i++)cigarUnit=cigar[i],opLtr=CigarOperationTable[cigarUnit.operation],opLen=parseInt(cigarUnit.operationLength),"M"!==opLtr&&"EQ"!==opLtr&&"X"!==opLtr&&"D"!==opLtr&&"N"!==opLtr&&"="!==opLtr||(lengthOnRef+=opLen),cigarArray.push({len:opLen,ltr:opLtr});return{lengthOnRef:lengthOnRef,array:cigarArray}}function makeBlocks(record,cigarArray){for(var insertions,blockSeq,gapType,blockQuals,blocks=[],seqOffset=0,pos=record.start,len=cigarArray.length,i=0;i<len;i++){var c=cigarArray[i];switch(c.ltr){case"H":case"P":break;case"S":seqOffset+=c.len,gapType="S";break;case"N":pos+=c.len,gapType="N";break;case"D":pos+=c.len,gapType="D";break;case"I":blockSeq="*"===record.seq?"*":record.seq.substr(seqOffset,c.len),blockQuals=record.qual?record.qual.slice(seqOffset,c.len):void 0,void 0===insertions&&(insertions=[]),insertions.push({start:pos,len:c.len,seq:blockSeq,qual:blockQuals}),seqOffset+=c.len;break;case"M":case"EQ":case"=":case"X":blockSeq="*"===record.seq?"*":record.seq.substr(seqOffset,c.len),blockQuals=record.qual?record.qual.slice(seqOffset,c.len):void 0,blocks.push({start:pos,len:c.len,seq:blockSeq,qual:blockQuals,gapType:gapType}),seqOffset+=c.len,pos+=c.len;break;default:console.log("Error processing cigar element: "+c.len+c.ltr)}}return{blocks:blocks,insertions:insertions}}var i,json,alignment,jsonAlignment,cigarDecoded,mate,blocks,jsonRecords=json.alignments,len=jsonRecords.length,alignments=[],genome=igv.browser.genome;for(i=0;i<len;i++)json=jsonRecords[i],alignment=new igv.BamAlignment,alignment.readName=json.fragmentName,alignment.properPlacement=json.properPlacement,alignment.duplicateFragment=json.duplicateFragment,alignment.numberReads=json.numberReads,alignment.fragmentLength=json.fragmentLength,alignment.readNumber=json.readNumber,alignment.failedVendorQualityChecks=json.failedVendorQualityChecks,alignment.secondaryAlignment=json.secondaryAlignment,alignment.supplementaryAlignment=json.supplementaryAlignment,alignment.seq=json.alignedSequence,alignment.qual=json.alignedQuality,alignment.matePos=json.nextMatePosition,alignment.tagDict=json.info,alignment.flags=encodeFlags(json),jsonAlignment=json.alignment,jsonAlignment?(alignment.mapped=!0,alignment.chr=json.alignment.position.referenceName,genome&&(alignment.chr=genome.getChromosomeName(alignment.chr)),alignment.start=parseInt(json.alignment.position.position),alignment.strand=!json.alignment.position.reverseStrand,alignment.mq=json.alignment.mappingQuality,alignment.cigar=encodeCigar(json.alignment.cigar),cigarDecoded=translateCigar(json.alignment.cigar),alignment.lengthOnRef=cigarDecoded.lengthOnRef,blocks=makeBlocks(alignment,cigarDecoded.array),alignment.blocks=blocks.blocks,alignment.insertions=blocks.insertions):alignment.mapped=!1,mate=json.nextMatePosition,mate&&(alignment.mate={chr:mate.referenceFrame,position:parseInt(mate.position),strand:!mate.reverseStrand}),self.filter.pass(alignment)&&alignments.push(alignment);return alignments}getChrAliasTable().then(function(chrAliasTable){var queryChr=chrAliasTable.hasOwnProperty(chr)?chrAliasTable[chr]:chr,readURL=self.url+"/reads/search";igv.ga4ghSearch({url:readURL,body:{readGroupSetIds:[self.readGroupSetIds],referenceName:queryChr,start:bpStart,end:bpEnd,pageSize:"10000"},decode:decodeGa4ghReads,results:new igv.AlignmentContainer(chr,bpStart,bpEnd,self.samplingWindowSize,self.samplingDepth,self.pairsSupported)}).then(fulfill).catch(reject)}).catch(reject)})},igv.Ga4ghAlignmentReader.prototype.readMetadata=function(){return igv.ga4ghGet({url:this.url,entity:"readgroupsets",entityId:this.readGroupSetIds})},igv.decodeGa4ghReadset=function(json){var sequenceNames=[];return json.fileData.forEach(function(fileObject){fileObject.refSequences.forEach(function(refSequence){sequenceNames.push(refSequence.name)})}),sequenceNames},igv}(igv||{}),igv=function(igv){function ga4ghToken(){var acToken=igv.oauth.google.access_token;return acToken||"undefined"==typeof oauth||(acToken=oauth.google.access_token),acToken}function ga4ghHeaders(){return{"Cache-Control":"no-cache"}}return igv.ga4ghGet=function(options){var url=options.url+"/"+options.entity+"/"+options.entityId;return options.headers=ga4ghHeaders(),options.oauthToken=ga4ghToken(),igv.xhr.loadJson(url,options)},igv.ga4ghSearch=function(options){return new Promise(function(fulfill,reject){function loadChunk(pageToken){pageToken?body.pageToken=pageToken:void 0!=body.pageToken&&delete body.pageToken;var sendData=JSON.stringify(body);igv.xhr.loadJson(url,{sendData:sendData,contentType:"application/json",headers:ga4ghHeaders(),oauthToken:ga4ghToken()}).then(function(json){var nextPageToken,tmp;json?(tmp=decode?decode(json):json,tmp&&tmp.forEach(function(a){results.push(a)}),nextPageToken=json.nextPageToken,nextPageToken?loadChunk(nextPageToken):fulfill(results)):fulfill(results)}).catch(function(error){reject(error)})}var results=options.results?options.results:[],url=options.url,body=options.body,decode=options.decode,apiKey=igv.oauth.google.apiKey,acToken=igv.oauth.google.access_token,paramSeparator="?",fields=options.fields;return acToken||"undefined"==typeof oauth||(apiKey=oauth.google.access_token),apiKey&&(url=url+paramSeparator+"key="+apiKey,paramSeparator="&"),fields&&(url=url+paramSeparator+"fields="+fields),loadChunk()})},igv.ga4ghSearchReadGroupSets=function(options){igv.ga4ghSearch({url:options.url+"/readgroupsets/search",body:{datasetIds:[options.datasetId],pageSize:"10000"},decode:function(json){return json.readGroupSets}}).then(function(results){options.success(results)}).catch(function(error){console.log(error)})},igv.ga4ghSearchVariantSets=function(options){igv.ga4ghSearch({url:options.url+"/variantsets/search",body:{datasetIds:[options.datasetId],pageSize:"10000"},decode:function(json){return json.variantSets}}).then(function(results){options.success(results)}).catch(function(error){console.log(error)})},igv.ga4ghSearchCallSets=function(options){options.datasetId?igv.ga4ghSearchVariantSets({url:options.url,datasetId:options.datasetId,success:function(results){var variantSetIds=[];results.forEach(function(vs){variantSetIds.push(vs.id)}),options.datasetId=void 0,options.variantSetIds=variantSetIds,igv.ga4ghSearchCallSets(options)}}):igv.ga4ghSearch({url:options.url+"/callsets/search",body:{variantSetIds:options.variantSetIds,pageSize:"10000"},decode:function(json){return json.callSets&&json.callSets.forEach(function(cs){cs.variantSetIds=options.variantSetIds}),json.callSets}}).then(function(results){options.success(results)}).catch(function(error){console.log(error)})},igv.ga4ghSearchReadAndCallSets=function(options){igv.ga4ghSearchReadGroupSets({url:options.url,datasetId:options.datasetId,success:function(readGroupSets){igv.ga4ghSearchCallSets({url:options.url,datasetId:options.datasetId,success:function(callSets){var csHash={};callSets.forEach(function(cs){csHash[cs.name]=cs});var mergedResults=[];readGroupSets.forEach(function(rg){var m={readGroupSetId:rg.id,name:rg.name,datasetId:options.datasetId},cs=csHash[rg.name];cs&&(m.callSetId=cs.id,m.variantSetIds=cs.variantSetIds),mergedResults.push(m)}),options.success(mergedResults)}})}})},igv}(igv||{}),igv=function(igv){return igv.Ga4ghVariantReader=function(config){this.config=config,this.url=config.url,this.variantSetId=config.variantSetId,this.callSetIds=config.callSetIds,this.includeCalls=void 0===config.includeCalls||config.includeCalls},igv.Ga4ghVariantReader.prototype.readHeader=function(){var self=this;if(self.header)return Promise.resolve(self.header);if(self.header={},!1===self.includeCalls)return Promise.resolve(self.header);var readURL=self.url+"/callsets/search";return igv.ga4ghSearch({url:readURL,fields:"nextPageToken,callSets(id,name)",body:{variantSetIds:Array.isArray(self.variantSetId)?self.variantSetId:[self.variantSetId],pageSize:"10000"},decode:function(json){if(self.callSetIds){var filteredCallSets=[],csIdSet=new Set;return self.callSetIds.forEach(function(csid){csIdSet.add(csid)}),json.callSets.forEach(function(cs){csIdSet.has(cs.id)&&filteredCallSets.push(cs)}),filteredCallSets}return json.callSets}}).then(function(callSets){return self.header.callSets=callSets,self.header})},igv.Ga4ghVariantReader.prototype.readFeatures=function(chr,bpStart,bpEnd){function getChrAliasTable(){return new Promise(function(fulfill,reject){self.chrAliasTable?fulfill(self.chrAliasTable):self.readMetadata().then(function(json){self.metadata=json.metadata,self.chrAliasTable={},json.referenceBounds&&igv.browser&&json.referenceBounds.forEach(function(rb){var refName=rb.referenceName,alias=igv.browser.genome.getChromosomeName(refName);self.chrAliasTable[alias]=refName}),fulfill(self.chrAliasTable)})})}var self=this;return self.readHeader().then(function(header){return getChrAliasTable()}).then(function(chrAliasTable){var queryChr=chrAliasTable.hasOwnProperty(chr)?chrAliasTable[chr]:chr,readURL=self.url+"/variants/search";return igv.ga4ghSearch({url:readURL,fields:self.includeCalls?void 0:"nextPageToken,variants(id,variantSetId,names,referenceName,start,end,referenceBases,alternateBases,quality,filter,info)",body:{variantSetIds:Array.isArray(self.variantSetId)?self.variantSetId:[self.variantSetId],callSetIds:self.callSetIds?self.callSetIds:void 0,referenceName:queryChr,start:bpStart.toString(),end:bpEnd.toString(),pageSize:"10000"},decode:function(json){var v,variants=[];return json.variants.forEach(function(json){v=igv.createGAVariant(json),v.isRefBlock()||variants.push(v)}),variants}})})},igv.Ga4ghVariantReader.prototype.readMetadata=function(){return igv.ga4ghGet({url:this.url,entity:"variantsets",entityId:this.variantSetId})},igv}(igv||{}),igv=function(igv){function getGoogleDriveFileID(link){var i1,i2;if(link.includes("/open?id=")){if(i1=link.indexOf("/open?id=")+9,i2=link.indexOf("&"),i1>0&&i2>i1)return link.substring(i1,i2);if(i1>0)return link.substring(i1)}else if(link.includes("/file/d/"))return i1=link.indexOf("/file/d/")+8,i2=link.lastIndexOf("/"),link.substring(i1,i2)}return igv.Google={isGoogleURL:function(url){return url.includes("googleapis")},translateGoogleCloudURL:function(gsUrl){var i,bucket,object,qIdx,objectString,paramString;return i=gsUrl.indexOf("/",5),qIdx=gsUrl.indexOf("?"),i<0?(console.log("Invalid gs url: "+gsUrl),gsUrl):(bucket=gsUrl.substring(5,i),objectString=qIdx<0?gsUrl.substring(i+1):gsUrl.substring(i+1,qIdx),object=encodeURIComponent(objectString),qIdx>0&&(paramString=gsUrl.substring(qIdx)),"https://www.googleapis.com/storage/v1/b/"+bucket+"/o/"+object+(paramString?paramString+"&alt=media":"?alt=media"))},addGoogleHeaders:function(headers){headers["Cache-Control"]="no-cache";var acToken=igv.oauth.google.access_token;return acToken||"undefined"==typeof oauth||(acToken=oauth.google.access_token),acToken&&!headers.hasOwnProperty("Authorization")&&(headers.Authorization="Bearer "+acToken),headers},addApiKey:function(url){var apiKey=igv.oauth.google.apiKey,paramSeparator=url.includes("?")?"&":"?";return void 0===apiKey||url.includes("key=")||apiKey&&(url=url+paramSeparator+"key="+apiKey),url},driveDownloadURL:function(link){var id,id=getGoogleDriveFileID(link);return id?"https://www.googleapis.com/drive/v3/files/"+id+"?alt=media":link},getDriveFileInfo:function(googleDriveURL){var id=getGoogleDriveFileID(googleDriveURL),endPoint="https://www.googleapis.com/drive/v2/files/"+id;return igv.xhr.loadJson(endPoint,igv.buildOptions({}))}},igv}(igv||{}),igv=function(igv){function loadCytobands(cytobandUrl,config){function getCytobands(data){for(var lastChr,bands=[],n=0,c=1,lines=data.splitLines(),len=lines.length,cytobands={},i=0;i<len;i++){var tokens=lines[i].split("\t"),chr=tokens[0];if(lastChr||(lastChr=chr),chr!=lastChr&&(cytobands[lastChr]=bands,bands=[],lastChr=chr,n=0,c++),5==tokens.length){var chr=tokens[0],start=parseInt(tokens[1]),end=parseInt(tokens[2]),name=tokens[3],stain=tokens[4];bands[n++]=new igv.Cytoband(start,end,name,stain)}}return cytobands}function decodeDataUri(dataUri){var bytes,split=dataUri.split(","),info=split[0].split(":")[1],dataString=split[1];dataString=info.indexOf("base64")>=0?atob(dataString):decodeURI(dataString),bytes=new Uint8Array(dataString.length);for(var i=0;i<dataString.length;i++)bytes[i]=dataString.charCodeAt(i);var inflate=new Zlib.Gunzip(bytes),plain=inflate.decompress();return String.fromCharCode.apply(null,plain)}if(cytobandUrl.startsWith("data:")){var data=decodeDataUri(cytobandUrl);return Promise.resolve(getCytobands(data))}return igv.xhr.loadString(cytobandUrl,igv.buildOptions(config)).then(function(data){return getCytobands(data)})}function loadAliases(aliasURL,config){return igv.xhr.loadString(aliasURL,igv.buildOptions(config)).then(function(data){var lines=data.splitLines(),aliases=[];return lines.forEach(function(line){!line.startsWith("#")&line.length>0&&aliases.push(line.split("\t"))}),aliases})}function constructWG(genome){var l,lengths,mean,threshold;genome.wgChromosomeNames=[],genome.ideograms?genome.chromosomeNames.forEach(function(chrName){var ideo=genome.ideograms[chrName];ideo&&ideo.length>0&&genome.wgChromosomeNames.push(chrName)}):(lengths=Object.keys(genome.chromosomes).map(function(key){return genome.chromosomes[key].bpLength}),mean=igv.Math.mean(lengths),threshold=mean/50,genome.wgChromosomeNames=genome.chromosomeNames.filter(function(key){return genome.chromosomes[key].bpLength>threshold})),l=0,genome.wgChromosomeNames.forEach(function(key){l+=genome.chromosomes[key].bpLength}),genome.chromosomes.all={name:"all",bpLength:l}}return igv.genomeIdLUT=function(string){return{dm3:"dm3",mm10:"mm10",hg19:"hg19",hg38:"GRCh38"}[string]},igv.loadGenome=function(reference){var cytobands,chrNames,sequence,cytobandUrl=reference.cytobandURL,aliasURL=reference.aliasURL,chromosomes={};return sequence=new igv.FastaSequence(reference),sequence.init().then(function(){chrNames=sequence.chromosomeNames,chromosomes=sequence.chromosomes}).then(function(ignore){return cytobandUrl?loadCytobands(cytobandUrl,sequence.config):void 0}).then(function(c){return cytobands=c,aliasURL?loadAliases(aliasURL,sequence.config):void 0}).then(function(aliases){return new igv.Genome(reference.id,sequence,cytobands,aliases)})},igv.Genome=function(id,sequence,ideograms,aliases){this.id=id,this.sequence=sequence,this.chromosomeNames=sequence.chromosomeNames,this.chromosomes=sequence.chromosomes,this.ideograms=ideograms,constructWG(this);var chrAliasTable={},self=this;this.chromosomeNames.forEach(function(name){var alias=name.startsWith("chr")?name.substring(3):"chr"+name;chrAliasTable[alias]=name,"chrM"===name&&(chrAliasTable.MT="chrM"),"MT"===name&&(chrAliasTable.chrM="MT")}),aliases&&aliases.forEach(function(array){var defName,i;for(i=0;i<array.length;i++)if(self.chromosomes[array[i]]){defName=array[i];break}defName&&array.forEach(function(alias){alias!==defName&&(chrAliasTable[alias.toLowerCase()]=defName,chrAliasTable[alias]=defName)})}),Object.keys(chrAliasTable).forEach(function(key){chrAliasTable[key.toLowerCase()]=chrAliasTable[key]}),this.chrAliasTable=chrAliasTable},igv.Genome.prototype.getChromosomeName=function(str){var chr=this.chrAliasTable[str.toLowerCase()];return chr||str},igv.Genome.prototype.getChromosome=function(chr){return chr=this.getChromosomeName(chr),this.chromosomes[chr]},igv.Genome.prototype.getCytobands=function(chr){return this.ideograms?this.ideograms[chr]:null},igv.Genome.prototype.getLongestChromosome=function(){var longestChr,key,chromosomes=this.chromosomes;for(key in chromosomes){if(chromosomes.hasOwnProperty(key)){var chr=chromosomes[key];(void 0===longestChr||chr.bpLength>longestChr.bpLength)&&(longestChr=chr)}return longestChr}},igv.Genome.prototype.getChromosomes=function(){return this.chromosomes},igv.Genome.prototype.getGenomeCoordinate=function(chr,bp){var offset=this.getCumulativeOffset(chr);if(void 0!==offset)return offset+bp},igv.Genome.prototype.getChromosomeCoordinate=function(genomeCoordinate){var lastChr,lastCoord,i,name,cumulativeOffset,self=this;for(void 0===this.cumulativeOffsets&&computeCumulativeOffsets.call(this),i=0;i<this.wgChromosomeNames.length;i++){if(name=this.wgChromosomeNames[i],(cumulativeOffset=self.cumulativeOffsets[name])>genomeCoordinate){return{chr:lastChr,position:genomeCoordinate-lastCoord}}lastChr=name,lastCoord=cumulativeOffset}return{chr:_.last(this.chromosomeNames),position:0}},igv.Genome.prototype.getCumulativeOffset=function(chr){function computeCumulativeOffsets(){var cumulativeOffsets={},offset=0;self.wgChromosomeNames.forEach(function(name){cumulativeOffsets[name]=Math.floor(offset);var chromosome=self.getChromosome(name);offset+=chromosome.bpLength}),self.cumulativeOffsets=cumulativeOffsets}var self=this,queryChr=this.getChromosomeName(chr);return void 0===this.cumulativeOffsets&&computeCumulativeOffsets.call(this),this.cumulativeOffsets[queryChr]},igv.Genome.prototype.getGenomeLength=function(){var lastChr;return lastChr=_.last(this.wgChromosomeNames),this.getCumulativeOffset(lastChr)+this.getChromosome(lastChr).bpLength},igv.Chromosome=function(name,order,bpLength){this.name=name,this.order=order,this.bpLength=bpLength},igv.Cytoband=function(start,end,name,typestain){this.start=start,this.end=end,this.name=name,this.stain=0,"acen"==typestain?this.type="c":(this.type=typestain.charAt(1),"p"==this.type&&(this.stain=parseInt(typestain.substring(4))))},igv.GenomicInterval=function(chr,start,end,features){this.chr=chr,this.start=start,this.end=end,this.features=features},igv.GenomicInterval.prototype.contains=function(chr,start,end){return this.chr==chr&&this.start<=start&&this.end>=end},igv.GenomicInterval.prototype.containsRange=function(range){return this.chr===range.chr&&this.start<=range.start&&this.end>=range.end},igv.Genome.getKnownGenomes=function(){return igv.Genome.KnownGenomes?Promise.resolve(igv.Genome.KnownGenomes):igv.xhr.loadJson("https://s3.amazonaws.com/igv.org.genomes/genomes.json",{}).then(function(jsonArray){var table={};return jsonArray.forEach(function(json){table[json.id]=json}),igv.Genome.KnownGenomes=table,table})},igv}(igv||{}),igv=function(igv){return igv.EqtlTrack=function(config){var url=config.url,label=config.name;this.config=config,this.url=url,this.name=label,this.pValueField=config.pValueField||"pValue",this.geneField=config.geneField||"geneSymbol",this.snpField=config.snpField||"snp",this.autoscale=void 0===config.autoScale||config.autoScale,this.percentile=void 0===config.percentile?98:config.percentile,this.minLogP=config.minLogP||3.5,this.maxLogP=config.maxLogP||25,this.background=config.background,this.divider=config.divider||"rgb(225,225,225)",this.dotSize=config.dotSize||2,this.height=config.height||100,this.autoHeight=!1,this.disableButtons=config.disableButtons,this.visibilityWindow=config.visibilityWindow,this.featureSource=new igv.FeatureSource(config)},igv.EqtlTrack.prototype.paintAxis=function(ctx,pixelWidth,pixelHeight){var track=this,yScale=(track.maxLogP-track.minLogP)/pixelHeight,font={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"});for(var n=Math.ceil(10*(this.maxLogP-this.minLogP)/pixelHeight),p=4;p<=track.maxLogP;p+=n){var x1,x2,y1,y2,ref;ref=.85*pixelWidth,x1=ref-5,x2=ref,y1=y2=pixelHeight-Math.round((p-track.minLogP)/yScale),igv.graphics.strokeLine(ctx,x1,y1,x2,y2,font),y1>8&&igv.graphics.fillText(ctx,p,x1-1,y1+2,font)}font.textAlign="center",igv.graphics.fillText(ctx,"-log10(pvalue)",pixelWidth/4,pixelHeight/2,font,{rotate:{angle:-90}})},igv.EqtlTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){return this.featureSource.getFeatures(chr,bpStart,bpEnd)},igv.EqtlTrack.prototype.draw=function(options){function autoscale(featureList,start,end){var values=featureList.filter(function(eqtl){return eqtl.position>=start&&eqtl.position<=end}).map(function(eqtl){return-Math.log(eqtl[self.pValueField])/Math.LN10});return igv.Math.percentile(values,self.percentile)}function drawEqtls(drawSelected){var eqtl,i,px,py,color,isSelected,snp,geneName,capped,radius=drawSelected?2*self.dotSize:self.dotSize;for(i=0;i<len;i++)if(eqtl=featureList[i],!((px=Math.round(eqtl.position-bpStart+.5)/bpPerPixel)<0)){if(px>pixelWidth)break;if(snp=eqtl.snp.toUpperCase(),geneName=eqtl[self.geneField].toUpperCase(),isSelected=selection&&(selection.snp===snp||selection.gene===geneName),!drawSelected||isSelected){selection&&selection.snp===snp&&selection.addGene(geneName);var mLogP=-Math.log(eqtl[self.pValueField])/Math.LN10;mLogP>=self.minLogP&&(mLogP>self.maxLogP?(mLogP=self.maxLogP,capped=!0):capped=!1,py=Math.max(0+radius,pixelHeight-Math.round((mLogP-self.minLogP)/yScale)),eqtl.px=px,eqtl.py=py,drawSelected&&selection?(color=selection.colorForGene(geneName),igv.graphics.setProperties(ctx,{fillStyle:color,strokeStyle:"black"})):(color=capped?"rgb(150, 150, 150)":"rgb(180, 180, 180)",igv.graphics.setProperties(ctx,{fillStyle:color,strokeStyle:color})),igv.graphics.fillCircle(ctx,px,py,radius),igv.graphics.strokeCircle(ctx,px,py,radius))}}}var self=this,featureList=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight,bpEnd=bpStart+pixelWidth*bpPerPixel+1,yScale=(self.maxLogP-self.minLogP)/pixelHeight,selection=options.genomicState.selection;if(this.background&&igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:this.background}),igv.graphics.strokeLine(ctx,0,pixelHeight-1,pixelWidth,pixelHeight-1,{strokeStyle:this.divider}),ctx){var len=featureList.length;ctx.save(),self.maxLogP=autoscale(featureList,bpStart,bpEnd),drawEqtls(!1),drawEqtls(!0),ctx.restore()}},igv.EqtlTrack.prototype.popupData=function(config){var genomicLocation=config.genomicLocation,yOffset=(config.x,config.y),referenceFrame=config.viewport.genomicState.referenceFrame;if(this.featureSource.featureCache){var chr=referenceFrame.chrName,tolerance=2*this.dotSize*referenceFrame.bpPerPixel,featureList=this.featureSource.featureCache.queryFeatures(chr,genomicLocation-tolerance,genomicLocation+tolerance),dotSize=this.dotSize,tissue=this.name;if(featureList&&featureList.length>0){var popupData=[];return featureList.forEach(function(feature){feature.end>=genomicLocation-tolerance&&feature.start<=genomicLocation+tolerance&&feature.py-yOffset<2*dotSize&&(popupData.length>0&&popupData.push("<hr>"),popupData.push({name:"snp id",value:feature.snp},{name:"gene id",value:feature.geneId},{name:"gene name",value:feature.geneName},{name:"p value",value:feature.pValue},{name:"tissue",value:tissue}))}),popupData}}},igv}(igv||{}),igv=function(igv){igv.GtexSelection=function(gene,snp){this.geneColors={},this.gene=null,this.snp=null,this.genesCount=0,gene&&(this.gene=gene.toUpperCase(),this.geneColors[this.gene]=brewer[this.genesCount++]),snp&&(this.snp=snp.toUpperCase())},igv.GtexSelection.prototype.addGene=function(geneName){this.geneColors[geneName.toUpperCase()]||(this.geneColors[geneName.toUpperCase()]=brewer[this.genesCount++])},igv.GtexSelection.prototype.colorForGene=function(geneName){return this.geneColors[geneName.toUpperCase()]};var brewer=new Array;return brewer.push("rgb(228,26,28)"),brewer.push("rgb(55,126,184)"),brewer.push("rgb(77,175,74)"),brewer.push("rgb(166,86,40)"),brewer.push("rgb(152,78,163)"),brewer.push("rgb(255,127,0)"),brewer.push("rgb(247,129,191)"),brewer.push("rgb(153,153,153)"),brewer.push("rgb(255,255,51)"),brewer.push("rgb(102, 194, 165"),brewer.push("rgb(252, 141, 98"),brewer.push("rgb(141, 160, 203"),brewer.push("rgb(231, 138, 195"),brewer.push("rgb(166, 216, 84"),brewer.push("rgb(255, 217, 47"),brewer.push("rgb(229, 196, 148"),brewer.push("rgb(179, 179, 179"),brewer.push("rgb( 141, 211, 199"),brewer.push("rgb(255, 255, 179"),brewer.push("rgb(190, 186, 218"),brewer.push("rgb(251, 128, 114"),brewer.push("rgb(128, 177, 211"),brewer.push("rgb(253, 180, 98"),brewer.push("rgb(179, 222, 105"),brewer.push("rgb(252, 205, 229"),brewer.push("rgb(217, 217, 217"),brewer.push("rgb(188, 128, 189"),brewer.push("rgb(204, 235, 197"),brewer.push("rgb(255, 237, 111"),igv}(igv||{}),igv=function(igv){igv.GtexFileReader=function(config){this.config=config,this.file=config.url,this.codec=this.file.endsWith(".bin")?createEqtlBinary:createEQTL,this.cache={},this.binary=this.file.endsWith(".bin"),this.compressed=this.file.endsWith(".compressed.bin")},igv.GtexFileReader.prototype.readFeatures=function(chr,bpStart,bpEnd){var self=this;return new Promise(function(fulfill,reject){function loadWithIndex(index,chr,fulfill){var chrIdx=index[chr];if(chrIdx){var blocks=chrIdx.blocks,lastBlock=blocks[blocks.length-1],endPos=lastBlock.startPos+lastBlock.size,len=endPos-blocks[0].startPos,range={start:blocks[0].startPos,size:len};igv.xhr.loadArrayBuffer(file,{range:range,withCredentials:self.config.withCredentials}).then(function(arrayBuffer){if(arrayBuffer){var data=new DataView(arrayBuffer),parser=new igv.BinaryParser(data),featureList=[];for(parser.offset;parser.hasNext();){var feature=createEqtlBinary(parser);featureList.push(feature)}fulfill(featureList)}else fulfill(null)}).catch(reject)}else fulfill([]);var createEqtlBinary=function(parser){return new Eqtl(parser.getString(),parser.getString(),parser.getInt(),parser.getString(),parser.getString(),parser.getFloat())}}function loadIndex(url,fulfill){var genome=igv.browser?igv.browser.genome:null;igv.xhr.loadArrayBuffer(url,{range:{start:0,size:200},withCredentials:self.config.withCredentials}).then(function(arrayBuffer){var data=new DataView(arrayBuffer),parser=new igv.BinaryParser(data),indexPosition=(parser.getInt(),parser.getInt(),parser.getLong()),indexSize=parser.getInt();igv.xhr.loadArrayBuffer(url,{range:{start:indexPosition,size:indexSize},withCredentials:self.config.withCredentials}).then(function(arrayBuffer2){for(var data2=new DataView(arrayBuffer2),index=null,parser=new igv.BinaryParser(data2),index={},nChrs=parser.getInt();nChrs-- >0;){var chr=parser.getString();genome&&(chr=genome.getChromosomeName(chr));var position=parser.getLong(),size=parser.getInt(),blocks=new Array;blocks.push(new Block(position,size)),index[chr]=new ChrIdx(chr,blocks)}fulfill(index)})})}function Eqtl(snp,chr,position,geneId,geneName,pValue){this.snp=snp,this.chr=chr,this.position=position,this.start=position,this.end=position+1,this.geneId=geneId,this.geneName=geneName,this.pValue=pValue}var file=self.file,index=self.index;index?loadWithIndex(index,chr,fulfill):loadIndex(self.file,function(index){self.index=index,loadWithIndex(index,chr,fulfill)}),Eqtl.prototype.description=function(){return"<b>snp</b>:&nbsp"+this.snp+"<br/><b>location</b>:&nbsp"+this.chr+":"+formatNumber(this.position+1)+"<br/><b>gene</b>:&nbsp"+this.geneName+"<br/><b>pValue</b>:&nbsp"+this.pValue+"<br/><b>mLogP</b>:&nbsp"+this.mLogP},Block=function(startPos,size){this.startPos=startPos,this.size=size},ChrIdx=function(chr,blocks){this.chr=chr,this.blocks=blocks}})};var createEQTL=function(tokens){var snp=tokens[0],chr=tokens[1],position=parseInt(tokens[2])-1,geneId=tokens[3],geneName=tokens[4],genePosition=tokens[5],fStat=parseFloat(tokens[6]),pValue=parseFloat(tokens[7]);return new Eqtl(snp,chr,position,geneId,geneName,genePosition,fStat,pValue)},createEqtlBinary=function(parser){var snp=parser.getString(),chr=parser.getString(),position=parser.getInt(),geneId=parser.getString(),geneName=parser.getString(),pValue=parser.getFloat();return new Eqtl(snp,chr,position,geneId,geneName,pValue)};return igv}(igv||{}),igv=function(igv){return igv.GtexReader=function(config){this.config=config,this.url=config.url,this.tissueName=config.tissueName,this.indexed=!0},igv.GtexReader.prototype.readFeatures=function(chr,bpStart,bpEnd){var self=this,queryChr=chr.startsWith("chr")?chr.substr(3):chr,queryStart=Math.floor(bpStart),queryEnd=Math.ceil(bpEnd),queryURL=this.url+"?chromosome="+queryChr+"&start="+queryStart+"&end="+queryEnd+"&tissueName="+this.tissueName;return new Promise(function(fulfill,reject){igv.xhr.loadJson(queryURL,{withCredentials:self.config.withCredentials}).then(function(json){json&&json.singleTissueEqtl?(json.singleTissueEqtl.forEach(function(eqtl){eqtl.chr="chr"+eqtl.chromosome,eqtl.position=eqtl.start,eqtl.start=eqtl.start-1,eqtl.snp=eqtl.snpId,eqtl.geneName=eqtl.geneSymbol,eqtl.geneId=eqtl.gencodeId,eqtl.end=eqtl.start}),fulfill(json.singleTissueEqtl)):fulfill(null)}).catch(reject)})},igv}(igv||{}),igv=function(igv){return igv.ImmVarReader=function(config){this.config=config,this.url=config.url,this.cellConditionId=config.cellConditionId,this.valueThreshold=config.valueThreshold?config.valueThreshold:.05},igv.ImmVarReader.prototype.readFeatures=function(queryChr,queryStart,queryEnd){var self=this,queryURL=this.url+"?chromosome="+queryChr+"&start="+queryStart+"&end="+queryEnd+"&cell_condition_id="+this.cellConditionId;return new Promise(function(fulfill,reject){igv.xhr.loadJson(queryURL,{withCredentials:self.config.withCredentials}).then(function(json){json?(json.eqtls.forEach(function(eqtl){eqtl.chr=eqtl.chromosome,eqtl.start=eqtl.position,eqtl.end=eqtl.position+1}),fulfill(json.eqtls)):fulfill(null)}).catch(function(error){reject(error)})})},igv}(igv||{}),igv=function(igv){const DEFAULT_POPOVER_WINDOW=1e8;return igv.GWASTrack=function(config){this.config=config,this.url=config.url,this.name=config.name,this.trait=config.trait,this.height=config.height||100,this.minLogP=config.minLogP||0,this.maxLogP=config.maxLogP||15,this.background=config.background,this.divider=config.divider||"rgb(225,225,225)",this.dotSize=config.dotSize||4,this.popoverWindow=void 0===config.popoverWindow?DEFAULT_POPOVER_WINDOW:config.popoverWindow,this.description=config.description,this.proxy=config.proxy,this.portalURL=config.portalURL?config.portalURL:window.location.origin,this.variantURL=config.variantURL||"http://www.type2diabetesgenetics.org/variant/variantInfo/",this.traitURL=config.traitURL||"http://www.type2diabetesgenetics.org/trait/traitInfo/";var cs=config.colorScale||{thresholds:[5e-8,5e-4,.5],colors:["rgb(255,50,50)","rgb(251,100,100)","rgb(251,170,170)","rgb(227,238,249)"]};this.pvalue=config.pvalue?config.pvalue:"PVALUE",this.colorScale=new igv.BinnedColorScale(cs),config.format&&"gtexGWAS"===config.format?this.featureSource=new igv.FeatureSource(config):this.featureSource=new igv.T2DVariantSource(config)},igv.GWASTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){return this.featureSource.getFeatures(chr,bpStart,bpEnd)},igv.GWASTrack.prototype.draw=function(options){var track=this,featureList=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight,bpEnd=bpStart+pixelWidth*bpPerPixel+1,yScale=(track.maxLogP-track.minLogP)/pixelHeight,enablePopover=bpEnd-bpStart<DEFAULT_POPOVER_WINDOW;this.po=enablePopover?[]:void 0,this.background&&igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:this.background}),igv.graphics.strokeLine(ctx,0,pixelHeight-1,pixelWidth,pixelHeight-1,{strokeStyle:this.divider});var variant,pos,len,xScale,px,py,color,pvalue,val;if(featureList){len=featureList.length;for(var i=0;i<len;i++)if(variant=featureList[i],!((pos=variant.start)<bpStart)){if(pos>bpEnd)break;pvalue=variant.pvalue||variant[track.pvalue],pvalue&&(color=track.colorScale.getColor(pvalue),val=-Math.log(pvalue)/2.302585092994046,xScale=bpPerPixel,px=Math.round((pos-bpStart)/xScale),py=Math.max(track.dotSize,pixelHeight-Math.round((val-track.minLogP)/yScale)),color&&igv.graphics.setProperties(ctx,{fillStyle:color,strokeStyle:"black"}),igv.graphics.fillCircle(ctx,px,py,track.dotSize),enablePopover&&track.po.push({x:px,y:py,feature:variant}))}}},igv.GWASTrack.prototype.paintAxis=function(ctx,pixelWidth,pixelHeight){var track=this,yScale=(track.maxLogP-track.minLogP)/pixelHeight,font={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"});for(var p=2;p<track.maxLogP;p+=2){var yp=pixelHeight-Math.round((p-track.minLogP)/yScale);igv.graphics.strokeLine(ctx,45,yp-2,50,yp-2,font),igv.graphics.fillText(ctx,p,44,yp+2,font)}font.textAlign="center",igv.graphics.fillText(ctx,"-log10(pvalue)",pixelWidth/2,pixelHeight/2,font,{rotate:{angle:-90}})},igv.GWASTrack.prototype.popupData=function(config){var i,len,p,dbSnp,url,chr,pos,pvalue,xOffset=(config.genomicLocation,config.x),yOffset=config.y,data=(config.viewport.genomicState.referenceFrame,[]);if(this.po)for(i=0,len=this.po.length;i<len;i++)p=this.po[i],Math.abs(xOffset-p.x)<this.dotSize&&Math.abs(yOffset-p.y)<=this.dotSize&&(chr=p.feature.CHROM||p.feature.chr,pos=p.feature.POS||p.feature.start,pvalue=p.feature[this.pvalue]||p.feature.pvalue,dbSnp=p.feature.DBSNP_ID,dbSnp&&(url=this.variantURL.startsWith("http")?this.variantURL:this.portalURL+"/"+this.variantURL,data.push("<a target='_blank' href='"+url+(url.endsWith("/")?"":"/")+dbSnp+"' >"+dbSnp+"</a>")),data.push(chr+":"+pos.toString()),data.push({name:"p-value",value:pvalue}),p.feature.ZSCORE&&data.push({name:"z-score",value:p.feature.ZSCORE}),dbSnp&&(url=this.traitURL.startsWith("http")?this.traitURL:this.portalURL+"/"+this.traitURL,data.push("<a target='_blank' href='"+url+(url.endsWith("/")?"":"/")+dbSnp+"'>see all available statistics for this variant</a>")),i<len-1&&data.push("<p/>"));else data.push("Popover not available at this resolution.");return data},igv}(igv||{}),igv=function(igv){function jsonToVariantsV2(json,config){var variants=[];return json.variants.forEach(function(record){var variant={};record.forEach(function(object){for(var property in object)object.hasOwnProperty(property)&&("POS"===property&&(variant.start=object[property]-1),variant[property]=object[property])}),variant.pvalue=variant[config.pvalue][config.dataset][config.trait],variant[config.pvalue]=void 0,variants.push(variant)}),variants}function queryJsonV2(queryChr,queryStart,queryEnd,config){var phenotype=config.trait,pvalue=config.pvalue,dataset=config.dataset,properties={cproperty:["VAR_ID","DBSNP_ID","CHROM","POS"],orderBy:["CHROM"],dproperty:{},pproperty:JSON.parse('{"'+pvalue+'": {"'+dataset+'": ["'+phenotype+'"]}}')},filters=[{dataset_id:"x",phenotype:"x",operand:"CHROM",operator:"EQ",value:queryChr,operand_type:"STRING"},{dataset_id:"x",phenotype:"x",operand:"POS",operator:"GTE",value:queryStart,operand_type:"INTEGER"},{dataset_id:"x",phenotype:"x",operand:"POS",operator:"LTE",value:queryEnd,operand_type:"INTEGER"},{dataset_id:dataset,phenotype:phenotype,operand:pvalue,operator:"LT",value:config.valueThreshold,operand_type:"FLOAT"}],data={passback:"x",entity:"variant",properties:properties,filters:filters};return JSON.stringify(data)}function queryJsonV1(queryChr,queryStart,queryEnd,config){var type=config.url.includes("variant")?VARIANT:TRAIT,pvalue=config.pvalue?config.pvalue:"PVALUE",filters=[{operand:"CHROM",operator:"EQ",value:queryChr,filter_type:"STRING"},{operand:"POS",operator:"GT",value:queryStart,filter_type:"FLOAT"},{operand:"POS",operator:"LT",value:queryEnd,filter_type:"FLOAT"},{operand:pvalue,operator:"LTE",value:config.valueThreshold,filter_type:"FLOAT"}],columns=type===TRAIT?["CHROM","POS","DBSNP_ID","PVALUE","ZSCORE"]:["CHROM","POS",pvalue,"DBSNP_ID"],data={user_group:"ui",filters:filters,columns:columns};return type===TRAIT&&(data.trait=config.trait),config.proxy?"url="+config.url+"&data="+JSON.stringify(data):JSON.stringify(data)}function jsonToVariantsV1(json,config){return json.variants.forEach(function(variant){variant.chr=variant.CHROM,variant.start=variant.POS-1}),json.variants}const VARIANT="VARIANT",TRAIT="TRAIT";igv.T2DVariantSource=function(config){this.config=config,this.url=config.url,this.trait=config.trait,this.dataset=config.dataset,this.pvalue=config.pvalue,void 0===config.valueThreshold&&(config.valueThreshold=.05),void 0===config.dataset?(this.queryJson=config.queryJson||queryJsonV1,this.jsonToVariants=config.jsonToVariants||jsonToVariantsV1):(this.queryJson=config.queryJson||queryJsonV2,this.jsonToVariants=config.jsonToVariants||jsonToVariantsV2)},igv.T2DVariantSource.prototype.getFeatures=function(chr,bpStart,bpEnd){var self=this;return new Promise(function(fulfill,reject){if(self.cache&&self.cache.chr===chr&&self.cache.end>bpEnd&&self.cache.start<bpStart)fulfill(self.cache.featuresBetween(bpStart,bpEnd));else{var window=Math.max(bpEnd-bpStart,1e7)/2,center=(bpEnd+bpStart)/2,queryChr=chr.startsWith("chr")?chr.substring(3):chr,queryStart=Math.max(0,center-window),queryEnd=center+window,queryURL=self.config.proxy?self.config.proxy:self.url,body=self.queryJson(queryChr,queryStart,queryEnd,self.config);igv.xhr.loadJson(queryURL,{sendData:body,withCredentials:self.config.withCredentials}).then(function(json){var variants;json?json.error_code?(igv.presentAlert("Error querying trait "+self.trait+" (error_code="+json.error_code+")",void 0),fulfill(null)):(variants=self.jsonToVariants(json,self.config),variants.sort(function(a,b){return a.POS-b.POS}),self.cache=new FeatureCache(chr,queryStart,queryEnd,variants),fulfill(variants)):fulfill(null)}).catch(reject)}})};var FeatureCache=function(chr,start,end,features){var i,bin,lastBin;for(this.chr=chr,this.start=start,this.end=end,this.binSize=(end-start)/100,this.binIndeces=[0],this.features=features,lastBin=0,i=0;i<features.length;i++)(bin=Math.max(0,Math.floor((features[i].POS-this.start)/this.binSize)))>lastBin&&(this.binIndeces.push(i),lastBin=bin)};return FeatureCache.prototype.featuresBetween=function(start,end){var startBin=Math.max(0,Math.min(Math.floor((start-this.start)/this.binSize)-1,this.binIndeces.length-1)),endBin=Math.max(0,Math.min(Math.floor((end-this.start)/this.binSize),this.binIndeces.length-1));this.binIndeces[startBin],this.binIndeces[endBin];return this.features},igv}(igv||{}),igv=function(igv){function getSites(chrName){var self=this;return new Promise(function(fulfill,reject){var sites=self.fragmentSitesCache[chrName];if(sites)fulfill(sites);else if(self.fragmentSitesIndex){var entry=self.fragmentSitesIndex[chrName];void 0!==entry&&entry.nSites>0&&readSites(entry.position,entry.nSites).then(function(sites){self.fragmentSitesCache[chrName]=sites,fulfill(sites)}).catch(reject)}else fulfill(void 0)})}function parseMatixZoomData(chr1,chr2,chr1Sites,chr2Sites,dis){var unit=dis.getString();dis.getInt();for(var sumCounts=dis.getFloat(),binSize=(dis.getFloat(),dis.getFloat(),dis.getFloat(),dis.getInt()),zoom={unit:unit,binSize:binSize},blockBinCount=dis.getInt(),blockColumnCount=dis.getInt(),zd=new MatrixZoomData(chr1,chr2,zoom,blockBinCount,blockColumnCount,chr1Sites,chr2Sites),nBlocks=dis.getInt(),blockIndex={};nBlocks-- >0;){var blockNumber=dis.getInt(),filePosition=dis.getLong(),blockSizeInBytes=dis.getInt();blockIndex[blockNumber]={filePosition:filePosition,size:blockSizeInBytes}}zd.blockIndexMap=blockIndex;var nBins1=chr1.size/binSize,nBins2=chr2.size/binSize,avgCount=sumCounts/nBins1/nBins2;return zd.averageCount=avgCount,zd}function ExpectedValueFunction(normType,unit,binSize,values,normFactors){this.normType=normType,this.unit=unit,this.binSize=binSize,this.values=values,this.normFactors=normFactors}function NormalizationVector(type,chrIdx,unit,binSize,data){this.type=type,this.chrIdx=chrIdx,this.unit=unit,this.binSize=binSize,this.data=data}function MatrixZoomData(chr1,chr2,zoom,blockBinCount,blockColumnCount,chr1Sites,chr2Sites){this.chr1=chr1,this.chr2=chr2,this.zoom=zoom,this.blockBinCount=blockBinCount,this.blockColumnCount=blockColumnCount,this.chr1Sites=chr1Sites,this.chr2Sites=chr2Sites}function Matrix(chr1,chr2,zoomDataList){var self=this;this.chr1=chr1,this.chr2=chr2,this.bpZoomData=[],this.fragZoomData=[],_.each(zoomDataList,function(zd){"BP"===zd.zoom.unit?self.bpZoomData.push(zd):self.fragZoomData.push(zd)})}return igv.HiCReader=function(config){this.path=config.url,this.headPath=config.headURL||this.path,this.config=config,this.fragmentSitesCache={}},igv.HiCReader.prototype.readHeader=function(){var self=this;return new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:0,size:64e3}})).then(function(data){if(!data)return void fulfill(null);var binaryParser=new igv.BinaryParser(new DataView(data));self.magic=binaryParser.getString(),self.version=binaryParser.getInt(),self.masterIndexPos=binaryParser.getLong(),self.genomeId=binaryParser.getString(),self.attributes={};for(var nAttributes=binaryParser.getInt();nAttributes-- >0;)self.attributes[binaryParser.getString()]=binaryParser.getString();self.chromosomes=[];for(var nChrs=binaryParser.getInt();nChrs-- >0;)self.chromosomes.push({name:binaryParser.getString(),size:binaryParser.getInt()});self.bpResolutions=[];for(var nBpResolutions=binaryParser.getInt();nBpResolutions-- >0;)self.bpResolutions.push(binaryParser.getInt());self.fragResolutions=[];for(var nFragResolutions=binaryParser.getInt();nFragResolutions-- >0;)self.fragResolutions.push(binaryParser.getInt());if(nFragResolutions>0){self.sites=[];for(var nSites=binaryParser.getInt();nSites-- >0;)self.sites.push(binaryParser.getInt())}fulfill(self)}).catch(function(error){reject(error)})})},igv.HiCReader.prototype.readFooter=function(key){var self=this,range={start:this.masterIndexPos,size:1e8};return new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:range})).then(function(data){var key,pos,size;if(!data)return void fulfill(null);var binaryParser=new igv.BinaryParser(new DataView(data));binaryParser.getInt(),self.masterIndex={};for(var nEntries=binaryParser.getInt();nEntries-- >0;)key=binaryParser.getString(),pos=binaryParser.getLong(),size=binaryParser.getInt(),self.masterIndex[key]={start:pos,size:size};for(self.expectedValueVectors={},nEntries=binaryParser.getInt();nEntries-- >0;){for(var type="NONE",unit=binaryParser.getString(),binSize=binaryParser.getInt(),nValues=binaryParser.getInt(),values=[];nValues-- >0;)values.push(binaryParser.getDouble());for(var nChrScaleFactors=binaryParser.getInt(),normFactors={};nChrScaleFactors-- >0;)normFactors[binaryParser.getInt()]=binaryParser.getDouble();var key=unit+"_"+binSize+"_"+type;self.expectedValueVectors[key]=new ExpectedValueFunction(type,unit,binSize,values,normFactors)}if(self.version>=6){for(self.normalizedExpectedValueVectors={},nEntries=binaryParser.getInt();nEntries-- >0;){for(var type=binaryParser.getString(),unit=binaryParser.getString(),binSize=binaryParser.getInt(),nValues=binaryParser.getInt(),values=[];nValues-- >0;)values.push(binaryParser.getDouble());for(var nChrScaleFactors=binaryParser.getInt(),normFactors={};nChrScaleFactors-- >0;)normFactors[binaryParser.getInt()]=binaryParser.getDouble();var key=unit+"_"+binSize+"_"+type;self.normalizedExpectedValueVectors[key]=new ExpectedValueFunction(type,unit,binSize,values,normFactors)}for(self.normVectorIndex={},self.normalizationTypes=[],nEntries=binaryParser.getInt();nEntries-- >0;){type=binaryParser.getString();var chrIdx=binaryParser.getInt();unit=binaryParser.getString(),binSize=binaryParser.getInt();var filePosition=binaryParser.getLong(),sizeInBytes=binaryParser.getInt();key=NormalizationVector.getKey(type,chrIdx,unit.binSize),!1===_.contains(self.normalizationTypes,type)&&self.normalizationTypes.push(type),self.normVectorIndex[key]={filePosition:filePosition,sizeInByes:sizeInBytes}}}fulfill(self)}).catch(function(error){reject(error)})})},igv.HiCReader.prototype.readMatrix=function(key){var self=this,idx=self.masterIndex[key];return null==idx&&fulfill(void 0),new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:idx.start,size:idx.size}})).then(function(data){if(!data)return void fulfill(null);var dis=new igv.BinaryParser(new DataView(data)),c1=dis.getInt(),c2=dis.getInt(),chr1=self.chromosomes[c1],chr2=self.chromosomes[c2],nResolutions=dis.getInt(),zdList=[],p1=getSites.call(self,chr1.name),p2=getSites.call(self,chr2.name);Promise.all([p1,p2]).then(function(results){for(var sites1=results[0],sites2=results[1];nResolutions-- >0;){var zd=parseMatixZoomData(chr1,chr2,sites1,sites2,dis);zdList.push(zd)}fulfill(new Matrix(c1,c2,zdList))}).catch(function(err){reject(err)})}).catch(reject)})},igv.HiCReader.prototype.readBlock=function(blockNumber,zd){var i,j,self=this,idx=null,blockIndex=zd.blockIndexMap;if(null!=blockIndex)var idx=blockIndex[blockNumber];return null==idx?Promise.resolve(new Block):new Promise(function(fulfill,reject){igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:idx.filePosition,size:idx.size}})).then(function(data){if(!data)return void fulfill(null);data=new Zlib.Inflate(new Uint8Array(data)).decompress().buffer;var parser=new igv.BinaryParser(new DataView(data)),nRecords=parser.getInt(),records=[];if(self.version<7)for(i=0;i<nRecords;i++){var binX=parser.getInt(),binY=parser.getInt(),counts=parser.getFloat();records.add(new ContactRecord(binX,binY,counts))}else{var binXOffset=parser.getInt(),binYOffset=parser.getInt(),useShort=0==parser.getByte(),type=parser.getByte();if(1===type){var rowCount=parser.getShort();for(i=0;i<rowCount;i++){binY=binYOffset+parser.getShort();var colCount=parser.getShort();for(j=0;j<colCount;j++)binX=binXOffset+parser.getShort(),counts=useShort?parser.getShort():parser.getFloat(),records.push(new ContactRecord(binX,binY,counts))}}else if(2==type){var nPts=parser.getInt(),w=parser.getShort();for(i=0;i<nPts;i++){var row=i/w,col=i-row*w,bin1=binXOffset+col,bin2=binYOffset+row;useShort?-32768!=(counts=parser.getShort())&&records.push(new ContactRecord(bin1,bin2,counts)):(counts=parser.getFloat(),isNaN(counts)||records.push(new ContactRecord(bin1,bin2,counts)))}}else reject("Unknown block type: "+type)}fulfill(new Block(blockNumber,records))}).catch(reject)})},NormalizationVector.getKey=function(type,chrIdx,unit,binSize){return type+"_"+chrIdx+"_"+unit+"_"+binSize},MatrixZoomData.prototype.getKey=function(){return this.chr1.name+"_"+this.chr2.name+"_"+this.zoom.unit+"_"+this.zoom.binSize},Matrix.prototype.getZoomData=function(zoom){var i,zdArray="BP"===zoom.unit?this.bpZoomData:this.fragZoomData;for(i=0;i<zdArray.length;i++){var zd=zdArray[i];if(zoom.binSize===zd.zoom.binSize)return zd}},ContactRecord=function(bin1,bin2,counts){this.bin1=bin1,this.bin2=bin2,this.counts=counts},Block=function(blockNumber,records){this.blockNumber=blockNumber,this.records=records},igv}(igv||{}),igv=function(igv){return igv.IdeoPanel=function($content_header){$content_header.append($('<div class="igv-ideogram-left-shim"></div>')),this.buildPanels($content_header)},igv.IdeoPanel.setWidth=function($ideogram,width){var percentage;$ideogram.width(width),percentage=$ideogram.width()/$ideogram.outerWidth(),$ideogram.width(Math.floor(percentage*width))},igv.IdeoPanel.prototype.buildPanels=function($content_header){this.panels=_.map(igv.browser.genomicStateList,function(genomicState){function addBorders($ideogram,locusIndex,lociCount){1!==lociCount&&locusIndex!==lociCount-1&&$ideogram.addClass("igv-ideogram-content-div-border-right")}var viewportContainerWidth=igv.browser.viewportContainerWidth(),panel={};return panel.genomicState=genomicState,panel.$ideogram=$('<div class="igv-ideogram-content-div"></div>'),addBorders(panel.$ideogram,genomicState.locusIndex,genomicState.locusCount),igv.IdeoPanel.setWidth(panel.$ideogram,viewportContainerWidth/genomicState.locusCount),$content_header.append(panel.$ideogram),panel.$canvas=$("<canvas>"),panel.$ideogram.append(panel.$canvas),panel.$canvas.attr("width",panel.$ideogram.width()),panel.$canvas.attr("height",panel.$ideogram.height()),panel.ctx=panel.$canvas.get(0).getContext("2d"),panel.ideograms={},panel.$ideogram.on("click",function(e){igv.IdeoPanel.clickHandler(panel,e)}),panel})},igv.IdeoPanel.$empty=function($content_header){$content_header.find(".igv-ideogram-content-div").remove()},igv.IdeoPanel.prototype.panelWithLocusIndex=function(locusIndex){var panels=_.filter(this.panels,function(panel){return locusIndex===panel.genomicState.locusIndex});return _.first(panels)},igv.IdeoPanel.prototype.resize=function(){var viewportContainerWidth=igv.browser.syntheticViewportContainerWidth();_.each(this.panels,function(panel,index){var genomicState=igv.browser.genomicStateList[index];panel.$ideogram.width(Math.floor(viewportContainerWidth/genomicState.locusCount)),panel.$canvas.attr("width",panel.$ideogram.width()),panel.ideograms={}}),this.repaint()},igv.IdeoPanel.prototype.repaint=function(){_.each(this.panels,function(panel){igv.IdeoPanel.repaintPanel(panel)})},igv.IdeoPanel.repaintPanel=function(panel){function drawIdeogram(bufferCtx,ideogramWidth,ideogramHeight){var shim=1,ideogramTop=0;if(igv.browser.genome){var cytobands=igv.browser.genome.getCytobands(referenceFrame.chrName);if(cytobands){var center=ideogramTop+ideogramHeight/2,xC=[],yC=[],len=cytobands.length;if(0==len)return;for(var chrLength=cytobands[len-1].end,scale=ideogramWidth/chrLength,lastPX=-1,i=0;i<cytobands.length;i++){var cytoband=cytobands[i],start=scale*cytoband.start,end=scale*cytoband.end;end>lastPX&&("c"==cytoband.type?("p"==cytoband.name.charAt(0)?(xC[0]=start,yC[0]=ideogramHeight+ideogramTop,xC[1]=start,yC[1]=ideogramTop,xC[2]=end,yC[2]=center):(xC[0]=end,yC[0]=ideogramHeight+ideogramTop,xC[1]=end,yC[1]=ideogramTop,xC[2]=start,yC[2]=center),bufferCtx.fillStyle="rgb(150, 0, 0)",bufferCtx.strokeStyle="rgb(150, 0, 0)",bufferCtx.polygon(xC,yC,1,0)):(bufferCtx.fillStyle=getCytobandColor(stainColors,cytoband),bufferCtx.fillRect(start,shim+ideogramTop,end-start,ideogramHeight-2*shim)))}}bufferCtx.strokeStyle="black",bufferCtx.roundRect(shim,shim+ideogramTop,ideogramWidth-2*shim,ideogramHeight-2*shim,(ideogramHeight-2*shim)/2,0,1),lastPX=end}}function getCytobandColor(colors,data){if("c"==data.type)return"rgb(150, 10, 10)";var stain=data.stain,shade=230;"p"==data.type&&(shade=Math.floor(230-stain/100*230));var c=colors[shade];return null==c&&(c="rgb("+shade+","+shade+","+shade+")",colors[shade]=c),c}try{var y,image,chromosome,widthPercentage,xPercentage,canvasWidth,canvasHeight,width,widthBP,x,xBP,referenceFrame,stainColors,xx,yy,ww,hh;if(referenceFrame=panel.genomicState.referenceFrame,!(igv.browser.genome&&referenceFrame&&igv.browser.genome.getChromosome(referenceFrame.chrName)))return;if(stainColors=[],canvasWidth=panel.$canvas.width(),canvasHeight=panel.$canvas.height(),panel.ctx.clearRect(0,0,canvasWidth,canvasHeight),"all"===referenceFrame.chrName.toLowerCase())return;image=panel.ideograms[referenceFrame.chrName],void 0===image&&(image=document.createElement("canvas"),image.width=canvasWidth,image.height=canvasHeight,drawIdeogram(image.getContext("2d"),image.width,image.height),panel.ideograms[referenceFrame.chrName]=image),y=0,panel.ctx.drawImage(image,0,0),chromosome=igv.browser.genome.getChromosome(referenceFrame.chrName),widthBP=Math.round(referenceFrame.bpPerPixel*panel.$ideogram.width()),xBP=referenceFrame.start,widthBP<chromosome.bpLength&&(widthPercentage=widthBP/chromosome.bpLength,xPercentage=xBP/chromosome.bpLength,x=Math.floor(xPercentage*panel.$canvas.width()),width=Math.floor(widthPercentage*panel.$canvas.width()),x=Math.max(0,x),x=Math.min(canvasWidth-width,x),panel.ctx.save(),panel.ctx.strokeStyle="red",panel.ctx.lineWidth=width<2?1:2,xx=x+panel.ctx.lineWidth/2,ww=width<2?1:width-panel.ctx.lineWidth,yy=y+panel.ctx.lineWidth/2,hh=image.height-panel.ctx.lineWidth,panel.ctx.strokeRect(xx,yy,ww,hh),panel.ctx.restore())}catch(e){console.log("Error painting ideogram: "+e.message)}},igv.IdeoPanel.clickHandler=function(panel,e){var xy,xPercentage,chr,locusLength,chrCoveragePercentage,ss,ee,genomicState=panel.genomicState,referenceFrame=genomicState.referenceFrame;xy=igv.translateMouseCoordinates(e,panel.$ideogram.get(0)),xPercentage=xy.x/panel.$ideogram.width(),locusLength=referenceFrame.bpPerPixel*panel.$ideogram.width(),chr=igv.browser.genome.getChromosome(referenceFrame.chrName),chrCoveragePercentage=locusLength/chr.bpLength,xPercentage-chrCoveragePercentage/2<0&&(xPercentage=chrCoveragePercentage/2),xPercentage+chrCoveragePercentage/2>1&&(xPercentage=1-chrCoveragePercentage/2),ss=Math.round((xPercentage-chrCoveragePercentage/2)*chr.bpLength),ee=Math.round((xPercentage+chrCoveragePercentage/2)*chr.bpLength),referenceFrame.start=Math.round((xPercentage-chrCoveragePercentage/2)*chr.bpLength),referenceFrame.bpPerPixel=(ee-ss)/panel.$ideogram.width(),igv.browser.updateLocusSearchWidget(genomicState),igv.browser.repaintWithLocusIndex(panel.genomicState.locusIndex)},igv}(igv||{}),igv=function(igv){function doPath(ctx,x,y){var i,len=x.length;for(i=0;i<len;i++)x[i]=Math.round(x[i]),y[i]=Math.round(y[i]);for(ctx.beginPath(),ctx.moveTo(x[0],y[0]),i=1;i<len;i++)ctx.lineTo(x[i],y[i]);ctx.closePath()}var debug=!1,log=function(msg){if(debug){var d=new Date,time=d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();"undefined"!=typeof copy&&copy(msg),"undefined"!=typeof console&&console.log("igv-canvas: "+time+" "+msg)}};return igv.graphics={setProperties:function(ctx,properties){for(var key in properties)if(properties.hasOwnProperty(key)){var value=properties[key];ctx[key]=value}},strokeLine:function(ctx,x1,y1,x2,y2,properties){x1=Math.floor(x1)+.5,y1=Math.floor(y1)+.5,x2=Math.floor(x2)+.5,y2=Math.floor(y2)+.5,log("stroke line, prop: "+properties),ctx.save(),properties&&igv.graphics.setProperties(ctx,properties),ctx.beginPath(),ctx.moveTo(x1,y1),ctx.lineTo(x2,y2),ctx.stroke(),ctx.restore()},fillRect:function(ctx,x,y,w,h,properties){x=Math.round(x),y=Math.round(y),properties&&(ctx.save(),igv.graphics.setProperties(ctx,properties)),ctx.fillRect(x,y,w,h),properties&&ctx.restore()},fillPolygon:function(ctx,x,y,properties){ctx.save(),properties&&igv.graphics.setProperties(ctx,properties),doPath(ctx,x,y),ctx.fill(),ctx.restore()},strokePolygon:function(ctx,x,y,properties){ctx.save(),properties&&igv.graphics.setProperties(ctx,properties),doPath(ctx,x,y),ctx.stroke(),ctx.restore()},fillText:function(ctx,text,x,y,properties,transforms){if(properties&&(ctx.save(),igv.graphics.setProperties(ctx,properties)),ctx.save(),ctx.translate(x,y),transforms)for(var transform in transforms){var value=transforms[transform];"translate"==transform&&ctx.translate(value.x,value.y),"rotate"==transform&&ctx.rotate(value.angle*Math.PI/180)}ctx.fillText(text,0,0),ctx.restore(),properties&&ctx.restore()},strokeText:function(ctx,text,x,y,properties,transforms){if(ctx.save(),properties&&igv.graphics.setProperties(ctx,properties),ctx.translate(x,y),transforms)for(var transform in transforms){var value=transforms[transform];"translate"==transform&&ctx.translate(value.x,value.y),"rotate"==transform&&ctx.rotate(value.angle*Math.PI/180)}ctx.strokeText(text,0,0),ctx.restore()},strokeCircle:function(ctx,x,y,radius){ctx.beginPath(),ctx.arc(x,y,radius,0,2*Math.PI),ctx.stroke()},fillCircle:function(ctx,x,y,radius){ctx.beginPath(),ctx.arc(x,y,radius,0,2*Math.PI),ctx.fill()},drawArrowhead:function(ctx,x,y,size,lineWidth){ctx.save(),size||(size=5),lineWidth&&(ctx.lineWidth=lineWidth),ctx.beginPath(),ctx.moveTo(x,y-size/2),ctx.lineTo(x,y+size/2),ctx.lineTo(x+size,y),ctx.lineTo(x,y-size/2),ctx.closePath(),ctx.fill(),ctx.restore()},dashedLine:function(ctx,x1,y1,x2,y2,dashLen,properties){ctx.save(),x1=Math.round(x1),y1=Math.round(y1),x2=Math.round(x2),y2=Math.round(y2),dashLen=Math.round(dashLen),log("dashedLine"),properties&&igv.graphics.setProperties(ctx,properties),void 0==dashLen&&(dashLen=2),ctx.moveTo(x1,y1);for(var dX=x2-x1,dY=y2-y1,dashes=Math.floor(Math.sqrt(dX*dX+dY*dY)/dashLen),dashX=dX/dashes,dashY=dY/dashes,q=0;q++<dashes;)x1+=dashX,y1+=dashY,ctx[q%2==0?"moveTo":"lineTo"](x1,y1);ctx[q%2==0?"moveTo":"lineTo"](x2,y2),ctx.restore()}},igv}(igv||{}),igv=function(igv){function hue2rgb(p,q,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p}igv.createColorSwatchSelector=function($genericContainer,colorHandler){var rgbs,s;s=1,rgbs=[];for(var v=1;v>=.5;v-=.1)for(var r,h=0;h<1;h+=1/28)r="rgb("+igv.Color.hsvToRgb(h,s,v).join(",")+")",rgbs.push(r);rgbs.pop(),rgbs.push(igv.Color.rgbColor(16,16,16)),rgbs.forEach(function(rgb){var $swatch;$swatch=igv.colorSwatch(rgb),$genericContainer.append($swatch),$swatch.click(function(){colorHandler(rgb)})})},igv.colorSwatch=function(rgbString){var $swatch,$fa;return $swatch=$("<div>",{class:"igv-color-swatch"}),$fa=$("<i>",{class:"fa fa-square fa-lg","aria-hidden":"true"}),$swatch.append($fa),$fa.css({color:rgbString}),$swatch},igv.Color={rgbToHex:function(rgb){return rgb=rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),rgb&&4===rgb.length?"#"+("0"+parseInt(rgb[1],10).toString(16)).slice(-2)+("0"+parseInt(rgb[2],10).toString(16)).slice(-2)+("0"+parseInt(rgb[3],10).toString(16)).slice(-2):""},hexToRgb:function(hex){var cooked=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);if(null!==cooked)return"rgb("+parseInt(cooked[1],16)+","+parseInt(cooked[2],16)+","+parseInt(cooked[3],16)+")"},hsvToRgb:function(h,s,v){var r,g,b,i=Math.floor(6*h),f=6*h-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);switch(i%6){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q}return[Math.floor(255*r),Math.floor(255*g),Math.floor(255*b)]},hslToRgb:function(h,s,l){var r,g,b;if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=hue2rgb(p,q,h+1/3),g=hue2rgb(p,q,h),b=hue2rgb(p,q,h-1/3)}return[255*r,255*g,255*b]},rgbaColor:function(r,g,b,a){return r=igv.Math.clamp(r,0,255),g=igv.Math.clamp(g,0,255),b=igv.Math.clamp(b,0,255),a=igv.Math.clamp(a,0,1),"rgba("+r+","+g+","+b+","+a+")"},rgbColor:function(r,g,b){return r=igv.Math.clamp(r,0,255),g=igv.Math.clamp(g,0,255),b=igv.Math.clamp(b,0,255),"rgb("+r+","+g+","+b+")"},greyScale:function(value){var grey=igv.Math.clamp(value,0,255);return"rgb("+grey+","+grey+","+grey+")"},randomGrey:function(min,max){min=igv.Math.clamp(min,0,255),max=igv.Math.clamp(max,0,255);var g=Math.round(igv.random(min,max)).toString(10);return"rgb("+g+","+g+","+g+")"},randomRGB:function(min,max){return min=igv.Math.clamp(min,0,255),max=igv.Math.clamp(max,0,255),"rgb("+Math.round(igv.random(min,max)).toString(10)+","+Math.round(igv.random(min,max)).toString(10)+","+Math.round(igv.random(min,max)).toString(10)+")"},randomRGBConstantAlpha:function(min,max,alpha){return min=igv.Math.clamp(min,0,255),max=igv.Math.clamp(max,0,255),"rgba("+Math.round(igv.random(min,max)).toString(10)+","+Math.round(igv.random(min,max)).toString(10)+","+Math.round(igv.random(min,max)).toString(10)+","+alpha+")"},addAlpha:function(color,alpha){var isHex=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color);return color.startsWith("rgba")?color:(isHex&&(color=igv.Color.hexToRgb(color)),color.startsWith("rgb")?color.replace("rgb","rgba").replace(")",", "+alpha+")"):(console.log(color+" is not an rgb style string"),color))},getCompositeColor:function(dest,src,alpha){return"rgb("+Math.floor(alpha*src[0]+(1-alpha)*dest[0])+","+Math.floor(alpha*src[1]+(1-alpha)*dest[1])+","+Math.floor(alpha*src[2]+(1-alpha)*dest[2])+")"},createColorString:function(token){return token.includes(",")?token.startsWith("rgb")?token:"rgb("+token+")":void 0}},igv.nucleotideColorComponents={A:[0,200,0],C:[0,0,200],T:[255,0,0],G:[209,113,5],a:[0,200,0],c:[0,0,200],t:[255,0,0],g:[209,113,5]},igv.nucleotideColors={A:"rgb( 0, 200, 0)",C:"rgb( 0, 0, 200)",T:"rgb(255, 0, 0)",G:"rgb(209, 113, 5)",a:"rgb( 0, 200, 0)",c:"rgb( 0, 0, 200)",t:"rgb(255, 0, 0)",g:"rgb(209, 113, 5)"},igv.BinnedColorScale=function(cs){this.thresholds=cs.thresholds,this.colors=cs.colors},igv.BinnedColorScale.prototype.getColor=function(value){var i,len=this.thresholds.length;for(i=0;i<len;i++)if(value<this.thresholds[i])return this.colors[i];return this.colors[this.colors.length-1]},igv.GradientColorScale=function(scale){this.scale=scale,this.lowColor="rgb("+scale.lowR+","+scale.lowG+","+scale.lowB+")",this.highColor="rgb("+scale.highR+","+scale.highG+","+scale.highB+")",this.diff=scale.high-scale.low},igv.GradientColorScale.prototype.getColor=function(value){var r,g,b,frac,scale=this.scale;return value<=scale.low?this.lowColor:value>=scale.high?this.highColor:(frac=(value-scale.low)/this.diff,r=Math.floor(scale.lowR+frac*(scale.highR-scale.lowR)),g=Math.floor(scale.lowG+frac*(scale.highG-scale.lowG)),b=Math.floor(scale.lowB+frac*(scale.highB-scale.lowB)),"rgb("+r+","+g+","+b+")")};var colorPalettes={Set1:["rgb(228,26,28)","rgb(55,126,184)","rgb(77,175,74)","rgb(166,86,40)","rgb(152,78,163)","rgb(255,127,0)","rgb(247,129,191)","rgb(153,153,153)","rgb(255,255,51)"],Dark2:["rgb(27,158,119)","rgb(217,95,2)","rgb(117,112,179)","rgb(231,41,138)","rgb(102,166,30)","rgb(230,171,2)","rgb(166,118,29)","rgb(102,102,102)"],Set2:["rgb(102, 194,165)","rgb(252,141,98)","rgb(141,160,203)","rgb(231,138,195)","rgb(166,216,84)","rgb(255,217,47)","rgb(229,196,148)","rgb(179,179,179)"],Set3:["rgb(141,211,199)","rgb(255,255,179)","rgb(190,186,218)","rgb(251,128,114)","rgb(128,177,211)","rgb(253,180,98)","rgb(179,222,105)","rgb(252,205,229)","rgb(217,217,217)","rgb(188,128,189)","rgb(204,235,197)","rgb(255,237,111)"],Pastel1:["rgb(251,180,174)","rgb(179,205,227)","rgb(204,235,197)","rgb(222,203,228)","rgb(254,217,166)","rgb(255,255,204)","rgb(229,216,189)","rgb(253,218,236)"],Pastel2:["rgb(173,226,207)","rgb(253,205,172)","rgb(203,213,232)","rgb(244,202,228)","rgb(230,245,201)","rgb(255,242,174)","rgb(243,225,206)"],Accent:["rgb(127,201,127)","rgb(190,174,212)","rgb(253,192,134)","rgb(255,255,153)","rgb(56,108,176)","rgb(240,2,127)","rgb(191,91,23)"]};return igv.PaletteColorTable=function(palette){this.colors=colorPalettes[palette],Array.isArray(this.colors)||(this.colors=[]),this.colorTable={},this.nextIdx=0,this.colorGenerator=new RColor},igv.PaletteColorTable.prototype.getColor=function(key){return this.colorTable.hasOwnProperty(key)||(this.nextIdx<this.colors.length?this.colorTable[key]=this.colors[this.nextIdx]:this.colorTable[key]=this.colorGenerator.get(),this.nextIdx++),this.colorTable[key]},RColor=function(){this.hue=Math.random(),this.goldenRatio=.618033988749895,this.hexwidth=2},RColor.prototype.hsvToRgb=function(h,s,v){var h_i=Math.floor(6*h),f=6*h-h_i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s),r=255,g=255,b=255;switch(h_i){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q}return[Math.floor(256*r),Math.floor(256*g),Math.floor(256*b)]},RColor.prototype.padHex=function(str){return str.length>this.hexwidth?str:new Array(this.hexwidth-str.length+1).join("0")+str},RColor.prototype.get=function(saturation,value){this.hue+=this.goldenRatio,this.hue%=1,"number"!=typeof saturation&&(saturation=.5),"number"!=typeof value&&(value=.95);var rgb=this.hsvToRgb(this.hue,saturation,value);return"#"+this.padHex(rgb[0].toString(16))+this.padHex(rgb[1].toString(16))+this.padHex(rgb[2].toString(16))},igv}(igv||{}),igv=function(igv){function setTrackOrder(conf){var trackOrder=1;conf.tracks&&conf.tracks.forEach(function(track){void 0===track.order&&(track.order=trackOrder++)})}function setReferenceConfiguration(conf){function expandGenome(genomeId){var reference=igv.Genome.KnownGenomes[genomeId];return reference||igv.presentAlert("Uknown genome id: "+genomeId,void 0),reference}if(conf.genome?conf.reference=expandGenome(conf.genome):conf.fastaURL?conf.reference={fastaURL:conf.fastaURL,cytobandURL:conf.cytobandURL}:conf.reference&&void 0!==conf.reference.id&&void 0===conf.reference.fastaURL&&(conf.reference=expandGenome(conf.reference.id)),!conf.reference||!conf.reference.fastaURL)throw igv.presentAlert("Fatal error: reference must be defined",void 0),new Error("Fatal error: reference must be defined")}function setControls(browser,conf){var controlDiv;!1!==conf.showCommandBar&&!1!==conf.showControls&&(controlDiv=conf.createControls?conf.createControls(browser,conf):createStandardControls(browser,conf),browser.$root.append($(controlDiv)))}function createStandardControls(browser,config){var $igvLogo,$controls,$karyo,$navigation,$searchContainer,$faSearch;return $controls=$('<div id="igvControlDiv">'),config.showNavigation&&($navigation=$('<div class="igv-navbar">'),$controls.append($navigation),$igvLogo=$('<div class="igv-logo">'),$navigation.append($igvLogo),$navigation.append(browser.trackFileLoad.$presentationButton),!0===config.showLoadFileWidget?browser.trackFileLoad.$presentationButton.show():browser.trackFileLoad.$presentationButton.hide(),browser.chromosomeSelectWidget=new igv.ChromosomeSelectWidget(browser,$navigation),!0===config.showChromosomeWidget?browser.chromosomeSelectWidget.$container.show():browser.chromosomeSelectWidget.$container.hide(),$searchContainer=$('<div class="igv-search-container">'),$navigation.append($searchContainer),browser.$searchInput=$('<input type="text" placeholder="Locus Search">'),$searchContainer.append(browser.$searchInput),browser.$searchInput.change(function(e){browser.search($(this).val())}),$faSearch=$('<i class="fa fa-search">'),$searchContainer.append($faSearch),$faSearch.click(function(){browser.search(browser.$searchInput.val())}),browser.$searchResults=$('<div class="igv-search-results">'),$searchContainer.append(browser.$searchResults.get(0)),browser.$searchResultsTable=$("<table>"),browser.$searchResults.append(browser.$searchResultsTable.get(0)),browser.$searchResults.hide(),browser.windowSizePanel=new igv.WindowSizePanel($navigation),zoomWidget(browser,$navigation),browser.$cursorTrackingGuide=$('<div class="igv-cursor-tracking-guide">'),$(browser.trackContainerDiv).append(browser.$cursorTrackingGuide),!0===config.showCursorTrackingGuide?browser.$cursorTrackingGuide.show():browser.$cursorTrackingGuide.hide(),browser.$cursorTrackingGuideToggle=igv.makeToggleButton("cursor guide","cursor guide","showCursorTrackingGuide",function(){return browser.$cursorTrackingGuide},void 0),$navigation.append(browser.$cursorTrackingGuideToggle),browser.centerGuide=new igv.CenterGuide($(browser.trackContainerDiv),config),$navigation.append(browser.centerGuide.$centerGuideToggle),browser.$trackLabelToggle=igv.makeToggleButton("track labels","track labels","trackLabelsVisible",function(){return $(browser.trackContainerDiv).find(".igv-track-label")},void 0),$navigation.append(browser.$trackLabelToggle)),$karyo=$("#igvKaryoDiv"),void 0===$karyo.get(0)&&($karyo=$('<div id="igvKaryoDiv" class="igv-karyo-div">'),$controls.append($karyo)),browser.karyoPanel=new igv.KaryoPanel($karyo,config),$navigation.append(browser.karyoPanel.$karyoPanelToggle),!1===config.showKaryo&&(browser.karyoPanel.$karyoPanelToggle.hide(),$karyo.hide()),$controls.get(0)}function zoomWidget(browser,$parent){var $fa;browser.$zoomContainer=$('<div class="igv-zoom-widget">'),$parent.append(browser.$zoomContainer),$fa=$('<i class="fa fa-minus-circle">'),browser.$zoomContainer.append($fa),$fa.on("click",function(){browser.zoomOut()}),$fa=$('<i class="fa fa-plus-circle">'),browser.$zoomContainer.append($fa),$fa.on("click",function(){browser.zoomIn()})}function setDefaults(config){void 0===config.encodeEnabled&&(config.encodeEnabled=!1),void 0===config.showLoadFileWidget&&(config.showLoadFileWidget=!1),void 0===config.minimumBases&&(config.minimumBases=40),void 0===config.showIdeogram&&(config.showIdeogram=!0),void 0===config.showCursorTrackingGuide&&(config.showCursorTrackingGuide=!1),void 0===config.showCenterGuide&&(config.showCenterGuide=!1),void 0===config.showKaryo&&(config.showKaryo=!1),void 0===config.trackLabelsVisible&&(config.trackLabelsVisible=!0),void 0===config.showControls&&(config.showControls=!0),void 0===config.showNavigation&&(config.showNavigation=!0),void 0===config.showRuler&&(config.showRuler=!0),void 0===config.showSequence&&(config.showSequence=!0),void 0===config.flanking&&(config.flanking=1e3),void 0===config.pairsSupported&&(config.pairsSupported=!0),void 0===config.type&&(config.type="IGV"),config.tracks||(config.tracks=[]),config.showSequence&&config.tracks.push({type:"sequence",order:-Number.MAX_VALUE})}function getInitialLocus(config){var loci=[];return config.locus?Array.isArray(config.locus)?loci=config.locus:loci.push(config.locus):igv.browser.genome.hasOwnProperty("all")?loci.push("all"):loci.push(igv.browser.genome.chromosomeNames[0]),loci}function extractQuery(uri){var i1,i2,i,j,s,query,tokens;if(query={},i1=uri.indexOf("?"),i2=uri.lastIndexOf("#"),i1>=0)for(i2<0&&(i2=uri.length),i=i1+1;i<i2;)j=uri.indexOf("&",i),j<0&&(j=i2),s=uri.substring(i,j),tokens=s.split("=",2),2===tokens.length&&(query[tokens[0]]=tokens[1]),i=j+1;return query}function loadSessionFile(){var query=extractQuery(window.location.href);if(query.hasOwnProperty("igvSessionXML")){var igvSession=decodeURIComponent(query.igvSessionXML);return igv.xhr.loadString(igvSession).then(function(string){return new igv.XMLSession(string)})}return Promise.resolve(void 0)}function extractLocus(){var query=extractQuery(window.location.href),loc=query.locus;return loc?decodeURIComponent(loc):void 0}return igv.version="beta",igv.createBrowser=function(parentDiv,config){var $header,browser;igv.browser&&igv.removeBrowser(),void 0===config&&(config={}),setDefaults(config),setTrackOrder(config),browser=new igv.Browser(config,$('<div class="igv-track-container-div">')[0]),$(parentDiv).append(browser.$root),browser.trackFileLoad=new igv.TrackFileLoad,browser.$root.append(browser.trackFileLoad.$container),browser.trackFileLoad.$container.hide(),setControls(browser,config),browser.$content=$('<div class="igv-content-div">'),browser.$root.append(browser.$content),$header=$('<div id="igv-content-header">'),browser.$content.append($header),browser.$content.append(browser.trackContainerDiv),browser.userFeedback=new igv.UserFeedback(browser.$content),browser.userFeedback.hide(),igv.popover=new igv.Popover(browser.$content),igv.alert=new igv.AlertDialog(browser.$content,"igv-alert"),igv.alert.hide(),igv.dialog=new igv.Dialog(browser.$root,igv.Dialog.dialogConstructor),igv.dialog.hide(),igv.dataRangeDialog=new igv.DataRangeDialog(browser.$root),igv.dataRangeDialog.hide(),config.showNavigation||$header.append($('<div class="igv-logo-nonav">')),config.apiKey&&igv.setApiKey(config.apiKey),config.oauthToken&&igv.setOauthToken(config.oauthToken);var width;return igv.Genome.getKnownGenomes().then(function(genomeTable){return loadSessionFile()}).then(function(session){session&&(config=Object.assign(config,session),void 0===config.tracks&&(config.tracks=[]),config.tracks.push({type:"sequence",order:-Number.MAX_VALUE})),setReferenceConfiguration(config);var initialLocus=extractLocus();return initialLocus&&(config.locus=initialLocus),config}).then(function(config){return igv.loadGenome(config.reference)}).then(function(genome){return igv.browser.genome=genome,igv.browser.genome.id=config.reference.id,!0===config.encodeEnabled&&igv.browser.encodeTable.loadData(config.reference.id,void 0,void 0,void 0),igv.browser.chromosomeSelectWidget.update(igv.browser.genome),width=igv.browser.viewportContainerWidth(),igv.browser.getGenomicStateList(getInitialLocus(config),width)}).then(function(genomicStateList){var errorString;genomicStateList.length>0?(igv.browser.genomicStateList=genomicStateList.map(function(genomicState,index){return genomicState.locusIndex=index,genomicState.locusCount=genomicStateList.length,genomicState.referenceFrame=new igv.ReferenceFrame(genomicState.chromosome.name,genomicState.start,(genomicState.end-genomicState.start)/(width/genomicState.locusCount)),genomicState}),igv.browser.updateLocusSearchWidget(_.first(igv.browser.genomicStateList)),igv.browser.zoomWidgetLayout(),igv.browser.toggleCenterGuide(igv.browser.genomicStateList),igv.browser.karyoPanel&&igv.browser.karyoPanel.resize(),!0===config.showIdeogram&&(igv.browser.ideoPanel=new igv.IdeoPanel($header),igv.browser.ideoPanel.repaint()),config.showRuler&&(igv.browser.rulerTrack=new igv.RulerTrack,igv.browser.addTrack(igv.browser.rulerTrack)),config.roi&&(igv.browser.roi=[],config.roi.forEach(function(r){igv.browser.roi.push(new igv.ROI(r))})),config.tracks&&igv.browser.loadTracksWithConfigList(config.tracks),igv.browser.windowSizePanel.updateWithGenomicState(_.first(igv.browser.genomicStateList))):(errorString="Unrecognized locus "+config.locus,igv.presentAlert(errorString,void 0))}).catch(function(error){igv.presentAlert(error,void 0),console.log(error)}),browser},igv.setApiKey=function(key){igv.oauth.google.apiKey=key},igv.setGoogleApiKey=function(key){igv.oauth.google.apiKey=key},igv.setOauthToken=function(token){igv.oauth.google.access_token=token},igv.setGoogleOauthToken=function(token){igv.oauth.google.access_token=token},igv.removeBrowser=function(){igv.browser.$root.remove(),$(".igv-grid-container-dialog").remove()},igv}(igv||{});CanvasRenderingContext2D.prototype.strokeLine=function(x1,y1,x2,y2,lineWidth){this.save(),this.beginPath(),lineWidth&&(this.lineWidth=lineWidth),this.moveTo(x1,y1),this.lineTo(x2,y2),this.stroke(),this.restore()},CanvasRenderingContext2D.prototype.drawArrowhead=function(x,y,size,lineWidth){this.save(),size||(size=5),lineWidth&&(this.lineWidth=lineWidth),this.beginPath(),this.moveTo(x,y-size/2),this.lineTo(x,y+size/2),this.lineTo(x+size,y),this.lineTo(x,y-size/2),this.closePath(),this.fill(),this.restore()},CanvasRenderingContext2D.prototype.roundRect=function(x,y,width,height,radius,fill,stroke){this.save(),void 0===stroke&&(stroke=!0),void 0===radius&&(radius=5),this.beginPath(),this.moveTo(x+radius,y),this.lineTo(x+width-radius,y),this.quadraticCurveTo(x+width,y,x+width,y+radius),this.lineTo(x+width,y+height-radius),this.quadraticCurveTo(x+width,y+height,x+width-radius,y+height),this.lineTo(x+radius,y+height),this.quadraticCurveTo(x,y+height,x,y+height-radius),this.lineTo(x,y+radius),this.quadraticCurveTo(x,y,x+radius,y),this.closePath(),stroke&&this.stroke(),fill&&this.fill(),this.restore()},CanvasRenderingContext2D.prototype.polygon=function(x,y,fill,stroke){this.save(),void 0===stroke&&(stroke=!0),this.beginPath();var len=x.length;this.moveTo(x[0],y[0]);for(var i=1;i<len;i++)this.lineTo(x[i],y[i]);this.closePath(),stroke&&this.stroke(),fill&&this.fill(),this.restore()},CanvasRenderingContext2D.prototype.eqTriangle=function(side,cx,cy){this.save();var h=side*(Math.sqrt(3)/2);this.beginPath(),this.moveTo(cx,cy-h/2),this.lineTo(cx-side/2,cy+h/2),this.lineTo(cx+side/2,cy+h/2),this.lineTo(cx,cy-h/2),this.closePath(),this.stroke(),this.fill(),this.restore()},void 0===String.prototype.startsWith&&(String.prototype.startsWith=function(aString){return!(this.length<aString.length)&&this.substr(0,aString.length)==aString}),void 0===String.prototype.endsWith&&(String.prototype.endsWith=function(aString){return!(this.length<aString.length)&&this.substr(this.length-aString.length,aString.length)==aString}),void 0===String.prototype.includes&&(String.prototype.includes=function(it){return-1!=this.indexOf(it)}),void 0===String.prototype.splitLines&&Object.defineProperty(String.prototype,"splitLines",{value:function(){return this.split(/\r\n|\n|\r/gm)},enumerable:!1,configurable:!1}),void 0===Uint8Array.prototype.toText&&(Uint8Array.prototype.toText=function(){var i,len,str;for(str="",i=0,len=this.byteLength;i<len;i++)str+=String.fromCharCode(this[i]);return str});var log2=Math.log(2);void 0===Math.log2&&(Math.log2=function(x){return Math.log(x)/log2}),void 0===Function.prototype.bind&&(Function.prototype.bind=function(){var fn=this,args=Array.prototype.slice.call(arguments),object=args.shift();return function(){return fn.apply(object,args.concat(Array.prototype.slice.call(arguments)))}}),Date.now||(Date.now=function(){return(new Date).getTime()}),Object.keys||(Object.keys=function(){"use strict";var hasOwnProperty=Object.prototype.hasOwnProperty,hasDontEnumBug=!{toString:null}.propertyIsEnumerable("toString"),dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;return function(obj){if("object"!=typeof obj&&("function"!=typeof obj||null===obj))throw new TypeError("Object.keys called on non-object");var prop,i,result=[];for(prop in obj)hasOwnProperty.call(obj,prop)&&result.push(prop);if(hasDontEnumBug)for(i=0;i<dontEnumsLength;i++)hasOwnProperty.call(obj,dontEnums[i])&&result.push(dontEnums[i]);return result}}()),Array.isArray||(Array.isArray=function(arg){return"[object Array]"===Object.prototype.toString.call(arg)});var igv=function(igv){function selectElement(array,k){var i,heap=new BinaryHeap;for(i=0;i<array.length;i++){var item=array[i];if(heap.content.length<k||item>heap.content[0]){if(heap.content.length===k){heap.pop()}heap.push(item)}}return heap.content[0]}function BinaryHeap(){this.content=[]}return igv.Math={mean:function(array){var i,t=0,n=0;for(i=0;i<array.length;i++)isNaN(array[i])||(t+=array[i],n++);return n>0?t/n:0},meanAndStdev:function(array){var v,i,t=0,t2=0,n=0;for(i=0;i<array.length;i++)v=array[i],isNaN(v)||(t+=v,t2+=v*v,n++);return n>0?{mean:t/n,stdev:Math.sqrt(t2-t*t/n)}:{mean:0,stdev:0}},percentile:function(array,p){if(0!==array.length){var k=Math.floor(array.length*((100-p)/100));return 0===k?(array.sort(function(a,b){return b-a}),array[k]):selectElement(array,k)}},clamp:function(value,min,max){return Math.min(Math.max(value,min),max)}},BinaryHeap.prototype={push:function(element){this.content.push(element),this.bubbleUp(this.content.length-1)},pop:function(){var result=this.content[0],end=this.content.pop();return this.content.length>0&&(this.content[0]=end,this.sinkDown(0)),result},remove:function(node){for(var length=this.content.length,i=0;i<length;i++)if(this.content[i]==node){var end=this.content.pop();if(i==length-1)break;this.content[i]=end,this.bubbleUp(i),this.sinkDown(i);break}},size:function(){return this.content.length},bubbleUp:function(n){for(var element=this.content[n],score=element;n>0;){var parentN=Math.floor((n+1)/2)-1,parent=this.content[parentN];if(score>=parent)break;this.content[parentN]=element,this.content[n]=parent,n=parentN}},sinkDown:function(n){for(var length=this.content.length,element=this.content[n],elemScore=element;;){var child2N=2*(n+1),child1N=child2N-1,swap=null;if(child1N<length){var child1=this.content[child1N],child1Score=child1;child1Score<elemScore&&(swap=child1N)}if(child2N<length){this.content[child2N]<(null==swap?elemScore:child1Score)&&(swap=child2N)}if(null==swap)break;this.content[n]=this.content[swap],this.content[swap]=element,n=swap}}},igv}(igv||{}),igv=function(igv){var self=this;igv.genericContainer=function($parent,config,closeHandler){var $generic_container,$header,$fa;return $generic_container=$("<div>",{class:"igv-generic-container"}),$parent.append($generic_container),config&&config.width&&$generic_container.width(config.width),config&&config.height&&$generic_container.height(config.height),config&&config.classes&&$generic_container.addClass(config.classes.join(" ")),$header=$("<div>"),$generic_container.append($header),$fa=$("<i>",{class:"fa fa-times"}),$header.append($fa),$fa.on("click",function(e){closeHandler()}),$generic_container},igv.makeDraggable=function($target,$handle){$handle.on("mousedown",function(event){function move(e){e.preventDefault(),e.stopPropagation(),$target.css({left:self.initX+e.clientX-self.mousePressX,top:self.initY+e.clientY-self.mousePressY})}event.preventDefault(),event.stopPropagation(),self.initX=$target.position().left,self.initY=$target.position().top,self.mousePressX=event.clientX,self.mousePressY=event.clientY,$handle.on("mousemove",move),window.addEventListener("mouseup",function(){$handle.off("mousemove")},!1)})},igv.getExtension=function(config){var path,filename,index;if(void 0!==config.url)return path=igv.isFilePath(config.url)?config.url.name:config.url,filename=path.toLowerCase(),index=filename.indexOf("?"),index>0&&(filename=filename.substr(0,index)),filename.endsWith(".gz")?filename=filename.substr(0,filename.length-3):(filename.endsWith(".txt")||filename.endsWith(".tab"))&&(filename=filename.substr(0,filename.length-4)),index=filename.lastIndexOf("."),index<0?filename:filename.substr(1+index)},igv.filenameOrURLHasSuffix=function(fileOrURL,suffix){return(fileOrURL instanceof File?fileOrURL.name:fileOrURL).toLowerCase().endsWith(suffix)},igv.isFilePath=function(path){return path instanceof File},igv.makeToggleButton=function(buttonOnLabel,buttonOffLabel,configurationKey,get$Target,continuation){function skin$ButtonWithTruthFunction($b,truth,onLabel,offLabel){$b.removeClass("igv-nav-bar-toggle-button-on"),$b.removeClass("igv-nav-bar-toggle-button-off"),!0===truth?($b.addClass("igv-nav-bar-toggle-button-off"),$b.text(offLabel),continuation&&continuation()):($b.addClass("igv-nav-bar-toggle-button-on"),$b.text(onLabel))}var $button=$('<div class="igv-nav-bar-toggle-button">');return skin$ButtonWithTruthFunction($button,!0===igv.browser.config[configurationKey],buttonOnLabel,buttonOffLabel),$button.click(function(){var $target=get$Target();igv.browser.config[configurationKey]=!igv.browser.config[configurationKey],$target.toggle(),skin$ButtonWithTruthFunction($(this),$target.is(":visible"),buttonOnLabel,buttonOffLabel)}),$button},igv.presentAlert=function(alert,$parent){console.error(alert);var string;string=alert.message||alert,httpMessages.hasOwnProperty(string)&&(string=httpMessages[string]),igv.alert.$dialogLabel.text(string),igv.alert.show($parent),igv.popover.hide()};var httpMessages={401:"Access unauthorized",403:"Access forbidden",404:"Not found"};return igv.attachDialogCloseHandlerWithParent=function($parent,closeHandler){var $container=$("<div>"),$fa=$('<i class="fa fa-times">');$container.append($fa),$parent.append($container),$fa.hover(function(){$fa.removeClass("fa-times"),$fa.addClass("fa-times-circle"),$fa.css({color:"#222"})},function(){$fa.removeClass("fa-times-circle"),$fa.addClass("fa-times"),$fa.css({color:"#444"})}),$fa.click(closeHandler)},igv.spinner=function(size){var $container,$spinner;return $spinner=$('<i class="fa fa-spinner fa-spin">'),size&&$spinner.css("font-size",size),$container=$('<div class="igv-spinner-container">'),$container.append($spinner[0]),$container[0]},igv.getSpinnerObjectWithParentElement=function(parentElement){return $(parentElement).find("div.igv-spinner-container")},igv.startSpinnerAtParentElement=function(parentElement){var spinnerObject=igv.getSpinnerObjectWithParentElement(parentElement);spinnerObject&&spinnerObject.show()},igv.stopSpinnerAtParentElement=function(parentElement){var spinnerObject=igv.getSpinnerObjectWithParentElement(parentElement);spinnerObject&&spinnerObject.hide()},igv.parseUri=function(str){for(var o=igv.parseUri.options,m=o.parser[o.strictMode?"strict":"loose"].exec(str),uri={},i=14;i--;)uri[o.key[i]]=m[i]||"";return uri[o.q.name]={},uri[o.key[12]].replace(o.q.parser,function($0,$1,$2){$1&&(uri[o.q.name][$1]=$2)}),uri},igv.parseUri.options={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},igv.domElementRectAsString=function(element){return" x "+element.clientLeft+" y "+element.clientTop+" w "+element.clientWidth+" h "+element.clientHeight},igv.isNumber=function(n){return""!==n&&(void 0!==n&&(!isNaN(parseFloat(n))&&isFinite(n)))},igv.guid=function(){return("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)},igv.random=function(min,max){return Math.random()*(max-min)+min},igv.prettyBasePairNumber=function(raw){var denom,units,value,floored;return raw>1e7?(denom=1e6,units=" mb",value=raw/denom,floored=Math.floor(value),floored.toString()+units):raw>1e4?(denom=1e3,units=" kb",value=raw/denom,floored=Math.floor(value),igv.numberFormatter(floored)+units):igv.numberFormatter(raw)+" bp"},igv.numberFormatter=function(rawNumber){var dec=String(rawNumber).split(/[.,]/);return dec[0].split("").reverse().reduce(function(prev,now,i){return i%3==0?prev+","+now:prev+now}).split("").reverse().join("")+(dec[1]?"."+dec[1]:"")},igv.numberUnFormatter=function(formatedNumber){return formatedNumber.split(",").join().replace(",","","g")},igv.translateMouseCoordinates=function(e,target){var eFixed,posx,posy,$target=$(target);return eFixed=$.event.fix(e),void 0===$target.offset()&&console.log("igv.translateMouseCoordinates - $target.offset() is undefined."),posx=eFixed.pageX-$target.offset().left,posy=eFixed.pageY-$target.offset().top,{x:posx,y:posy}},igv.formatPopoverText=function(nameValueArray){var markup='<table class="igv-popover-table">';return nameValueArray.forEach(function(nameValue){nameValue.name?markup+='<tr><td class="igv-popover-td"><div class="igv-popover-name-value"><span class="igv-popover-name">'+nameValue.name+'</span><span class="igv-popover-value">'+nameValue.value+"</span></div></td></tr>":markup+="<tr><td>"+nameValue.toString()+"</td></tr>"}),markup+="</table>"},igv.throttle=function(fn,threshhold,scope){threshhold||(threshhold=200);var last,deferTimer;return function(){var context=scope||this,now=+new Date,args=arguments;last&&now<last+threshhold?(clearTimeout(deferTimer),deferTimer=setTimeout(function(){last=now,fn.apply(context,args)},threshhold)):(last=now,fn.apply(context,args))}},igv.splitStringRespectingQuotes=function(string,delim){var i,c,tokens=[],len=string.length,n=0,quote=!1;if(len>0)for(tokens[n]=string.charAt(0),i=1;i<len;i++)c=string.charAt(i),'"'===c?quote=!quote:quote||c!==delim?tokens[n]+=c:(n++,tokens[n]="");return tokens},igv.addAjaxExtensions=function(){$.ajaxTransport("+binary",function(options,originalOptions,jqXHR){return{send:function(_,callback){var xhr=new XMLHttpRequest,url=options.url,type=options.type;options.data;if(xhr.addEventListener("load",function(){var data={};data[options.dataType]=xhr.response,callback(xhr.status,xhr.statusText,data,xhr.getAllResponseHeaders())}),xhr.open(type,url),xhr.responseType="arraybuffer",options.headers)for(var prop in options.headers)options.headers.hasOwnProperty(prop)&&xhr.setRequestHeader(prop,options.headers[prop])},abort:function(){jqXHR.abort()}}})},igv.isStringOrNumber=function(value){return!(!value.substring&&!value.toFixed)},igv.constrainBBox=function($child,$parent){var delta,topLeft,bboxChild={},bboxParent={};return bboxParent.left=bboxParent.top=0,bboxParent.right=$parent.outerWidth(),bboxParent.bottom=$parent.outerHeight(),topLeft=$child.offset(),bboxChild.left=topLeft.left-$parent.offset().left,bboxChild.top=topLeft.top-$parent.offset().top,bboxChild.right=bboxChild.left+$child.outerWidth(),bboxChild.bottom=bboxChild.top+$child.outerHeight(),delta=bboxChild.bottom-bboxParent.bottom,delta>0&&(topLeft.top-=delta,bboxChild.top-=delta,bboxChild.bottom-=delta,(delta=bboxChild.top-bboxParent.top)<0&&(topLeft.top-=delta)),topLeft},igv.log=function(message){igv.enableLogging&&console&&console.log&&console.log(message)},igv.buildOptions=function(config,options){var defaultOptions={oauthToken:config.oauthToken,headers:config.headers,withCredentials:config.withCredentials};return Object.assign(defaultOptions,options)},igv}(igv||{}),igv=function(igv){function loadFileSlice(localfile,options){return new Promise(function(fullfill,reject){var fileReader,blob,rangeEnd;fileReader=new FileReader,fileReader.onload=function(e){options.bgz||localfile.name.endsWith(".gz"),fullfill(fileReader.result)},fileReader.onerror=function(e){console.log("reject uploading local file "+localfile.name),reject(null,fileReader)},options.range?(rangeEnd=options.range.start+options.range.size-1,blob=localfile.slice(options.range.start,rangeEnd+1),fileReader.readAsArrayBuffer(blob)):fileReader.readAsArrayBuffer(localfile)})}function loadStringFromFile(localfile,options){return new Promise(function(fullfill,reject){var fileReader=new FileReader;fileReader.onload=function(e){var compression,result;compression=options.bgz?BGZF:localfile.name.endsWith(".gz")?GZIP:NONE,result=arrayBufferToString(fileReader.result,compression),fullfill(result)},fileReader.onerror=function(e){console.log("reject uploading local file "+localfile.name),reject(null,fileReader)},fileReader.readAsArrayBuffer(localfile)})}function loadStringFromUrl(url,options){var compression,fn,idx;return void 0===options&&(options={}),idx=url.indexOf("?"),fn=idx>0?url.substring(0,idx):url,compression=options.bgz?BGZF:fn.endsWith(".gz")?GZIP:NONE,compression===NONE?(options.mimeType="text/plain; charset=x-user-defined",igv.xhr.load(url,options)):(options.responseType="arraybuffer",igv.xhr.load(url,options).then(function(data){return arrayBufferToString(data,compression)}))}function isCrossDomain(url){var origin=window.location.origin;return!url.startsWith(origin)}function isAmazonV4Signed(url){return url.indexOf("X-Amz-Signature")>-1}function addOauthHeaders(headers){headers["Cache-Control"]="no-cache";var acToken=igv.oauth.google.access_token;return acToken||"undefined"==typeof oauth||(acToken=oauth.google.access_token),acToken&&!headers.hasOwnProperty("Authorization")&&(headers.Authorization="Bearer "+acToken),headers}function mapUrl(url){return url.includes("//www.dropbox.com")?url.replace("//www.dropbox.com","//dl.dropboxusercontent.com"):url.includes("//drive.google.com")?igv.Google.driveDownloadURL(url):url}function arrayBufferToString(arraybuffer,compression){var plain,inflate;compression===GZIP?(inflate=new Zlib.Gunzip(new Uint8Array(arraybuffer)),plain=inflate.decompress()):plain=compression===BGZF?new Uint8Array(igv.unbgzf(arraybuffer)):new Uint8Array(arraybuffer);for(var result="",i=0,len=plain.length;i<len;i++)result+=String.fromCharCode(plain[i]);return result}function isGoogleURL(url){return url.includes("googleapis")&&!url.includes("urlshortener")}var NONE=0,GZIP=1,BGZF=2;igv.xhr={},igv.xhr.load=function(url,options){function applyOauthToken(token){return token&&(options.token=token),getLoadPromise(url,options)}function getLoadPromise(url,options){return new Promise(function(fullfill,reject){function handleError(message){if(!reject)throw new Error(message);reject(new Error(message))}var header_keys,key,value,i,xhr=new XMLHttpRequest,sendData=options.sendData||options.body,method=options.method||(sendData?"POST":"GET"),range=options.range,responseType=options.responseType,contentType=options.contentType,mimeType=options.mimeType,headers=options.headers||{},isChrome=(0==navigator.vendor.indexOf("Apple")&&/\sSafari\//.test(navigator.userAgent),navigator.userAgent.indexOf("Chrome")>-1),withCredentials=options.withCredentials;if(url=url.startsWith("gs://")?igv.Google.translateGoogleCloudURL(url):url,options.token&&(headers.Authorization="Bearer "+options.token),isGoogleURL(url)?(url=igv.Google.addApiKey(url),headers=headers||{},igv.Google.addGoogleHeaders(headers)):options.oauth&&addOauthHeaders(headers),range&&isChrome&&!isAmazonV4Signed(url)&&(url+=url.includes("?")?"&":"?",url+="someRandomSeed="+Math.random().toString(36)),xhr.open(method,url),range){var rangeEnd=range.size?range.start+range.size-1:"";xhr.setRequestHeader("Range","bytes="+range.start+"-"+rangeEnd)}if(contentType&&xhr.setRequestHeader("Content-Type",contentType),mimeType&&xhr.overrideMimeType(mimeType),responseType&&(xhr.responseType=responseType),headers)for(header_keys=Object.keys(headers),i=0;i<header_keys.length;i++)key=header_keys[i],value=headers[key],xhr.setRequestHeader(key,value);!0===withCredentials&&(xhr.withCredentials=!0),xhr.onload=function(event){0==xhr.status||xhr.status>=200&&xhr.status<=300?range&&206!=xhr.status?handleError("ERROR: range-byte header was ignored for url: "+url):fullfill(xhr.response):handleError(416===xhr.status?"Unsatisfiable range":xhr.status)},xhr.onerror=function(event){isCrossDomain(url)&&!options.crossDomainRetried&&igv.browser&&igv.browser.crossDomainProxy&&url!=igv.browser.crossDomainProxy?(options.sendData="url="+url,options.crossDomainRetried=!0,igv.xhr.load(igv.browser.crossDomainProxy,options).then(fullfill)):handleError("Error accessing resource: "+url+" Status: "+xhr.status)},xhr.ontimeout=function(event){handleError("Timed out")},xhr.onabort=function(event){console.log("Aborted"),reject(event)};try{xhr.send(sendData)}catch(e){reject(e)}})}if(url=mapUrl(url),options=options||{},options.oauthToken){var token=_.isFunction(options.oauthToken)?options.oauthToken():options.oauthToken;return token.then&&_.isFunction(token.then)?token.then(applyOauthToken):applyOauthToken(token)}return getLoadPromise(url,options)},igv.xhr.loadArrayBuffer=function(url,options){return options=options||{},url instanceof File?loadFileSlice(url,options):(options.responseType="arraybuffer",igv.xhr.load(url,options))},igv.xhr.loadJson=function(url,options){return options=options||{},"POST"==(options.method||(options.sendData?"POST":"GET"))&&(options.contentType="application/json"),new Promise(function(fullfill,reject){igv.xhr.load(url,options).then(function(result){fullfill(result?JSON.parse(result):result)}).catch(reject)})},igv.xhr.loadString=function(path,options){return options=options||{},path instanceof File?loadStringFromFile(path,options):loadStringFromUrl(path,options)};const href=window.document.location.href;if(!href.includes("localhost")&&!href.includes("127.0.0.1")){igv.xhr.load("https://data.broadinstitute.org/igv/projects/current/counter_igvjs.php?version=0").then(function(ignore){console.log(ignore)}).catch(function(error){console.log(error)})}return igv}(igv||{}),igv=function(igv){function searchAll(interval,node,results){return node.interval.overlaps(interval)&&results.push(node.interval),node.left!=NIL&&node.left.max>=interval.low&&searchAll.call(this,interval,node.left,results),node.right!=NIL&&node.right.min<=interval.high&&searchAll.call(this,interval,node.right,results),results}function leftRotate(x){var y=x.right;x.right=y.left,y.left!=NIL&&(y.left.parent=x),y.parent=x.parent,x.parent==NIL?this.root=y:x.parent.left==x?x.parent.left=y:x.parent.right=y,y.left=x,x.parent=y,applyUpdate.call(this,x)}function rightRotate(x){var y=x.left;x.left=y.right,y.right!=NIL&&(y.right.parent=x),y.parent=x.parent,x.parent==NIL?this.root=y:x.parent.right==x?x.parent.right=y:x.parent.left=y,y.right=x,x.parent=y,applyUpdate.call(this,x)}function applyUpdate(node){for(;node!=NIL;){var nodeMax=node.left.max>node.right.max?node.left.max:node.right.max,intervalHigh=node.interval.high;node.max=nodeMax>intervalHigh?nodeMax:intervalHigh;var nodeMin=node.left.min<node.right.min?node.left.min:node.right.min,intervalLow=node.interval.low;node.min=nodeMin<intervalLow?nodeMin:intervalLow,node=node.parent}}function Interval(low,high,value){this.low=low,this.high=high,this.value=value}function Node(interval){this.parent=NIL,this.left=NIL,this.right=NIL,this.interval=interval,this.color=RED}var BLACK=1,RED=2,NIL={};return NIL.color=BLACK,NIL.parent=NIL,NIL.left=NIL,NIL.right=NIL,igv.IntervalTree=function(){this.root=NIL},igv.IntervalTree.prototype.insert=function(start,end,value){var interval=new Interval(start,end,value),x=new Node(interval);for(this.treeInsert(x),x.color=RED;x!=this.root&&x.parent.color==RED;)if(x.parent==x.parent.parent.left){var y=x.parent.parent.right;y.color==RED?(x.parent.color=BLACK,y.color=BLACK,x.parent.parent.color=RED,x=x.parent.parent):(x==x.parent.right&&(x=x.parent,leftRotate.call(this,x)),x.parent.color=BLACK,x.parent.parent.color=RED,rightRotate.call(this,x.parent.parent))}else{var y=x.parent.parent.left;y.color==RED?(x.parent.color=BLACK,y.color=BLACK,x.parent.parent.color=RED,x=x.parent.parent):(x==x.parent.left&&(x=x.parent,rightRotate.call(this,x)),x.parent.color=BLACK,x.parent.parent.color=RED,leftRotate.call(this,x.parent.parent))}this.root.color=BLACK},igv.IntervalTree.prototype.findOverlapping=function(start,end){var searchInterval=new Interval(start,end,0);if(this.root===NIL)return[];var intervals=searchAll.call(this,searchInterval,this.root,[]);return intervals.length>1&&intervals.sort(function(i1,i2){return i1.low-i2.low}),intervals},igv.IntervalTree.prototype.logIntervals=function(){function logNode(node,indent){for(var space="",i=0;i<indent;i++)space+=" ";console.log(space+node.interval.low+" "+node.interval.high),indent+=5,node.left!=NIL&&logNode(node.left,indent),node.right!=NIL&&logNode(node.right,indent)}logNode(this.root,0)},igv.IntervalTree.prototype.mapIntervals=function(func){function applyInterval(node){func(node.interval),node.left!=NIL&&applyInterval(node.left),node.right!=NIL&&applyInterval(node.right)}applyInterval(this.root)},igv.IntervalTree.prototype.treeInsert=function(x){for(var node=this.root,y=NIL;node!=NIL;)y=node,node=x.interval.low<=node.interval.low?node.left:node.right;x.parent=y,y==NIL?(this.root=x,x.left=x.right=NIL):x.interval.low<=y.interval.low?y.left=x:y.right=x,applyUpdate.call(this,x)},Interval.prototype.equals=function(other){return!!other&&(this==other||this.low==otherInterval.low&&this.high==otherInterval.high)},Interval.prototype.compareTo=function(other){return this.low<other.low?-1:this.low>other.low?1:this.high<other.high?-1:this.high>other.high?1:0},Interval.prototype.overlaps=function(other){try{return this.low<=other.high&&other.low<=this.high}catch(e){igv.presentAlert(e,void 0)}},igv}(igv||{}),igv=function(igv){var log=function(txt){};return igv.KaryoPanel=function($parent,config){var contentDiv,canvas,tipCtx,tipCanvas,self=this;this.$container=$('<div class="igv-karyo-div">'),$parent.append(this.$container),!0===config.showKaryo?this.$container.show():this.$container.hide(),this.$karyoPanelToggle=igv.makeToggleButton("Karyotype Panel","Karyotype Panel","showKaryo",function(){return self.$container},void 0),this.ideograms=null,igv.guichromosomes=[],contentDiv=$('<div class="igv-karyo-content-div"></div>')[0],this.$container.append(contentDiv),canvas=$('<canvas class="igv-karyo-canvas"></canvas>')[0],$(contentDiv).append(canvas),canvas.setAttribute("width",contentDiv.offsetWidth),canvas.setAttribute("height",contentDiv.offsetHeight),this.canvas=canvas,this.ctx=canvas.getContext("2d"),tipCanvas=document.createElement("canvas"),tipCanvas.style.position="absolute",tipCanvas.style.width="100px",tipCanvas.style.height="20px",tipCanvas.style.left="-2000px",tipCanvas.setAttribute("width","100px"),tipCanvas.setAttribute("height","20px"),tipCtx=tipCanvas.getContext("2d"),contentDiv.appendChild(tipCanvas),this.canvas.onmousemove=function(e){for(var mouseCoords=igv.translateMouseCoordinates(e,canvas),mouseX=mouseCoords.x,mouseY=mouseCoords.y,hit=!1,i=0;i<igv.guichromosomes.length;i++){var g=igv.guichromosomes[i];if(g.x<mouseX&&g.right>mouseX&&g.y<mouseY&&g.bottom>mouseY){var dy=mouseY-g.y,bp=Math.round(g.size*dy/g.h);tipCanvas.style.left=Math.round(mouseX+20)+"px",tipCanvas.style.top=Math.round(mouseY-5)+"px",tipCtx.clearRect(0,0,tipCanvas.width,tipCanvas.height),tipCtx.fillStyle="rgb(255,255,220)",tipCtx.fillRect(0,0,tipCanvas.width,tipCanvas.height),tipCtx.fillStyle="rgb(0,0,0)";var mb=Math.round(bp/1e6);tipCtx.fillText(g.name+" @ "+mb+" MB",3,12),hit=!0;break}}hit||(tipCanvas.style.left="-2000px")},this.canvas.onclick=function(e){var mouseCoords=igv.translateMouseCoordinates(e,canvas),mouseX=mouseCoords.x,mouseY=mouseCoords.y;igv.navigateKaryo(mouseX,mouseY)}},igv.navigateKaryo=function(mouseX,mouseY){for(var i=0;i<igv.guichromosomes.length;i++){var g=igv.guichromosomes[i];if(g.x<mouseX&&g.right>mouseX&&g.y<mouseY&&g.bottom>mouseY){var dy=mouseY-g.y,center=Math.round(g.size*dy/g.h);log("Going to position "+center),igv.browser.goto(g.name,center,void 0);break}}igv.browser.update()},igv.KaryoPanel.prototype.resize=function(){var canvas;void 0!==igv.browser.genomicStateList&&(canvas=this.canvas,canvas.setAttribute("width",canvas.clientWidth),canvas.setAttribute("height",canvas.clientHeight),log("Resize called: width="+canvas.clientWidth+"/"+canvas.clientHeight),this.ideograms=void 0,this.repaint())},igv.KaryoPanel.prototype.repaint=function(){function drawImage(){image=document.createElement("canvas"),image.width=w,image.height=h;var bufferCtx=image.getContext("2d"),nr=0,col=0,row=1,y=top;igv.guichromosomes=[];for(chr in chromosomes){if(nr>nrchr)break;1==row&&2==nrrows&&nr+1>nrchr/2&&(row=2,col=0,y=y+chrheight+top),nr++,col++;var chromosome=genome.getChromosome(chr);"chrM"!=chr||chromosome.bpLength||(chromosome.bpLength=16e3),chromosome.x=col*totalchrwidth,chromosome.y=y;var guichrom=new Object;guichrom.name=chr,igv.guichromosomes.push(guichrom),drawIdeogram(guichrom,chromosome.x,chromosome.y,chromosome,bufferCtx,chrwidth,chrheight,maxLen)}this.ideograms=image,log("============= PROCESSING "+igv.browser.trackViews.length+" TRACKS");for(var tracknr=0,i=0;i<igv.browser.trackViews.length;i++){var trackPanel=igv.browser.trackViews[i],track=trackPanel.track;if(track.getSummary&&track.loadSummary){log("Found track with summary: "+track.name);var source=track;window.source=track,source.loadSummary("chr1",0,1e6,function(featureList){if(featureList){nr=0;for(chr in chromosomes){var guichrom=igv.guichromosomes[nr];nr++,guichrom&&guichrom.size&&loadfeatures(source,chr,0,guichrom.size,guichrom,bufferCtx,tracknr)}}}),tracknr++}}}function drawFeatures(source,featurelist,guichrom,ideogramLeft,top,bufferCtx,ideogramWidth,ideogramHeight,longestChr,tracknr){if(genome&&guichrom&&featurelist){if(0!=featurelist.length)for(var scale=ideogramHeight/longestChr,dx=1,i=0;i<featurelist.length;i++){var feature=featurelist[i],color="rgb(0,0,150)",value=feature.score;source.getColor&&(color=source.getColor(value));var starty=scale*feature.start+top,endy=scale*feature.end+top,dy=Math.max(.01,endy-starty);bufferCtx.fillStyle=color,bufferCtx.fillRect(ideogramLeft+ideogramWidth+2*tracknr+1,starty,dx,dy)}}}function drawIdeogram(guichrom,ideogramLeft,top,chromosome,bufferCtx,ideogramWidth,ideogramHeight,longestChr){if(genome&&chromosome){var cytobands=genome.getCytobands(chromosome.name);if(cytobands){var centerx=ideogramLeft+ideogramWidth/2,xC=[],yC=[],len=cytobands.length,scale=ideogramHeight/longestChr;guichrom.x=ideogramLeft,guichrom.y=top,guichrom.w=ideogramWidth,guichrom.right=ideogramLeft+ideogramWidth;var last=0,lastPY=-1;if(len>0)last=cytobands[len-1].end,guichrom.h=scale*last,guichrom.size=last;else{var MINH=5;lastPY=top+MINH,guichrom.h=MINH,guichrom.size=MINH/scale}if(guichrom.longest=longestChr,guichrom.bottom=top+guichrom.h,len>0)for(var i=0;i<cytobands.length;i++){var cytoband=cytobands[i],starty=scale*cytoband.start+top,endy=scale*cytoband.end+top;if(endy>lastPY)if("c"==cytoband.type)"p"==cytoband.name.charAt(0)?(yC[0]=starty,xC[0]=ideogramWidth+ideogramLeft,yC[1]=starty,xC[1]=ideogramLeft,yC[2]=endy,xC[2]=centerx):(yC[0]=endy,xC[0]=ideogramWidth+ideogramLeft,yC[1]=endy,xC[1]=ideogramLeft,yC[2]=starty,xC[2]=centerx),bufferCtx.fillStyle="rgb(220, 150, 100)",bufferCtx.strokeStyle="rgb(150, 0, 0)",bufferCtx.polygon(xC,yC,1,0);else{var dy=endy-starty;bufferCtx.fillStyle=getCytobandColor(cytoband),bufferCtx.fillRect(ideogramLeft,starty,ideogramWidth,dy)}lastPY=endy}}bufferCtx.fillStyle=null,bufferCtx.lineWidth=1,bufferCtx.strokeStyle="darkgray";var r=ideogramWidth/2;bufferCtx.roundRect(ideogramLeft,top-r/2,ideogramWidth,lastPY-top+r,ideogramWidth/2,0,1),bufferCtx.font="bold 10px Arial",bufferCtx.fillStyle="rgb(0, 0, 0)";var name=chromosome.name;name.length>3&&(name=name.substring(3)),bufferCtx.fillText(name,ideogramLeft+ideogramWidth/2-3*name.length,top-10)}}function getCytobandColor(data){if("c"==data.type)return"rgb(150, 10, 10)";var stain=data.stain,shade=230;"p"==data.type&&(shade=Math.floor(230-stain/100*230));var c=stainColors[shade];return null==c&&(c="rgb("+shade+","+shade+","+shade+")",stainColors[shade]=c),c}function loadfeatures(source,chr,start,end,guichrom,bufferCtx,tracknr){source.getSummary(chr,start,end,function(featureList){featureList&&(featureList.length,drawFeatures(source,featureList,guichrom,guichrom.x,guichrom.y,bufferCtx,chrwidth,chrheight,maxLen,tracknr),me.repaint())})}if(void 0!==this.canvasWidth&&void 0!==this.canvasHeight){var genome,genomicState,referenceFrame,stainColors,w,h;if(void 0!==igv.browser.genomicStateList&&(genome=igv.browser.genome,genome.ideograms&&(genomicState=_.first(igv.browser.genomicStateList),referenceFrame=genomicState.referenceFrame,stainColors=[],w=this.canvas.width,h=this.canvas.height,this.ctx.clearRect(0,0,w,h),genome&&referenceFrame&&genome.chromosomes&&referenceFrame.chrName))){var chromosomes=genome.chromosomes,image=this.ideograms;if(chromosomes.length<1)return void log("No chromosomes yet, returning");var nrchr=24,nrrows=1;w<300&&(nrrows=2);var totalchrwidth=Math.min(50,(w-20)/(nrchr+2)*nrrows),chrwidth=Math.min(20,totalchrwidth/2),top=25,chrheight=(h-25)/nrrows-top,longestChr=genome.getLongestChromosome(),cytobands=genome.getCytobands(longestChr.name);if(cytobands){var me=this,maxLen=cytobands[cytobands.length-1].end;image&&null!=image||drawImage.call(this),this.ctx.drawImage(image,0,0),this.ctx.save();var chr=referenceFrame.chrName;this.genome&&(chr=this.genome.getChromosomeName(chr));var chromosome=igv.browser.genome.getChromosome(chr);if(chromosome){var ideoScale=longestChr.bpLength/chrheight,boxPY1=chromosome.y-3+Math.round(referenceFrame.start/ideoScale),boxHeight=Math.max(3,igv.browser.viewportContainerWidth()/genomicState.locusCount*referenceFrame.bpPerPixel/ideoScale);this.ctx.strokeStyle="rgb(150, 0, 0)",this.ctx.lineWidth=2,this.ctx.strokeRect(chromosome.x-3,boxPY1,chrwidth+6,boxHeight+6),this.ctx.restore()}else log("Could not find chromosome "+chr)}}}},igv}(igv||{}),igv=function(igv){return igv.oauth={google:{}},igv}(igv||{}),igv=function(igv){return igv.isBlank=function(line){return!line.match(/\S+/g)},igv.isComment=function(line){return 0==line.indexOf("#")},igv.getQueryValue=function(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var regexS="[\\?&]"+name+"=([^&#]*)",regex=new RegExp(regexS),results=regex.exec(window.location.href);return null==results?void 0:results[1]},igv}(igv||{}),igv=function(igv){return igv.ReferenceFrame=function(chrName,start,bpPerPixel){this.chrName=chrName,this.start=start,this.bpPerPixel=bpPerPixel},igv.ReferenceFrame.prototype.set=function(json){this.chrName=json.chrName,this.start=json.start,this.bpPerPixel=json.bpPerPixel},igv.ReferenceFrame.prototype.toPixels=function(bp){return bp/this.bpPerPixel},igv.ReferenceFrame.prototype.toBP=function(pixels){return this.bpPerPixel*pixels},igv.ReferenceFrame.prototype.shiftPixels=function(pixels){this.start+=pixels*this.bpPerPixel},igv.ReferenceFrame.prototype.description=function(){return"ReferenceFrame "+this.chrName+" "+igv.numberFormatter(Math.floor(this.start))+" bpp "+this.bpPerPixel},igv}(igv||{}),igv=function(igv){function coordinates(region,startBP,bpp){var ss,ee,width;return ss=Math.round((region.start-startBP)/bpp),ee=Math.round((region.end-startBP)/bpp),width=ee-ss,width<3&&(width=3,ss-=1),{x:ss,width:width}}return igv.ROI=function(config){this.config=config,this.name=config.name,this.roiSource=new igv.FeatureSource(config),this.color=config.color||"rgba(68, 134, 247, 0.25)"},igv.ROI.prototype.getFeatures=function(chr,start,end){return this.roiSource.getFeatures(chr,start,end)},igv.ROI.prototype.draw=function(drawConfiguration){var endBP,region,coord,regions,len;if(regions=drawConfiguration.features){endBP=drawConfiguration.bpStart+(drawConfiguration.pixelWidth*drawConfiguration.bpPerPixel+1);for(var i=0,len=regions.length;i<len;i++)if(region=regions[i],!(region.end<drawConfiguration.bpStart)){if(region.start>endBP)break;coord=coordinates(region,drawConfiguration.bpStart,drawConfiguration.bpPerPixel),igv.graphics.fillRect(drawConfiguration.context,coord.x,0,coord.width,drawConfiguration.pixelHeight,{fillStyle:this.color})}}},igv}(igv||{}),igv=function(igv){return igv.ROISource=function(config){this.config=config||{},this.sourceType=void 0===config.sourceType?"file":config.sourceType,this.reader=new igv.FeatureFileReader(config),this.visibilityWindow=config.visibilityWindow},igv.ROISource.prototype.getRegions=function(chr,bpStart,bpEnd){var self=this;return new Promise(function(fulfill,reject){var genomicInterval;genomicInterval=new igv.GenomicInterval(chr,bpStart,bpEnd),self.reader.readFeatures(chr,genomicInterval.start,genomicInterval.end).then(function(features){fulfill(features)}).catch(reject)})},igv}(igv||{}),igv=function(igv){return igv.RulerSweeper=function(viewport,$viewport,$viewportContent,genomicState){this.viewport=viewport,this.$viewport=$viewport,this.$viewportContent=$viewportContent,this.genomicState=genomicState,this.$rulerSweeper=$('<div class="igv-ruler-sweeper-div">'),this.$viewportContent.append(this.$rulerSweeper),this.wholeGenomeLayout(this.$viewportContent.find(".igv-whole-genome-container")),this.addMouseHandlers()},igv.RulerSweeper.prototype.wholeGenomeLayout=function($container){var viewportWidth,extent,nameLast,chrLast,scraps,$div,$e,self=this;nameLast=_.last(igv.browser.genome.wgChromosomeNames),chrLast=igv.browser.genome.getChromosome(nameLast),extent=Math.floor(chrLast.bpLength/1e3)+igv.browser.genome.getCumulativeOffset(nameLast),viewportWidth=this.$viewport.width(),scraps=0,_.each(igv.browser.genome.wgChromosomeNames,function(name){var w,percentage;percentage=igv.browser.genome.getChromosome(name).bpLength/extent,percentage*viewportWidth<1?scraps+=percentage:($div=$("<div>"),$container.append($div),w=Math.floor(percentage*viewportWidth),$div.width(w),$e=$("<span>"),$div.append($e),$e.text(name),$div.on("click",function(e){var locusString,loci;self.$viewportContent.find(".igv-whole-genome-container").hide(),self.$viewportContent.find("canvas").show(),1===self.genomicState.locusCount?locusString=name:(loci=_.map(igv.browser.genomicStateList,function(g){return g.locusSearchString}),loci[self.genomicState.locusIndex]=name,locusString=loci.join(" ")),igv.browser.search(locusString)}))}),scraps*=viewportWidth,(scraps=Math.floor(scraps))>=1&&($div=$("<div>"),$container.append($div),$div.width(scraps),$e=$("<span>"),$div.append($e),$e.text("-"))},igv.RulerSweeper.prototype.disableMouseHandlers=function(){this.$viewport.off()},igv.RulerSweeper.prototype.addMouseHandlers=function(){var left,rulerSweepWidth,dx,self=this,isMouseDown=void 0,isMouseIn=void 0,mouseDownXY=void 0,mouseMoveXY=void 0,rulerSweepThreshold=1;this.disableMouseHandlers(),this.$viewport.on({mousedown:function(e){e.preventDefault(),e.stopPropagation(),isMouseDown=!0,mouseDownXY={x:e.offsetX,y:e.offsetY},left=mouseDownXY.x,rulerSweepWidth=0,self.$rulerSweeper.css({display:"inline",left:left+"px",width:rulerSweepWidth+"px"}),isMouseIn=!0},mousemove:igv.throttle(function(e){e.preventDefault(),e.stopPropagation(),isMouseDown&&isMouseIn&&(mouseMoveXY={x:e.offsetX,y:e.offsetY},dx=mouseMoveXY.x-mouseDownXY.x,(rulerSweepWidth=Math.abs(dx))>rulerSweepThreshold&&(self.$rulerSweeper.css({width:rulerSweepWidth+"px"}),dx<0&&(mouseDownXY.x+dx<0?(isMouseIn=!1,left=0):left=mouseDownXY.x+dx,self.$rulerSweeper.css({left:left+"px"}))))},10),mouseup:function(e){var extent,referenceFrame;e.preventDefault(),e.stopPropagation(),isMouseDown&&(isMouseDown=!1,isMouseIn=!1,self.$rulerSweeper.css({display:"none",left:"0px",width:"0px"}),referenceFrame=self.genomicState.referenceFrame,extent={},extent.start=referenceFrame.start+left*referenceFrame.bpPerPixel,extent.end=extent.start+rulerSweepWidth*referenceFrame.bpPerPixel,rulerSweepWidth>rulerSweepThreshold&&(igv.Browser.validateLocusExtent(igv.browser.genome.getChromosome(referenceFrame.chrName),extent),self.viewport.goto(referenceFrame.chrName,extent.start,extent.end)))}})},igv}(igv||{}),igv=function(igv){function tickLabelString(tickLabelNumber,index){var tickUnit,tickDivisor,number;return tickUnit=tickUnits[tickKeys[index]],tickDivisor=tickDivisors[tickKeys[index]],number=Math.round(tickLabelNumber/tickDivisor),igv.numberFormatter(number)+" "+tickUnit}function createTickDivisiors(){var tickDivisiors={};return tickDivisiors[1e8.toString()]=1e6,tickDivisiors[5e7.toString()]=1e6,tickDivisiors[1e7.toString()]=1e6,tickDivisiors[5e6.toString()]=1e6,tickDivisiors[1e6.toString()]=1e6,tickDivisiors[5e5.toString()]=1e3,tickDivisiors[1e5.toString()]=1e3,tickDivisiors[5e4.toString()]=1e3,tickDivisiors[1e4.toString()]=1e3,tickDivisiors[5e3.toString()]=1e3,tickDivisiors[1e3.toString()]=1e3,tickDivisiors[500..toString()]=1,tickDivisiors[100..toString()]=1,tickDivisiors[50..toString()]=1,tickDivisiors[10..toString()]=1,tickDivisiors}function createTickValues(){var tickValues={};return _.each(tickNumbers,function(number){tickValues[number.toString()]=number}),tickValues}function createTickUnits(){var tickUnits={};return tickUnits[1e8.toString()]="mb",tickUnits[5e7.toString()]="mb",tickUnits[1e7.toString()]="mb",tickUnits[5e6.toString()]="mb",tickUnits[1e6.toString()]="mb",tickUnits[5e5.toString()]="kb",tickUnits[1e5.toString()]="kb",tickUnits[5e4.toString()]="kb",tickUnits[1e4.toString()]="kb",tickUnits[5e3.toString()]="kb",tickUnits[1e3.toString()]="kb",tickUnits[500..toString()]="",tickUnits[100..toString()]="",tickUnits[50..toString()]="",tickUnits[10..toString()]="",tickUnits}function updateLocusLabelWithGenomicState($label,state){$label.text(state.locusSearchString)}function rectWithCenterAndSize(center,size){var halfSize=sizeMake(size.width/2,size.height/2);return rectMake(center.x-halfSize.width,center.y-halfSize.height,size.width,size.height)}function rectMake(x,y,width,height){var rect={origin:{},size:{}};return rect.origin.x=x,rect.origin.y=y,rect.size.width=width,rect.size.height=height,rect}function sizeMake(width,height){return{width:width,height:height}}var TickSeparationThreshold,tickNumbers,tickKeys,tickDivisors,tickUnits,tickValues;return TickSeparationThreshold=50,tickNumbers=[1e8,5e7,1e7,5e6,1e6,5e5,1e5,5e4,1e4,5e3,1e3,500,100,50,10].reverse(),tickKeys=_.map(tickNumbers,function(number){return number.toString()}),tickDivisors=createTickDivisiors(),tickUnits=createTickUnits(),tickValues=createTickValues(),igv.RulerTrack=function(){this.height=40,this.name="",this.id="ruler",this.disableButtons=!0,this.ignoreTrackMenu=!0,this.order=-Number.MAX_VALUE,this.supportsWholeGenome=!0},igv.RulerTrack.prototype.createRulerSweeper=function(viewport,$viewport,$viewportContent,genomicState){void 0===this.rulerSweepers&&(this.rulerSweepers={}),this.rulerSweepers[genomicState.locusIndex.toString()]=new igv.RulerSweeper(viewport,$viewport,$viewportContent,genomicState)},igv.RulerTrack.prototype.locusLabelWithGenomicState=function(genomicState){var $label;return $label=$('<div class = "igv-viewport-content-ruler-div">'),$label.text(genomicState.locusSearchString),$label.data("referenceFrame",JSON.parse(JSON.stringify(genomicState.referenceFrame))),$label.click(function(e){genomicState.referenceFrame.set($(this).data("referenceFrame")),igv.browser.selectMultiLocusPanelWithGenomicState(genomicState)}),$label},igv.RulerTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){return Promise.resolve([])},igv.RulerTrack.prototype.draw=function(options){var pixel,shim,tickHeight,rulerSweeper,index,tickSeparationPixel,tickLabelNumber,tickLabelText,toggle,rect,center,size,maximumLabelWidthPixel,bp,self=this;if(rulerSweeper=this.rulerSweepers[options.genomicState.locusIndex.toString()],"all"===options.referenceFrame.chrName.toLowerCase())rulerSweeper.$viewportContent.find("canvas").hide(),rulerSweeper.$viewportContent.find(".igv-whole-genome-container").show(),rulerSweeper.disableMouseHandlers();else{rulerSweeper.$viewportContent.find(".igv-whole-genome-container").hide(),rulerSweeper.$viewportContent.find("canvas").show(),rulerSweeper.addMouseHandlers(),updateLocusLabelWithGenomicState(options.viewport.$viewport.find(".igv-viewport-content-ruler-div"),options.genomicState),index=0;for(var i=0;i<_.size(tickKeys);i++)if((tickSeparationPixel=options.referenceFrame.toPixels(tickValues[tickKeys[i]]))>TickSeparationThreshold){index=i;break}for(shim=2,tickHeight=6,bp=options.bpStart+options.referenceFrame.toBP(options.pixelWidth),bp=Math.min(options.genomicState.chromosome.bpLength,bp),maximumLabelWidthPixel=options.context.measureText(tickLabelString(bp,index)).width,pixel=0,toggle=0,tickLabelNumber=options.bpStart;pixel<options.pixelWidth;pixel+=tickSeparationPixel,toggle++,tickLabelNumber+=tickValues[tickKeys[index]])(0==toggle%2||maximumLabelWidthPixel<tickSeparationPixel)&&(tickLabelText=tickLabelString(tickLabelNumber,index),center={x:Math.round(pixel),y:self.height-tickHeight/.75},size={width:options.context.measureText(tickLabelText).width,height:2},rect=rectWithCenterAndSize(center,size),igv.graphics.fillText(options.context,tickLabelText,Math.round(pixel-rect.size.width/2),self.height-tickHeight/.75)),igv.graphics.strokeLine(options.context,Math.round(pixel),this.height-tickHeight,Math.round(pixel),this.height-shim);igv.graphics.strokeLine(options.context,0,this.height-shim,options.pixelWidth,this.height-shim)}},igv}(igv||{}),igv=function(igv){var SampleInformation=function(){this.attributes={},this.plinkLoaded=!1};return SampleInformation.prototype.loadPlinkFile=function(url,config){var self=this;return config||(config={}),new Promise(function(fulfill,reject){var options=igv.buildOptions(config);igv.xhr.loadString(url,options).then(function(data){data.splitLines().forEach(function(line){var line_arr=line.split(" ");self.attributes[line_arr[1]]={familyId:line_arr[0],fatherId:line_arr[2],motherId:line_arr[3],sex:line_arr[4],phenotype:line_arr[5]}}),self.plinkLoaded=!0,fulfill(self.attributes)}).catch(reject)})},SampleInformation.prototype.getAttributes=function(sample){return this.attributes[sample]},SampleInformation.prototype.getAttributeNames=function(){return this.hasAttributes()?Object.keys(this.attributes[Object.keys(this.attributes)[0]]):[]},SampleInformation.prototype.hasAttributes=function(){return Object.keys(this.attributes).length>0},igv.sampleInformation=new SampleInformation,igv}(igv||{}),igv=function(igv){return igv.SequenceTrack=function(config){this.config=config,this.name="",this.id="sequence",this.sequenceType=config.sequenceType||"dna",this.height=25,this.disableButtons=!1,this.order=config.order||-Number.MAX_VALUE,this.ignoreTrackMenu=!1,this.supportsWholeGenome=!1,this.removable=!1,this.reversed=!1,this.frameTranslate=!1,this.complement={A:"T",C:"G",G:"C",T:"A"},this.translationDict={TTT:"F",TTC:"F",TTA:"L",TTG:"L",CTT:"L",CTC:"L",CTA:"L",CTG:"L",ATT:"I",ATC:"I",ATA:"I",ATG:"M",GTT:"V",GTC:"V",GTA:"V",GTG:"V",TCT:"S",TCC:"S",TCA:"S",TCG:"S",CCT:"P",CCC:"P",CCA:"P",CCG:"P",ACT:"T",ACC:"T",ACA:"T",ACG:"T",GCT:"A",GCC:"A",GCA:"A",GCG:"A",TAT:"Y",TAC:"Y",TAA:"STOP",TAG:"STOP",CAT:"H",CAC:"H",CAA:"Q",CAG:"Q",AAT:"N",AAC:"N",AAA:"K",AAG:"K",GAT:"D",GAC:"D",GAA:"E",GAG:"E",TGT:"C",TGC:"C",TGA:"STOP",TGG:"W",CGT:"R",CGC:"R",CGA:"R",CGG:"R",AGT:"S",AGC:"S",AGA:"R",AGG:"R",GGT:"G",GGC:"G",GGA:"G",GGG:"G"}},igv.SequenceTrack.prototype.menuItemList=function(popover){var self=this;return[{name:self.reversed?"Forward":"Reverse",click:function(){self.reversed=!self.reversed,popover.hide(),igv.browser.update()}},{name:self.frameTranslate?"Close Translation":"Three-frame Translate",click:function(){self.frameTranslate=!self.frameTranslate,popover.hide(),self.frameTranslate?(self.trackView.viewports[0].canvas.height=115,self.trackView.setTrackHeight(115)):(self.trackView.viewports[0].canvas.height=25,self.trackView.setTrackHeight(25))}}]},igv.SequenceTrack.prototype.translateSequence=function(seq){var threeFrame=[[],[],[]],self=this;return[0,1,2].forEach(function(fNum){for(var obj,st,idx=fNum;seq.length-idx>=3;)obj={},st=seq.slice(idx,idx+3),self.reversed&&(st=st.split("").reverse().join("")),obj.codons=st,obj.aminoA=self.translationDict[st],threeFrame[fNum].push(obj),obj=null,idx+=3}),threeFrame},igv.SequenceTrack.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel){return new Promise(function(fulfill,reject){bpPerPixel&&bpPerPixel>1?fulfill(null):igv.browser.genome.sequence.getSequence(chr,bpStart,bpEnd).then(fulfill).catch(reject)})},igv.SequenceTrack.prototype.draw=function(options){var len,w,y,pos,offset,b,p0,p1,pc,c,h,transSeq,aaS,self=this,sequence=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,bpEnd=bpStart+pixelWidth*bpPerPixel+1;if(sequence){for(len=sequence.length,w=1/bpPerPixel,h=15,pos=bpStart;pos<=bpEnd;pos++)(offset=pos-bpStart)<len&&(b=sequence[offset],this.reversed&&(b=this.complement[b.toUpperCase()]),p0=Math.floor(offset*w),p1=Math.floor((offset+1)*w),pc=Math.round((p0+p1)/2),c=this.color?this.color:"dna"===this.sequenceType?igv.nucleotideColors[b]:"rgb(0, 0, 150)",c||(c="gray"),bpPerPixel>.1?igv.graphics.fillRect(ctx,p0,5,p1-p0,h-5,{fillStyle:c}):igv.graphics.strokeText(ctx,b,pc-ctx.measureText(b).width/2,h,{strokeStyle:c}));this.frameTranslate&&(this.reversed?(transSeq=sequence.split("").map(function(cv){return self.complement[cv]}),transSeq=transSeq.join("")):transSeq=sequence,y=h,this.translateSequence(transSeq).forEach(function(arr,i){var fNum=i;y=0===i?y+10:y+30,arr.forEach(function(cv,idx){var xSeed=idx+fNum+2*idx;c=idx%2==0?"rgb(160,160,160)":"rgb(224,224,224)",p0=Math.floor(xSeed*w),p1=Math.floor((xSeed+3)*w),pc=Math.round((p0+p1)/2),cv.aminoA.indexOf("STOP")>-1?(c="rgb(255, 0, 0)",aaS="STOP"):aaS=cv.aminoA,"M"===cv.aminoA&&(c="rgb(0, 153, 0)",aaS="START"),igv.graphics.fillRect(ctx,p0,y,p1-p0,25,{fillStyle:c}),bpPerPixel<=.1&&igv.graphics.strokeText(ctx,aaS,pc-ctx.measureText(aaS).width/2,y+15)})}))}},igv}(igv||{}),igv=function(igv){return igv.XMLSession=function(xmlString){function extractTrackAttributes(track,config){var color,height,autoScale,altColor,dataRange,dataRangeCltn,windowFunction,visWindow,indexed;config.name=track.getAttribute("name"),color=track.getAttribute("color"),color&&(config.color="rgb("+color+")"),altColor=track.getAttribute("altColor"),color&&(config.altColor="rgb("+altColor+")"),height=track.getAttribute("height"),height&&(config.height=parseInt(height)),autoScale=track.getAttribute("autoScale"),autoScale&&(config.autoScale="true"===autoScale),windowFunction=track.getAttribute("windowFunction"),windowFunction&&(config.windowFunction=windowFunction),visWindow=track.getAttribute("visibilityWindow")||track.getAttribute("featureVisibilityWindow"),visWindow&&(config.visibilityWindow=visWindow),indexed=track.getAttribute("indexed"),indexed&&(config.indexed="true"===indexed),dataRangeCltn=track.getElementsByTagName("DataRange"),dataRangeCltn.length>0&&(dataRange=dataRangeCltn.item(0),autoScale||(config.min=parseInt(dataRange.getAttribute("minimum")),config.max=parseInt(dataRange.getAttribute("maximum"))),config.logScale="LOG"===dataRange.getAttribute("type"))}function processRootNode(){var elements,session,genome,locus,ucscID;elements=xmlDoc.getElementsByTagName("Session"),!elements||elements.length,session=elements.item(0),genome=session.getAttribute("genome"),locus=session.getAttribute("locus"),ucscID=session.getAttribute("ucscID"),igv.Genome.KnownGenomes.hasOwnProperty(genome)?self.reference={id:genome}:self.reference={fastaURL:genome},locus&&(self.locus=locus),ucscID&&(self.reference.id=ucscID)}var parser,xmlDoc,elements,self=this;parser=new DOMParser,xmlDoc=parser.parseFromString(xmlString,"text/xml"),processRootNode(),elements=xmlDoc.getElementsByTagName("Resource"),self.tracks=[];var resourceMap={};Array.from(elements).forEach(function(res,idx){var res={url:res.getAttribute("path"),indexURL:res.getAttribute("index"),order:idx};self.tracks.push(res),resourceMap[res.url]=res}),(elements=xmlDoc.getElementsByTagName("Track"))&&elements.length>0&&(self.tracks=[],Array.from(elements).forEach(function(track){var id,res,subtracks,mergedTrack;subtracks=track.getElementsByTagName("Track"),subtracks&&subtracks.length>0?(mergedTrack={type:"merged",tracks:[]},extractTrackAttributes(track,mergedTrack),self.tracks.push(mergedTrack),Array.from(subtracks).forEach(function(t){t.processed=!0;var id,res;id=t.getAttribute("id"),(res=resourceMap[id])&&(mergedTrack.tracks.push(res),extractTrackAttributes(t,res),res.autoscale=!1,mergedTrack.height=res.height)})):track.processed||(id=track.getAttribute("id"),(res=resourceMap[id])&&(self.tracks.push(res),extractTrackAttributes(track,res)))}))},igv}(igv||{});Array.isArray||(Array.isArray=function(vArg){return"[object Array]"===Object.prototype.toString.call(vArg)}),"undefined"==typeof Set&&(Set=function(){this.data={},this.add.apply(this,arguments)},Set.prototype={add:function(){for(var key,i=0;i<arguments.length;i++)if(key=arguments[i],Array.isArray(key)||this._isPseudoArray(key))for(var j=0;j<key.length;j++)this._add(key[j]);else if(key instanceof Set){var self=this;key.each(function(val,key){self._add(key,val)})}else this._add(key);return this},addAll:function(arrayOrSet){if(Array.isArray(arrayOrSet)||this._isPseudoArray(arrayOrSet))for(var j=0;j<arrayOrSet.length;j++)this._add(arrayOrSet[j]);else if(arrayOrSet instanceof Set){var self=this;arrayOrSet.each(function(val,key){self._add(key,val)})}return this},_add:function(key,val){return void 0===val&&(val=key),this.data[this._makeKey(key)]=val,this},_getKey:function(arg){return arg},_makeKey:function(arg){return arg},_removeItem:function(key){delete this.data[this._getKey(key)]},_isPseudoArray:function(item){return!1},delete:function(key){for(var item,j=0;j<arguments.length;j++)if(item=arguments[j],Array.isArray(item)||this._isPseudoArray(item))for(var i=0;i<item.length;i++)this._removeItem(item[i]);else this._removeItem(item);return this},has:function(key){return key=this._makeKey(key),Object.prototype.hasOwnProperty.call(this.data,key)},hasAll:function(args){var self=this;return this.makeNew.apply(this,arguments).every(function(data,key){return self.has(key)})},makeSet:function(args){return args instanceof Set?args:this.makeNew.apply(this,arguments)},equals:function(otherSet){return otherSet=this.makeSet(otherSet),this.isSubset(otherSet)&&this.isSuperset(otherSet)},isEmpty:function(){for(var key in this.data)if(this.has(key))return!1;return!0},size:function(){var size=0;for(var key in this.data)this.has(key)&&size++;return size},keys:function(){var results=[];return this.each(function(data){results.push(data)}),results},clear:function(){return this.data={},this},makeNew:function(){var newSet=new this.constructor;return arguments.length&&newSet.add.apply(newSet,arguments),newSet},union:function(otherSet){otherSet=this.makeSet(otherSet);var newSet=this.makeNew(this);return newSet.add(otherSet),newSet},intersection:function(otherSet){otherSet=this.makeSet(otherSet);var newSet=this.makeNew();return this.each(function(data,key){otherSet.has(key)&&newSet._add(key,data)}),newSet},difference:function(otherSet){otherSet=this.makeSet(otherSet);var newSet=this.makeNew();return this.each(function(data,key){otherSet.has(key)||newSet._add(key,data)}),newSet},notInBoth:function(otherSet){return otherSet=this.makeSet(otherSet),this.difference(otherSet).add(otherSet.difference(this))},isSubset:function(otherSet){return otherSet=this.makeSet(otherSet),this.eachReturn(function(data,key){if(!otherSet.has(key))return!1})},isSuperset:function(otherSet){otherSet=this.makeSet(otherSet);var self=this;return otherSet.eachReturn(function(data,key){if(!self.has(key))return!1})},each:function(fn){return this.eachReturn(fn),this},eachReturn:function(fn){for(var key in this.data)if(this.has(key)&&!1===fn.call(this,this.data[key],key))return!1;return!0},filter:function(fn){var newSet=this.makeNew();return this.each(function(data,key){!0===fn.call(this,key)&&newSet._add(key,data)}),newSet},map:function(fn){var newSet=this.makeNew();return this.each(function(data,key){void 0!==fn.call(this,key)&&newSet._add(key,data)}),newSet},some:function(fn){var found=!1;return this.eachReturn(function(key){if(!0===fn.call(this,key))return found=!0,!1}),found},every:function(fn){return this.eachReturn(fn)}},Set.prototype.constructor=Set);var igv=function(igv){var transformations;return igv.SVG=function(){this.svg="",this.contents=[],transformations=[]},igv.SVG.prototype.setProperties=function(properties){var str="";for(var key in properties)if(properties.hasOwnProperty(key)){var value=properties[key];"font-family"===key?str+="font-family:"+value+";":"font-size"===key?str+="font-size:"+value+";":"fillStyle"==key?str+="fill:"+value+";":"fill"===key?str+="fill:"+value+";":"strokeStyle"==key?str+="stroke:"+value+";":"stroke"===key?str+="stroke:"+value+";":"stroke-width"===key?str+="stroke-width:"+value+";":console.log("Unknown property: "+key)}return str},igv.SVG.prototype.setTransforms=function(transforms,x,y){var str="";for(var key in transforms){if(transforms.hasOwnProperty(key)){var value=transforms[key];"rotate"===key?(str+="rotate("+value.angle,str+=","+x,str+=","+y,str+=")"):"translate"===key?(str+="translate("+value[x],"y"in value&&(str+=","+value.y),str+=")"):console.log("Unknown transform: "+key)}str+=" "}return str},igv.SVG.prototype.clearRect=function(x,y,w,h){},igv.SVG.prototype.strokeLine=function(x1,y1,x2,y2,properties,transforms){var str="";str+='<line x1="'+x1+'" y1="'+y1+'" x2="'+x2+'" y2="'+y2+'"',properties&&(str+=' style="'+this.setProperties(properties)+'"'),transforms&&(str+=' transform="'+this.setTransforms(transforms,x1,y1)+'"'),str+="/>",this.contents.push(str)},igv.SVG.prototype.fillRect=function(x,y,w,h,properties,transforms){var str="";str+='<rect x="'+x+'" y="'+y,str+='" width="'+w+'" height="'+h+'"',properties&&(str+=' style="'+this.setProperties(properties)+'"'),transforms&&(str+=' transform="'+this.setTransforms(transforms,x,y)+'"'),str+="/>",this.contents.push(str)},igv.SVG.prototype.fillRectWithCenter=function(centerX,centerY,width,height,properties,transforms){var str="";str+='<rect x="'+(centerX-width/2)+'" y="'+(centerY-height/2),str+='" width="'+width+'" height="'+height+'"',properties&&(str+=' style="'+this.setProperties(properties)+'"'),transforms&&(str+=' transform="'+this.setTransforms(transforms,centerX,centerY)+'"'),str+="/>",this.contents.push(str)},igv.SVG.prototype.fillPolygon=function(x,y,properties,transforms){var str="";str+='<polygon points="';for(var index=0;index<x.length;index++)str+=" "+x[index]+","+y[index];str+='"',properties&&(str+=' style="'+this.setProperties(properties)+'"'),transforms&&(str+=' transform="'+this.setTransforms(transforms,x,y)+'"'),str+="/>",this.contents.push(str)},igv.SVG.prototype.fillText=function(text,x,y,properties,transforms){var str="";str+='<text x="'+x+'" y="'+y+'"',properties&&(str+=' style="'+this.setProperties(properties)+'"'),transforms&&(str+=' transform="'+this.setTransforms(transforms,x,y)+'"'),str+=">",str+=text,str+="</text>",this.contents.push(str)},igv.SVG.prototype.strokeText=function(text,x,y,properties,transforms){var str="";str+='<text x="'+x+'" y="'+y+'"',properties&&(str+=' style="'+this.setProperties(properties)+'"'),transforms&&(str+=' transform="'+this.setTransforms(transforms,x,y)+'"'),str+=">",str+=text,str+="</text>",this.contents.push(str)},igv.SVG.prototype.strokeCircle=function(x,y,radius,properties,transforms){var str="";str+='<circle cx="'+x+'" cy="'+y+'" r="'+radius+'" stroke="black" fill-opacity="0.0"/>',this.contents.push(str)},igv.SVG.prototype.string=function(){var string="";string+='<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">';for(var index=0;index<this.contents.length;index++)string+="\n"+this.contents[index];return string+="</svg>"},igv.SVG.prototype.innerString=function(){for(var string="",index=0;index<this.contents.length;index++)string+="\n"+this.contents[index];return string},igv}(igv||{}),igv=function(igv){function createFixedStep(binaryParser,nTracks){var data,dtrack,nPositions=binaryParser.getInt(),start=binaryParser.getInt(),span=binaryParser.getFloat(),np=nPositions,nt=nTracks;for(data=[];nt-- >0;){for(np=nPositions,dtrack=[];np-- >0;)dtrack.push(binaryParser.getFloat());data.push(dtrack)}return{type:"fixedStep",start:start,span:span,data:data,nTracks:nTracks,nPositions:nPositions}}function createVariableStep(binaryParser,nTracks){for(var data,dtrack,tileStart=binaryParser.getInt(),span=binaryParser.getFloat(),nPositions=binaryParser.getInt(),np=nPositions,nt=nTracks,start=[];np-- >0;)start.push(binaryParser.getInt());binaryParser.getInt();for(data=[];nt-- >0;){for(np=nPositions,dtrack=[];np-- >0;)dtrack.push(binaryParser.getFloat());data.push(dtrack)}return{type:"variableStep",tileStart:tileStart,span:span,start:start,data:data,nTracks:nTracks,nPositions:nPositions}}function createBed(binaryParser,nTracks,type){var nPositions,start,end,data,name,n,nt,np,dtrack;for(nPositions=binaryParser.getInt(),n=nPositions,start=[];n-- >0;)start.push(binaryParser.getInt());for(n=nPositions,end=[];n-- >0;)end.push(binaryParser.getInt());binaryParser.getInt();for(data=[],nt=nTracks;nt-- >0;){for(np=nPositions,dtrack=[];np-- >0;)dtrack.push(binaryParser.getFloat());data.push(dtrack)}if("bedWithName"===type)for(n=nPositions,name=[];n-- >0;)name.push(binaryParser.getString());return{type:type,start:start,end:end,data:data,name:name,nTracks:nTracks,nPositions:nPositions}}return igv.TDFReader=function(config){this.config=config,this.path=config.url,this.groupCache={},this.datasetCache={}},igv.TDFReader.prototype.readHeader=function(){var self=this;return void 0!==this.magic?Promise.resolve(this):igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:0,size:64e3}})).then(function(data){var binaryParser=new igv.BinaryParser(new DataView(data));if(self.magic=binaryParser.getInt(),self.version=binaryParser.getInt(),self.indexPos=binaryParser.getLong(),self.indexSize=binaryParser.getInt(),binaryParser.getInt(),self.version>=2){var nWindowFunctions=binaryParser.getInt();for(self.windowFunctions=[];nWindowFunctions-- >0;)self.windowFunctions.push(binaryParser.getString())}self.trackType=binaryParser.getString(),self.trackLine=binaryParser.getString();var nTracks=binaryParser.getInt();for(self.trackNames=[];nTracks-- >0;)self.trackNames.push(binaryParser.getString());return self.genomeID=binaryParser.getString(),self.flags=binaryParser.getInt(),self.compressed=0!=(1&self.flags),igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:self.indexPos,size:self.indexSize}}))}).then(function(data){var binaryParser=new igv.BinaryParser(new DataView(data));self.datasetIndex={};for(var nEntries=binaryParser.getInt();nEntries-- >0;){var name=binaryParser.getString(),pos=binaryParser.getLong(),size=binaryParser.getInt();self.datasetIndex[name]={position:pos,size:size}}for(self.groupIndex={},nEntries=binaryParser.getInt();nEntries-- >0;)name=binaryParser.getString(),pos=binaryParser.getLong(),size=binaryParser.getInt(),self.groupIndex[name]={position:pos,size:size};return self})},igv.TDFReader.prototype.readDataset=function(chr,windowFunction,zoom){var dsName,key,self=this;return key=chr+"_"+windowFunction+"_"+zoom,self.datasetCache[key]?Promise.resolve(self.datasetCache[key]):self.readHeader().then(function(ignore){var indexEntry,wf=self.version<2?"":"/"+windowFunction,zoomString="all"===chr.toLowerCase()||void 0===zoom?"0":zoom.toString();return dsName="raw"===windowFunction?"/"+chr+"/raw":"/"+chr+"/z"+zoomString+wf,indexEntry=self.datasetIndex[dsName],void 0===indexEntry?void 0:igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:indexEntry.position,size:indexEntry.size}}))}).then(function(data){if(data){for(var binaryParser=new igv.BinaryParser(new DataView(data)),nAttributes=binaryParser.getInt(),attributes={};nAttributes-- >0;)attributes[binaryParser.getString()]=binaryParser.getString();for(var dataType=binaryParser.getString(),tileWidth=binaryParser.getFloat(),nTiles=binaryParser.getInt(),tiles=[];nTiles-- >0;)tiles.push({position:binaryParser.getLong(),size:binaryParser.getInt()});var dataset={name:dsName,attributes:attributes,dataType:dataType,tileWidth:tileWidth,tiles:tiles};return self.datasetCache[key]=dataset,dataset}})},igv.TDFReader.prototype.readRootGroup=function(){var self=this,rootGroup=this.groupCache["/"];return rootGroup?Promise.resolve(rootGroup):self.readGroup("/").then(function(group){var genome=igv.browser.genome,names=group.chromosomes,maxZoomString=group.maxZoom;return maxZoomString&&(self.maxZoom=Number(maxZoomString)),self.chrAliasTable={},names&&names.split(",").forEach(function(chr){var canonicalName=genome.getChromosomeName(chr);self.chrAliasTable[canonicalName]=chr}),group})},igv.TDFReader.prototype.readGroup=function(name){var group,self=this,group=self.groupCache[name];return group?Promise.resolve(group):self.readHeader().then(function(reader){var indexEntry=self.groupIndex[name];return void 0===indexEntry?void 0:igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:indexEntry.position,size:indexEntry.size}}))}).then(function(data){if(data){for(var binaryParser=new igv.BinaryParser(new DataView(data)),nAttributes=binaryParser.getInt(),group={name:name};nAttributes-- >0;)group[binaryParser.getString()]=binaryParser.getString();return self.groupCache[name]=group,group}})},igv.TDFReader.prototype.readTiles=function(tileIndeces,nTracks){var self=this;if(tileIndeces.sort(function(a,b){return a.position-b.position}),tileIndeces=tileIndeces.filter(function(idx){return idx.size>0}),0===tileIndeces.length)return Promise.resolve([]);var firstEntry=tileIndeces[0],lastEntry=tileIndeces[tileIndeces.length-1],position=firstEntry.position,size=lastEntry.position+lastEntry.size-position;return igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:position,size:size}})).then(function(data){var tiles=[];return tileIndeces.forEach(function(indexEntry){var start=indexEntry.position-position,size=indexEntry.size;if(size>0){var tileData;tileData=self.compressed?new Zlib.Inflate(new Uint8Array(data,start,size)).decompress().buffer:data.slice(start,start+size);var tile,binaryParser=new igv.BinaryParser(new DataView(tileData)),type=binaryParser.getString();switch(type){case"fixedStep":tile=createFixedStep(binaryParser,nTracks);break;case"variableStep":tile=createVariableStep(binaryParser,nTracks);break;case"bed":case"bedWithName":tile=createBed(binaryParser,nTracks,type);break;default:throw"Unknown tile type: "+type}tiles.push(tile)}}),tiles})},igv.TDFReader.prototype.readTile=function(indexEntry,nTracks){var self=this;return igv.xhr.loadArrayBuffer(self.path,igv.buildOptions(self.config,{range:{start:indexEntry.position,size:indexEntry.size}})).then(function(data){self.compressed&&(data=new Zlib.Inflate(new Uint8Array(data)).decompress().buffer);var binaryParser=new igv.BinaryParser(new DataView(data)),type=binaryParser.getString();switch(type){case"fixedStep":return createFixedStep(binaryParser,nTracks);case"variableStep":return createVariableStep(binaryParser,nTracks);case"bed":case"bedWithName":return createBed(binaryParser,nTracks,type);default:throw"Unknown tile type: "+type}})},igv}(igv||{}),igv=function(igv){function decodeBedTile(tile,chr,bpStart,bpEnd,bpPerPixel,features){var i,nPositions=tile.nPositions,starts=tile.start,ends=tile.end,data=tile.data[0];for(i=0;i<nPositions;i++){var s=starts[i],e=ends[i];if(!(e<bpStart)){if(s>bpEnd)break;features.push({chr:chr,start:s,end:e,value:data[i]})}}}function decodeVaryTile(tile,chr,bpStart,bpEnd,bpPerPixel,features){var i,nPositions=tile.nPositions,starts=tile.start,span=tile.span,data=tile.data[0];for(i=0;i<nPositions;i++){var s=starts[i],e=s+span;if(!(e<bpStart)){if(s>bpEnd)break;features.push({chr:chr,start:s,end:e,value:data[i]})}}}function decodeFixedTile(tile,chr,bpStart,bpEnd,bpPerPixel,features){var i,nPositions=tile.nPositions,s=tile.start,span=tile.span,data=tile.data[0];for(i=0;i<nPositions;i++){var e=s+span;if(s>bpEnd)break;e>=bpStart&&(Number.isNaN(data[i])||features.push({chr:chr,start:s,end:e,value:data[i]})),s=e}}function zoomLevelForScale(chr,bpPerPixel){var chrSize=igv.browser.genome.getChromosome(chr).bpLength;return Math.ceil(Math.log(Math.max(0,chrSize/(700*bpPerPixel)))/log2)}igv.TDFSource=function(config){this.windowFunction=config.windowFunction||"mean",this.reader=new igv.TDFReader(config)},igv.TDFSource.prototype.getFeatures=function(chr,bpStart,bpEnd,bpPerPixel){function getRootGroup(){return self.rootGroup?Promise.resolve(self.rootGroup):self.reader.readRootGroup().then(function(rootGroup){return self.rootGroup=rootGroup,rootGroup})}var self=this,genomicInterval=new igv.GenomicInterval(chr,bpStart,bpEnd);return"all"===chr.toLowerCase()?Promise.resolve([]):(genomicInterval.bpPerPixel=bpPerPixel,getRootGroup().then(function(group){var wf,zoom=zoomLevelForScale(chr,bpPerPixel),queryChr=self.reader.chrAliasTable[chr],maxZoom=self.reader.maxZoom;return void 0===queryChr&&(queryChr=chr),void 0===maxZoom&&(maxZoom=-1),wf=zoom>maxZoom?"raw":self.windowFunction,self.reader.readDataset(queryChr,wf,zoom)}).then(function(dataset){if(null==dataset)return[];var tileWidth=dataset.tileWidth,startTile=Math.floor(bpStart/tileWidth),endTile=Math.floor(bpEnd/tileWidth);return self.reader.readTiles(dataset.tiles.slice(startTile,endTile+1),1)}).then(function(tiles){var features=[];return tiles.forEach(function(tile){switch(tile.type){case"bed":decodeBedTile(tile,chr,bpStart,bpEnd,bpPerPixel,features);break;case"variableStep":decodeVaryTile(tile,chr,bpStart,bpEnd,bpPerPixel,features);break;case"fixedStep":decodeFixedTile(tile,chr,bpStart,bpEnd,bpPerPixel,features);break;default:return void reject("Unknown tile type: "+tile.type)}}),features.sort(function(a,b){return a.start-b.start}),features}))};var log2=Math.log(2);return igv}(igv||{}),igv=function(igv){var knownFileExtensions=new Set(["narrowpeak","broadpeak","peaks","bedgraph","wig","gff3","gff","gtf","aneu","fusionjuncspan","refflat","seg","bed","vcf","bb","bigbed","bw","bigwig","bam","tdf","refgene","genepred","genepredext"]);return igv.getFormat=function(name){return void 0===igv.browser||void 0===igv.browser.formats?void 0:igv.browser.formats[name]},igv.createTrack=function(conf){switch(void 0===conf.type?"unknown_type":conf.type.toLowerCase()){case"gwas":return new igv.GWASTrack(conf);case"annotation":case"genes":case"fusionjuncspan":case"snp":return new igv.FeatureTrack(conf);case"variant":return new igv.VariantTrack(conf);case"alignment":return new igv.BAMTrack(conf);case"data":case"wig":return new igv.WIGTrack(conf);case"sequence":return new igv.SequenceTrack(conf);case"eqtl":return new igv.EqtlTrack(conf);case"seg":return new igv.SegTrack(conf);case"aneu":return new igv.AneuTrack(conf);case"merged":return new igv.MergedTrack(conf);default:return}},igv.inferTrackTypes=function(config){function translateDeprecatedTypes(config){config.featureType&&(config.type=config.type||config.featureType,config.featureType=void 0),"bed"===config.type?(config.type="annotation",config.format=config.format||"bed"):"bam"===config.type?(config.type="alignment",config.format="bam"):"vcf"===config.type?(config.type="variant",config.format="vcf"):"t2d"===config.type?config.type="gwas":"FusionJuncSpan"===config.type&&(config.format="fusionjuncspan")}function inferFileFormat(config){var path,fn,idx,ext;if(config.format)return void(config.format=config.format.toLowerCase());if(path=igv.isFilePath(config.url)?config.url.name:config.url,fn=path.toLowerCase(),fn.endsWith("refgene.txt.gz")||fn.endsWith("refgene.txt"))return void(config.format="refgene");switch(idx=fn.indexOf("?"),idx>0&&(fn=fn.substr(0,idx)),fn.endsWith(".gz")&&(fn=fn.substr(0,fn.length-3)),(fn.endsWith(".txt")||fn.endsWith(".tab"))&&(fn=fn.substr(0,fn.length-4)),idx=fn.lastIndexOf("."),ext=idx<0?fn:fn.substr(idx+1),ext.toLowerCase()){case"bw":config.format="bigwig";break;case"bb":config.format="bigbed";default:knownFileExtensions.has(ext)&&(config.format=ext)}}function inferTrackType(config){if(!config.type&&void 0!==config.format)switch(config.format.toLowerCase()){case"bw":case"bigwig":case"wig":case"bedgraph":case"tdf":config.type="wig";break;case"vcf":config.type="variant";break;case"seg":config.type="seg";break;case"bam":config.type="alignment";break;default:config.type="annotation"}}translateDeprecatedTypes(config),void 0===config.sourceType&&config.url&&(config.sourceType="file"),"file"===config.sourceType&&void 0===config.format&&inferFileFormat(config),void 0===config.type&&inferTrackType(config)},igv.configTrack=function(track,config){track.config=config,track.url=config.url,config.name=config.name||config.label,config.name?track.name=config.name:igv.isFilePath(config.url)?track.name=config.url.name:track.name=config.url,track.id=config.id||track.name,track.order=config.order,track.color=config.color||igv.browser.constants.defaultColor||"rgb(0,0,150)",track.removable=void 0===config.removable||config.removable,track.height=config.height||100,void 0===config.autoHeight&&(config.autoHeight=config.autoheight),track.autoHeight=void 0===config.autoHeight?void 0===config.height:config.autoHeight,track.minHeight=config.minHeight||Math.min(50,track.height),track.maxHeight=config.maxHeight||Math.max(500,track.height),config.visibilityWindow&&(track.visibilityWindow=config.visibilityWindow),void 0===track.type&&(track.type=config.type)},igv.setTrackLabel=function(track,label){var vp=_.first(track.trackView.viewports);track.name=label,vp.$viewport.find(".igv-track-label").html(track.name),track.trackView&&track.trackView.repaint()},igv.inferIndexPath=function(url,extension){var idx;if(url instanceof File)throw new Error("Cannot infer an index path for a local File. Please select explicitly");return url.includes("?")?(idx=url.indexOf("?"),url.substring(0,idx)+"."+extension+url.substring(idx)):url+"."+extension},igv.paintAxis=function(ctx,pixelWidth,pixelHeight){function prettyPrint(number){return 0===number?"0":Math.abs(number)>=10?number.toFixed():Math.abs(number)>=1?number.toFixed(1):number.toFixed(2)}var x1,x2,y1,y2,a,b,reference,shim,font={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};void 0!==this.dataRange&&void 0!==this.dataRange.max&&void 0!==this.dataRange.min&&(igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"}),reference=.95*pixelWidth,x1=reference-8,x2=reference,shim=.01,y1=y2=shim*pixelHeight,a={x:x2,y:y1},igv.graphics.strokeLine(ctx,x1,y1,x2,y2,font),igv.graphics.fillText(ctx,prettyPrint(this.dataRange.max),x1+4,y1+12,font),y1=y2=(1-shim)*pixelHeight,b={x:x2,y:y1},igv.graphics.strokeLine(ctx,x1,y1,x2,y2,font),igv.graphics.fillText(ctx,prettyPrint(this.dataRange.min),x1+4,y1-4,font),igv.graphics.strokeLine(ctx,a.x,a.y,b.x,b.y,font))},igv.trackPopupMenuItemList=function(popover,viewport,genomicLocation,xOffset,yOffset){var config,menuItems;return config={popover:popover,viewport:viewport,genomicState:viewport.genomicState,genomicLocation:genomicLocation,x:xOffset,y:yOffset},menuItems=[],"function"==typeof viewport.trackView.track.popupMenuItemList&&(menuItems=igv.trackMenuItemListHelper(viewport.trackView.track.popupMenuItemList(config))),menuItems},igv.trackMenuItemList=function(popover,trackView){var all,menuItems=[];return"sequence"!==trackView.track.config.type&&(menuItems.push(igv.trackMenuItem(popover,trackView,"Set track name",function(){return"Track Name"},trackView.track.name,function(){var value;value=igv.dialog.$dialogInput.val().trim(),value=""===value||void 0===value?"untitled":value,igv.setTrackLabel(trackView.track,value),trackView.update()},void 0)),menuItems.push(igv.trackMenuItem(popover,trackView,"Set track height",function(){return"Track Height"},trackView.trackDiv.clientHeight,function(){var number=parseFloat(igv.dialog.$dialogInput.val(),10);void 0!==number&&(void 0!==trackView.track.minHeight&&trackView.track.minHeight>number&&(trackView.track.minHeight=number),void 0!==trackView.track.maxHeight&&trackView.track.maxHeight<number&&(trackView.track.minHeight=number),trackView.setTrackHeight(number),trackView.track.autoHeight=!1)},void 0))),igv.doProvideColoSwatchWidget(trackView.track)&&menuItems.push(igv.colorPickerMenuItem(popover,trackView)),all=[],trackView.track.menuItemList&&(all=menuItems.concat(igv.trackMenuItemListHelper(trackView.track.menuItemList(popover)))),!1!==trackView.track.removable&&all.push(igv.trackMenuItem(popover,trackView,"Remove track",function(){return'<div class="igv-dialog-label-centered">Remove '+trackView.track.name+"</div>"},void 0,function(){popover.hide(),trackView.browser.removeTrack(trackView.track)},!0)),all},igv.doProvideColoSwatchWidget=function(track){return track instanceof igv.BAMTrack||track instanceof igv.FeatureTrack||track instanceof igv.VariantTrack||track instanceof igv.WIGTrack},igv.trackMenuItemListHelper=function(itemList){var list=[];return _.size(itemList)>0&&(list=_.map(itemList,function(item,i){var $e;return item.name?($e=$("<div>"),$e.text(item.name)):$e=item.object,0===i&&$e.addClass("igv-track-menu-border-top"),item.click&&$e.click(item.click),{object:$e,init:item.init||void 0}})),list},igv.trackMenuItem=function(popover,trackView,menuItemLabel,dialogLabelHandler,dialogInputValue,dialogClickHandler,doAddTopBorder){var $e,clickHandler;return $e=$("<div>"),!0===doAddTopBorder&&$e.addClass("igv-track-menu-border-top"),$e.text(menuItemLabel),clickHandler=function(){var $element=$(trackView.trackDiv);igv.dialog.configure(dialogLabelHandler,dialogInputValue,dialogClickHandler,void 0,void 0),igv.dialog.show($element),popover.hide()},$e.click(clickHandler),{object:$e,init:void 0}},igv.dataRangeMenuItem=function(popover,trackView){var $e,clickHandler;return $e=$("<div>"),$e.text("Set data range"),clickHandler=function(){igv.dataRangeDialog.configureWithTrackView(trackView),igv.dataRangeDialog.show(),popover.hide()},$e.click(clickHandler),{object:$e,init:void 0}},igv.colorPickerMenuItem=function(popover,trackView){var $e;return $e=$("<div>"),$e.text("Set track color"),$e.click(function(){trackView.$colorpicker_container.toggle(),popover.hide()}),{object:$e}},igv}(igv||{}),igv=function(igv){function indexFilesMissingAssociatedDataFilesAndWarningBlurb(dataFiles,indexFiles){var keysMissing,filenames,blurb;return keysMissing=[],_.each(indexFiles,function(indexFile,key){void 0===dataFiles[key]&&keysMissing.push(key)}),blurb="",_.size(keysMissing)>0?(filenames=_.map(keysMissing,function(key){return indexFiles[key].name}),blurb=filenames.join(" and "),blurb+=" require an associated data file.",{missing:keysMissing,blurb:blurb}):void 0}function dataFilesMissingAssociatedIndexFilesAndWarningBlurb(dataFiles,indexFiles){var keysMissing,filenames,blurb;return keysMissing=[],_.each(dataFiles,function(dataFile,key){var indexFileIsPresent=void 0!==indexFiles;!1===igv.TrackFileLoad.keyToIndexExtension[dataFile.indexExtensionLookup].optional&&indexFileIsPresent&&void 0===indexFiles[key]&&keysMissing.push(key)}),blurb="",_.size(keysMissing)>0?(filenames=_.map(keysMissing,function(key){return dataFiles[key].file.name}),blurb=filenames.join(" and "),blurb+=" require an associated index file.",{missing:keysMissing,blurb:blurb}):void 0}function extractIndexFiles(files){var result,indexFiles;return result=_.filter(files,function(f){return igv.TrackFileLoad.isIndexFile(f)}),_.size(result)>0?(indexFiles={},_.each(result,function(f){var parts,key;parts=f.name.slice(0,-4).split("."),_.size(parts)>1?(parts.pop(),key=parts.join(".")):key=parts,indexFiles[key]=f}),indexFiles):void 0}function extractDataFiles(files){var result,dataFiles;return result=_.filter(files,function(f){return!igv.TrackFileLoad.isIndexFile(f)}),_.size(result)>0?(dataFiles={},_.each(result,function(f){var parts,key,extension,lookupKey;parts=f.name.split("."),"gz"===_.last(parts)&&parts.pop(),parts.pop(),key=parts.join("."),extension=igv.getExtension({url:f}),lookupKey=_.contains(_.keys(igv.TrackFileLoad.keyToIndexExtension),extension)?extension:"any",dataFiles[key]={file:f,extension:extension,indexExtensionLookup:lookupKey}}),dataFiles):void 0}function drag_drop_surface(trackFileLoader,$parent){function blurb($parent,phrase,input_id,label_id){var $label,$choose_file;$label=$("<label>"),$parent.append($label),$label.attr("for",input_id),$label.attr("id",label_id),$choose_file=$("<strong>"),$choose_file.text(phrase),$label.append($choose_file),$e=$('<span class="igv-drag-drop-surface-blurb">'),$e.text(" or drop file(s) here"),$label.append($e)}var $e,$ok,$cancel;trackFileLoader.$drag_drop_surface=$('<div class="igv-drag-drop-surface">'),$parent.append(trackFileLoader.$drag_drop_surface),trackFileLoader.$drag_drop_surface.on("drag dragstart dragend dragover dragenter dragleave drop",function(e){e.preventDefault(),e.stopPropagation()}).on("dragover dragenter",function(){$(".igv-drag-drop-container").addClass("is-dragover")}).on("dragleave dragend drop",function(){$(".igv-drag-drop-container").removeClass("is-dragover")}).on("drop",function(e){trackFileLoader.loadLocalFiles(e.originalEvent.dataTransfer.files)}),trackFileLoader.$file_input_container=$('<div class="igv-drag-drop-file-input">'),trackFileLoader.$drag_drop_surface.append(trackFileLoader.$file_input_container),trackFileLoader.$file_input=$('<input id="igv-track-file-input" class="igv-track-file-input-css" type="file" name="files[]" data-multiple-caption="{count} files selected" multiple="">'),trackFileLoader.$file_input_container.append(trackFileLoader.$file_input),trackFileLoader.$file_input.on("change",function(e){trackFileLoader.loadLocalFiles(e.target.files)}),blurb(trackFileLoader.$file_input_container,"Choose file(s)","igv-track-file-input","load-file-blurb"),trackFileLoader.$file_input_blurb=trackFileLoader.$file_input_container.find("#load-file-blurb"),$ok=$('<div id="file_input_ok" class="igv-drag-drop-ok">'),trackFileLoader.$drag_drop_surface.append($ok),$ok.text("ok"),$ok.hide(),$ok.on("click",function(e){var extension;extension=igv.getExtension({url:trackFileLoader.file}),void 0===trackFileLoader.indexFile&&!1===igv.TrackFileLoad.keyToIndexExtension[extension].optional?trackFileLoader.warnWithMessage("ERROR. "+extension+" files require an index file."):void 0===trackFileLoader.indexFile&&!0===igv.TrackFileLoad.keyToIndexExtension[extension].optional?(igv.browser.loadTrack({url:trackFileLoader.file,indexURL:void 0,indexed:!1}),doDismiss(trackFileLoader)):(igv.browser.loadTrack({url:trackFileLoader.file,indexURL:trackFileLoader.indexFile}),doDismiss(trackFileLoader))}),$cancel=$('<div id="file_input_cancel" class="igv-drag-drop-cancel">'),trackFileLoader.$drag_drop_surface.append($cancel),$cancel.text("cancel"),$cancel.hide(),$cancel.on("click",function(e){doDismiss(trackFileLoader)}),url_input_container(trackFileLoader,trackFileLoader.$drag_drop_surface)}function createWarning(){var $warning,$e,$fa;return $warning=$('<div class="igv-drag-drop-warning">'),$e=$('<div id="warning-message">'),$warning.append($e),$e=$('<div id="warning-dismiss">'),$warning.append($e),$fa=$('<i class="fa fa-times-circle">'),$e.append($fa),$fa.on("click",function(){$warning.hide()}),$warning.hide(),$warning}function url_input_container(trackFileLoader,$parent){var $ok,$cancel;trackFileLoader.$url_input_container=$('<div class="igv-drag-and-drop-url-input-container">'),$parent.append(trackFileLoader.$url_input_container),trackFileLoader.$or=$("<div>"),trackFileLoader.$url_input_container.append(trackFileLoader.$or),trackFileLoader.$or.text("or"),trackFileLoader.$url_input=$('<input class="igv-drag-and-drop-url-input" placeholder="enter data file URL">'),trackFileLoader.$url_input_container.append(trackFileLoader.$url_input),trackFileLoader.$url_input.on("change",function(e){var _url;_url=$(this).val(),igv.TrackFileLoad.isIndexFile(_url)?(trackFileLoader.warnWithMessage("Error. Must enter data URL."),$(this).val(void 0)):!1===igv.TrackFileLoad.isIndexable(_url)?(igv.browser.loadTrack({url:_url,indexed:!1}),$(this).val(void 0),doDismiss(trackFileLoader)):(trackFileLoader.$file_input_container.hide(),trackFileLoader.$or.hide(),trackFileLoader.$url_input_feedback.text(_url.split("/").pop()),trackFileLoader.$url_input_feedback.show(),$(this).hide(),$ok.show(),$cancel.show())}),trackFileLoader.$url_input_feedback=$('<div class="igv-drag-and-drop-url-input-feedback" >'),trackFileLoader.$url_input_container.append(trackFileLoader.$url_input_feedback),trackFileLoader.$url_input_feedback.hide(),trackFileLoader.$index_url_input=$('<input class="igv-drag-and-drop-url-input" placeholder="enter associated index file URL">'),trackFileLoader.$url_input_container.append(trackFileLoader.$index_url_input),trackFileLoader.$index_url_input.on("change",function(e){var _url;_url=$(this).val(),!1===igv.TrackFileLoad.isIndexFile(_url)?(trackFileLoader.warnWithMessage("ERROR. Must enter index URL."),$(this).val(void 0)):(trackFileLoader.$index_url_input_feedback.text(_url.split("/").pop()),trackFileLoader.$index_url_input_feedback.show(),$(this).hide())}),trackFileLoader.$index_url_input_feedback=$('<div class="igv-drag-and-drop-url-input-feedback" >'),trackFileLoader.$url_input_container.append(trackFileLoader.$index_url_input_feedback),trackFileLoader.$index_url_input_feedback.hide(),$ok=$('<div id="url_input_ok" class="igv-drag-drop-ok">'),trackFileLoader.$url_input_container.append($ok),$ok.text("ok"),$ok.hide(),$ok.on("click",function(e){var _url,_indexURL,extension,key;_url=""===trackFileLoader.$url_input.val()?void 0:trackFileLoader.$url_input.val(),_indexURL=""===trackFileLoader.$index_url_input.val()?void 0:trackFileLoader.$index_url_input.val(),extension=igv.getExtension({url:_url}),key=igv.TrackFileLoad.keyToIndexExtension[extension]?extension:"any",void 0===_indexURL&&!1===igv.TrackFileLoad.keyToIndexExtension[key].optional?trackFileLoader.warnWithMessage("ERROR. A "+extension+" data URL requires an associated index URL."):void 0===_url?trackFileLoader.warnWithMessage("ERROR. A data URL must be entered."):void 0===_indexURL&&!0===igv.TrackFileLoad.keyToIndexExtension[key].optional?(igv.browser.loadTrack({url:_url,indexURL:void 0,indexed:!1}),doDismiss(trackFileLoader)):(igv.browser.loadTrack({url:_url,indexURL:_indexURL}),doDismiss(trackFileLoader))}),$cancel=$('<div id="url_input_cancel" class="igv-drag-drop-cancel">'),trackFileLoader.$url_input_container.append($cancel),$cancel.text("cancel"),$cancel.hide(),$cancel.on("click",function(e){doDismiss(trackFileLoader)})}function doDismiss(trackFileLoader){$("#file_input_ok").hide(),$("#file_input_cancel").hide(),trackFileLoader.$file_input.show(),trackFileLoader.$file_input_blurb.show(),trackFileLoader.$file_input_container.show(),trackFileLoader.file=void 0,trackFileLoader.indexFile=void 0,trackFileLoader.$or.show(),trackFileLoader.$url_input_container.show(),$("#url_input_ok").hide(),$("#url_input_cancel").hide(),trackFileLoader.$url_input.show(),trackFileLoader.$url_input.val(void 0),trackFileLoader.$url_input_feedback.hide(),trackFileLoader.$index_url_input.show(),trackFileLoader.$index_url_input.val(void 0),trackFileLoader.$index_url_input_feedback.hide(),trackFileLoader.$warning.hide(),trackFileLoader.$container.hide()}function doPresent(trackFileLoader){trackFileLoader.$container.show()}return igv.TrackFileLoad=function(){function dismissButton(){function fa_mousein(){$fa.removeClass("fa-times"),$fa.addClass("fa-times-circle")}function fa_mouseout(){$fa.removeClass("fa-times-circle"),$fa.addClass("fa-times")}var $container,$fa;return $fa=$('<i class="fa">'),$fa.hover(fa_mousein,fa_mouseout),$fa.on("click",function(){fa_mouseout(),doDismiss(self)}),$container=$('<div class="igv-drag-and-drop-close-container">'),$container.append($fa),fa_mouseout(),$container}var self=this;this.$container=$('<div class="igv-drag-drop-container">'),drag_drop_surface(this,this.$container),this.$warning=createWarning(),this.$container.append(this.$warning),this.$container.append($('<div class="igv-drag-drop-shim">')),this.$container.append(dismissButton()),this.$presentationButton=$('<div class="igv-drag-and-drop-presentation-button">'),this.$presentationButton.text("Load Track"),this.$presentationButton.on("click",function(){self.$container.is(":visible")?doDismiss(self):doPresent(self)})},igv.TrackFileLoad.prototype.warnWithMessage=function(message){this.$warning.find("#warning-message").text(message),this.$warning.show()},igv.TrackFileLoad.keyToIndexExtension={bam:{extension:"bai",optional:!1},any:{extension:"idx",optional:!0},gz:{extension:"tbi",optional:!0}},igv.TrackFileLoad.indexExtensionToKey=_.invert(_.mapObject(igv.TrackFileLoad.keyToIndexExtension,function(val){return val.extension})),igv.TrackFileLoad.isIndexFile=function(fileOrURL){var extension;return extension=igv.getExtension({url:fileOrURL}),_.contains(_.keys(igv.TrackFileLoad.indexExtensionToKey),extension)},igv.TrackFileLoad.isIndexable=function(fileOrURL){var extension;return!igv.TrackFileLoad.isIndexFile(fileOrURL)&&("wig"!==(extension=igv.getExtension({url:fileOrURL}))&&"seg"!==extension)},igv.TrackFileLoad.prototype.loadLocalFiles=function(files){var dataFiles,indexFiles,configurations,ifMissingDf,dfMissingIf,dataF,indexF,keysMissing,keysPresent,filenames,str,blurb_0,blurb_1;dataFiles=extractDataFiles(files),indexFiles=extractIndexFiles(files),void 0===dataFiles&&void 0===indexFiles?this.warnWithMessage("ERROR: No data or index file(s) provided."):void 0===indexFiles?(keysMissing=[],_.each(dataFiles,function(dataFile,key){!1===igv.TrackFileLoad.keyToIndexExtension[dataFile.indexExtensionLookup].optional&&keysMissing.push(key)}),keysPresent=_.difference(_.keys(dataFiles),keysMissing),dataF=_.size(keysPresent)>0?_.pick(dataFiles,keysPresent):void 0,dataF&&(configurations=_.map(_.pluck(dataF,"file"),function(f){return{url:f,indexed:!1}}),igv.browser.loadTracksWithConfigList(configurations)),_.size(keysMissing)>0?(filenames=_.map(keysMissing,function(key){return dataFiles[key].file.name}),str=filenames.join(" and "),this.warnWithMessage("ERROR: "+str+" require an associated index file.")):doDismiss(this)):void 0===dataFiles?(blurb_0=_.map(indexFiles,function(m){return m.name}).join(" and "),blurb_0+=" require an associated data file.",this.warnWithMessage("ERROR: "+blurb_0)):(dfMissingIf=dataFilesMissingAssociatedIndexFilesAndWarningBlurb(dataFiles,indexFiles),ifMissingDf=indexFilesMissingAssociatedDataFilesAndWarningBlurb(dataFiles,indexFiles),str=void 0,blurb_0=dfMissingIf?dfMissingIf.blurb:void 0,blurb_1=ifMissingDf?ifMissingDf.blurb:void 0,blurb_0&&blurb_1?str=blurb_0+" "+blurb_1:blurb_0?str=blurb_0:blurb_1&&(str=blurb_1),keysPresent=dfMissingIf?_.difference(_.keys(dataFiles),dfMissingIf.missing):_.keys(dataFiles),dataF=_.size(keysPresent)>0?_.pick(dataFiles,keysPresent):void 0,keysPresent=ifMissingDf?_.difference(_.keys(indexFiles),ifMissingDf.missing):_.keys(indexFiles),indexF=_.size(keysPresent)>0?_.pick(indexFiles,keysPresent):void 0,dataF&&(configurations=_.map(_.keys(dataF),function(key){return indexF&&indexF[key]?{url:dataF[key].file,indexURL:indexF[key]}:{url:dataF[key].file,indexed:!1}}),igv.browser.loadTracksWithConfigList(configurations)),str?this.warnWithMessage("ERROR: "+str):doDismiss(this))},igv}(igv||{}),igv=function(igv){function maxContentHeightWithViewports(viewports){var height=0;return viewports.forEach(function(viewport){var hgt=$(viewport.contentDiv).height();height=Math.max(hgt,height)}),height}return igv.TrackView=function(browser,$container,track){var element,$track,config,self=this;this.browser=browser,$track=$('<div class="igv-track-div">'),this.trackDiv=$track.get(0),$container.append($track),this.track=track,track.trackView=this,this.track instanceof igv.RulerTrack&&(this.trackDiv.dataset.rulerTrack="rulerTrack"),track.height&&(this.trackDiv.style.height=track.height+"px"),this.appendLeftHandGutterDivToTrackDiv($(this.trackDiv)),this.$viewportContainer=$('<div class="igv-viewport-container igv-viewport-container-shim">'),$(this.trackDiv).append(this.$viewportContainer),this.viewports=[],browser.genomicStateList.forEach(function(genomicState,i){self.viewports.push(new igv.Viewport(self,self.$viewportContainer,genomicState)),self.track instanceof igv.RulerTrack&&self.track.createRulerSweeper(self.viewports[i],self.viewports[i].$viewport,$(self.viewports[i].contentDiv),genomicState)}),this.configureViewportContainer(this.$viewportContainer,this.viewports),element=this.createRightHandGutter(),element&&$(this.trackDiv).append(element),this.attachDragWidget(),igv.doProvideColoSwatchWidget(this.track)&&(config={width:698,classes:["igv-position-absolute"]},this.$colorpicker_container=igv.genericContainer($track,config,function(){self.$colorpicker_container.toggle()}),igv.createColorSwatchSelector(this.$colorpicker_container,function(rgb){self.setColor(rgb)}),this.$colorpicker_container.draggable({handle:this.$colorpicker_container.find("div:first-child").get(0)}),this.$colorpicker_container.hide())},igv.TrackView.prototype.configureViewportContainer=function($viewportContainer,viewports){return"hidden"===$viewportContainer.css("overflow-y")&&(this.scrollbar=new igv.TrackScrollbar($viewportContainer,viewports),$viewportContainer.append(this.scrollbar.$outerScroll)),$viewportContainer},igv.TrackScrollbar=function($viewportContainer,viewports){function mouseMove(event){event.preventDefault(),moveScrollerTo(event.pageY-offY),event.stopPropagation()}function mouseUp(event){$(window).off("mousemove .igv",null,mouseMove),$(window).off("mouseup .igv",null,mouseUp)}function moveScrollerTo(y){var newTop,contentTop,contentDivHeight,outerScrollHeight,innerScrollHeight;outerScrollHeight=self.$outerScroll.height(),innerScrollHeight=self.$innerScroll.height(),newTop=Math.min(Math.max(0,y),outerScrollHeight-innerScrollHeight),contentDivHeight=maxContentHeightWithViewports(viewports),contentTop=-Math.round(newTop*(contentDivHeight/self.$viewportContainer.height())),self.$innerScroll.css("top",newTop+"px"),viewports.forEach(function(viewport){$(viewport.contentDiv).css("top",contentTop+"px")})}var offY,self=this;maxContentHeightWithViewports(viewports),this.$outerScroll=$('<div class="igv-scrollbar-outer-div">'),this.$innerScroll=$("<div>"),this.$outerScroll.append(this.$innerScroll),this.$viewportContainer=$viewportContainer,this.viewports=viewports,this.$innerScroll.mousedown(function(event){event.preventDefault(),offY=event.pageY-$(this).position().top,$(window).on("mousemove .igv",null,null,mouseMove),$(window).on("mouseup .igv",null,null,mouseUp),event.stopPropagation()}),this.$innerScroll.click(function(event){event.stopPropagation()}),this.$outerScroll.click(function(event){moveScrollerTo(event.offsetY-self.$innerScroll.height()/2),event.stopPropagation()})},igv.TrackScrollbar.prototype.update=function(){var viewportContainerHeight,contentHeight,newInnerHeight;viewportContainerHeight=this.$viewportContainer.height(),contentHeight=maxContentHeightWithViewports(this.viewports),newInnerHeight=Math.round(viewportContainerHeight/contentHeight*viewportContainerHeight),contentHeight>viewportContainerHeight?(this.$outerScroll.show(),this.$innerScroll.height(newInnerHeight)):this.$outerScroll.hide()},igv.TrackView.prototype.attachDragWidget=function(){var self=this;self.$trackDragScrim=$('<div class="igv-track-drag-scrim">'),self.$viewportContainer.append(self.$trackDragScrim),self.$trackDragScrim.hide(),self.$trackManipulationHandle=$('<div class="igv-track-manipulation-handle">'),$(self.trackDiv).append(self.$trackManipulationHandle),self.$trackManipulationHandle.mousedown(function(e){e.preventDefault(),self.isMouseDown=!0,igv.browser.dragTrackView=self}),self.$trackManipulationHandle.mouseup(function(e){self.isMouseDown=void 0}),self.$trackManipulationHandle.mouseenter(function(e){self.isMouseIn=!0,igv.browser.dragTargetTrackView=self,void 0===igv.browser.dragTrackView?self.$trackDragScrim.show():self===igv.browser.dragTrackView&&self.$trackDragScrim.show(),igv.browser.dragTargetTrackView&&igv.browser.dragTrackView&&igv.browser.dragTargetTrackView!==igv.browser.dragTrackView&&(igv.browser.dragTargetTrackView.track.order<igv.browser.dragTrackView.track.order?(igv.browser.dragTrackView.track.order=igv.browser.dragTargetTrackView.track.order,igv.browser.dragTargetTrackView.track.order=1+igv.browser.dragTrackView.track.order):(igv.browser.dragTrackView.track.order=igv.browser.dragTargetTrackView.track.order,igv.browser.dragTargetTrackView.track.order=igv.browser.dragTrackView.track.order-1),igv.browser.reorderTracks())}),self.$trackManipulationHandle.mouseleave(function(e){self.isMouseIn=void 0,igv.browser.dragTargetTrackView=void 0,self!==igv.browser.dragTrackView&&self.$trackDragScrim.hide()})},igv.TrackView.prototype.appendLeftHandGutterDivToTrackDiv=function($track){var $leftHandGutter,$canvas,w,h,self=this;this.track.paintAxis&&($leftHandGutter=$('<div class="igv-left-hand-gutter">'),$track.append($leftHandGutter[0]),$canvas=$('<canvas class ="igv-track-control-canvas">'),w=$leftHandGutter.outerWidth(),h=$leftHandGutter.outerHeight(),$canvas.attr("width",w),$canvas.attr("height",h),$leftHandGutter.append($canvas[0]),this.controlCanvas=$canvas[0],this.controlCtx=this.controlCanvas.getContext("2d"),this.track.dataRange&&($leftHandGutter.click(function(e){igv.dataRangeDialog.configureWithTrackView(self),igv.dataRangeDialog.show()}),$leftHandGutter.addClass("igv-clickable")),this.leftHandGutter=$leftHandGutter[0])},igv.TrackView.prototype.createRightHandGutter=function(){var $gearButton,self=this;if(!this.track.ignoreTrackMenu)return $gearButton=$('<i class="fa fa-gear">'),$gearButton.click(function(e){igv.popover.presentTrackGearMenu(e.pageX,e.pageY,self)}),this.rightHandGutter=$('<div class="igv-right-hand-gutter">')[0],$(this.rightHandGutter).append($gearButton),this.rightHandGutter},igv.TrackView.prototype.setContentHeightForViewport=function(viewport,height){viewport.setContentHeight(height),this.scrollbar&&this.scrollbar.update()},igv.TrackView.prototype.dataRange=function(){return this.track.dataRange?this.track.dataRange:void 0},igv.TrackView.prototype.setDataRange=function(min,max,autoscale){void 0!==min&&(this.track.dataRange.min=min),void 0!==max&&(this.track.dataRange.max=max),this.track.autoscale=autoscale,this.update()},igv.TrackView.prototype.setColor=function(color){this.track.color=color,this.update()},igv.TrackView.prototype.setTrackHeight=function(newHeight,update){var trackHeightStr;this.track.minHeight&&(newHeight=Math.max(this.track.minHeight,newHeight)),this.track.maxHeight&&(newHeight=Math.min(this.track.maxHeight,newHeight)),trackHeightStr=newHeight+"px",this.track.height=newHeight,$(this.trackDiv).height(newHeight),this.track.paintAxis&&(this.controlCanvas.style.height=trackHeightStr,this.controlCanvas.setAttribute("height",$(this.trackDiv).height())),void 0!==update&&!0!==update||this.update()},igv.TrackView.prototype.isLoading=function(){var anyViewportIsLoading;return anyViewportIsLoading=!1,this.viewports.forEach(function(v){!1===anyViewportIsLoading&&(anyViewportIsLoading=v.isLoading())}),anyViewportIsLoading},igv.TrackView.prototype.resize=function(){this.viewports.forEach(function(viewport){viewport.resize()}),this.scrollbar&&this.scrollbar.update()},igv.TrackView.prototype.update=function(){this.viewports.forEach(function(viewport){viewport.update()}),this.scrollbar&&this.scrollbar.update()},igv.TrackView.prototype.repaint=function(){this.viewports.forEach(function(viewport){viewport.repaint()})},igv}(igv||{}),igv=function(igv){return igv.AlertDialog=function($parent,id){var $header,$headerBlurb,self=this;this.$parent=$parent,this.$container=$("<div>",{id:id,class:"igv-grid-container-alert-dialog"}),$parent.append(this.$container),$header=$('<div class="igv-grid-header">'),$headerBlurb=$('<div class="igv-grid-header-blurb">'),$header.append($headerBlurb),igv.attachDialogCloseHandlerWithParent($header,function(){self.hide()}),this.$container.append($header),this.$container.append(this.alertTextContainer()),this.$container.append(this.rowOfOk())},igv.AlertDialog.prototype.alertTextContainer=function(){var $rowContainer;return $rowContainer=$('<div class="igv-grid-rect">'),this.$dialogLabel=$("<div>",{class:"igv-col igv-col-4-4 igv-alert-dialog-text"}),$rowContainer.append(this.$dialogLabel),$rowContainer},igv.AlertDialog.prototype.rowOfOk=function(){var $rowContainer,$col,self=this;return $rowContainer=$('<div class="igv-grid-rect">'),$col=$('<div class="igv-col igv-col-1-4">'),$rowContainer.append($col),$col=$('<div class="igv-col igv-col-2-4">'),this.$ok=$('<div class="igv-col-filler-ok-button">'),this.$ok.text("OK"),this.$ok.unbind(),this.$ok.click(function(){self.hide()}),$col.append(this.$ok),$rowContainer.append($col),$rowContainer},igv.AlertDialog.prototype.hide=function(){this.$container.hasClass("igv-grid-container-dialog")&&this.$container.offset({left:0,top:0}),this.$container.hide()},igv.AlertDialog.prototype.show=function($alternativeParent){var obj,$p;$p=$alternativeParent||this.$parent,obj={left:($p.width()-this.$container.width())/2,top:($p.height()-this.$container.height())/2},this.$container.css(obj),this.$container.show()},igv}(igv||{}),igv=function(igv){return igv.CenterGuide=function($parent,config){var self=this;this.$container=$('<div class="igv-center-guide igv-center-guide-thin">'),$parent.append(this.$container),!0===config.showCenterGuide?this.$container.show():this.$container.hide(),this.$centerGuideToggle=igv.makeToggleButton("center line","center line","showCenterGuide",function(){return self.$container},function(){self.repaint()})},igv.CenterGuide.prototype.repaint=function(){var ppb,trackXY,trackHalfWidth,width,left,ls,ws,center,rect,referenceFrame;void 0!==igv.browser.genomicStateList&&(referenceFrame=igv.browser.genomicStateList[0].referenceFrame,ppb=1/referenceFrame.bpPerPixel,ppb>1?(rect=igv.browser.syntheticViewportContainerBBox(),trackXY=rect.position,trackHalfWidth=.5*rect.width,center=trackXY.left+trackHalfWidth,width=referenceFrame.toPixels(1),left=center-.5*width,ls=Math.round(left).toString()+"px",ws=Math.round(width).toString()+"px",this.$container.css({left:ls,width:ws}),this.$container.removeClass("igv-center-guide-thin"),this.$container.addClass("igv-center-guide-wide")):(this.$container.css({left:"50%",width:"1px"}),this.$container.removeClass("igv-center-guide-wide"),this.$container.addClass("igv-center-guide-thin")))},igv.CenterGuide.prototype.resize=function(){this.repaint()},igv}(igv||{}),igv=function(igv){return igv.ChromosomeSelectWidget=function(browser,$parent){this.$container=$("<div>",{class:"igv-chromosome-select-widget-container"}),$parent.append(this.$container),this.$select=$("<select>",{name:"chromosome-select-widget"}),this.$container.append(this.$select),this.$select.on("change",function(){browser.search($(this).val())})},igv.ChromosomeSelectWidget.prototype.update=function(genome){var list,self=this;this.$select.empty(),list=genome.chromosomeNames.slice(),list.unshift("all"),_.each(list,function(name){var $o;$o=$("<option>",{value:name}),self.$select.append($o),$o.text(name)})},igv}(igv||{}),igv=function(igv){return igv.DataRangeDialog=function($parent){function doOKCancel(){var rowContainer,row,column,columnFiller;return row=$('<div class="igv-grid-dialog">'),column=$('<div class="igv-col igv-col-1-8">'),row.append(column),column=$('<div class="igv-col igv-col-3-8">'),self.ok=$('<div class="igv-col-filler-ok-button">'),self.ok.text("OK"),column.append(self.ok),row.append(column),column=$('<div class="igv-col igv-col-3-8">'),columnFiller=$('<div class="igv-col-filler-cancel-button">'),columnFiller.text("Cancel"),columnFiller.click(function(){self.hide()}),column.append(columnFiller),row.append(column),column=$('<div class="igv-col igv-col-1-8">'),row.append(column),rowContainer=$('<div class="igv-grid-rect">'),rowContainer.append(row),rowContainer}function doLayout(){var row,column,rowContainer=$('<div class="igv-grid-rect">');return row=$('<div class="igv-grid-dialog">'),column=$('<div class="spacer10">'),row.append(column),column=$('<div class="igv-col igv-col-3-8">'),self.minLabel=$('<div class="igv-data-range-input-label">'),self.minLabel.text("Minimum"),column.append(self.minLabel),row.append(column),column=$('<div class="igv-col igv-col-3-8">'),self.minInput=$('<input class="igv-data-range-input" type="text" value="125">'),column.append(self.minInput),row.append(column),rowContainer.append(row),row=$('<div class="igv-grid-dialog">'),column=$('<div class="igv-col igv-col-3-8">'),self.maxLabel=$('<div class="igv-data-range-input-label">'),self.maxLabel.text("Maximum"),column.append(self.maxLabel),row.append(column),column=$('<div class="igv-col igv-col-3-8">'),self.maxInput=$('<input class="igv-data-range-input" type="text" value="250">'),column.append(self.maxInput),row.append(column),rowContainer.append(row),rowContainer}var self=this;this.container=$('<div class="igv-grid-container-dialog">'),$parent.append(this.container),this.header=$('<div class="igv-grid-header">'),this.container.append(this.header),this.headerBlurb=$('<div class="igv-grid-header-blurb">'),this.header.append(this.headerBlurb),igv.attachDialogCloseHandlerWithParent(this.header,function(){self.hide()}),self.container.append(doLayout()),self.container.append(doOKCancel()),this.container.draggable({handle:this.header.get(0)})},igv.DataRangeDialog.prototype.configureWithTrackView=function(trackView){var dataRange,min,max,self=this;this.trackView=trackView,dataRange=this.trackView.dataRange(),dataRange?(min=dataRange.min,max=dataRange.max):(min=0,max=100),this.minInput.val(min),this.maxInput.val(max),this.ok.unbind(),this.ok.click(function(){min=parseFloat(self.minInput.val()),max=parseFloat(self.maxInput.val()),isNaN(min)||isNaN(max)?igv.presentAlert("Must input numeric values",void 0):(!0===trackView.track.autoscale&&$("#datarange-autoscale").trigger("click"),trackView.setDataRange(min,max,!1)),self.hide()})},igv.DataRangeDialog.prototype.hide=function(){this.container.offset({left:0,top:0}),this.container.hide()},igv.DataRangeDialog.prototype.show=function(){var body_scrolltop=$("body").scrollTop(),track_origin=$(this.trackView.trackDiv).offset(),track_size={width:$(this.trackView.trackDiv).outerWidth(),height:$(this.trackView.trackDiv).outerHeight()};this.container.show(),this.container.offset({left:track_size.width-300,top:track_origin.top+body_scrolltop}),this.container.offset(igv.constrainBBox(this.container,$(igv.browser.trackContainerDiv)))},igv}(igv||{}),igv=function(igv){return igv.Dialog=function($parent,constructorHelper){var $header,$headerBlurb,self=this;this.$container=$('<div class="igv-grid-container-dialog">'),$parent.append(this.$container[0]),$header=$('<div class="igv-grid-header">'),$headerBlurb=$('<div class="igv-grid-header-blurb">'),$header.append($headerBlurb[0]),this.$container.append($header[0]),constructorHelper(this),this.$container.draggable({handle:$header.get(0)}),igv.attachDialogCloseHandlerWithParent($header,function(){self.hide()})},igv.Dialog.dialogConstructor=function(dialog){dialog.$container.append(dialog.rowOfLabel()[0]),dialog.$container.append(dialog.rowOfInput()[0]),dialog.$container.append(dialog.rowOfOkCancel()[0])},igv.Dialog.prototype.rowOfOk=function(){var $rowContainer,$row,$column,$columnFiller;return $row=$('<div class="igv-grid-dialog">'),$column=$('<div class="igv-col igv-col-1-4">'),$row.append($column[0]),$column=$('<div class="igv-col igv-col-2-4">'),$columnFiller=$('<div class="igv-col-filler-ok-button">'),$columnFiller.text("OK"),this.$ok=$columnFiller,$column.append($columnFiller[0]),$row.append($column[0]),$rowContainer=$('<div class="igv-grid-rect">'),$rowContainer.append($row[0]),$rowContainer},igv.Dialog.prototype.rowOfOkCancel=function(){var $rowContainer,$row,$column,$columnFiller,self=this;return $row=$('<div class="igv-grid-dialog">'),$column=$('<div class="igv-col igv-col-1-8">'),$row.append($column[0]),$column=$('<div class="igv-col igv-col-3-8">'),$columnFiller=$('<div class="igv-col-filler-ok-button">'),$columnFiller.text("OK"),this.$ok=$columnFiller,$column.append($columnFiller[0]),$row.append($column[0]),$column=$('<div class="igv-col igv-col-3-8">'),$columnFiller=$('<div class="igv-col-filler-cancel-button">'),$columnFiller.text("Cancel"),$columnFiller.click(function(){self.$dialogInput.val(void 0),self.hide()}),$column.append($columnFiller[0]),$row.append($column[0]),$column=$('<div class="igv-col igv-col-1-8">'),$row.append($column[0]),$rowContainer=$('<div class="igv-grid-rect">'),$rowContainer.append($row[0]),$rowContainer},igv.Dialog.prototype.rowOfLabel=function(){var rowContainer,row,column;return row=$('<div class="igv-grid-dialog">'),column=$('<div class="igv-col igv-col-4-4">'),this.$dialogLabel=$('<div class="igv-user-input-label">'),column.append(this.$dialogLabel[0]),row.append(column[0]),rowContainer=$('<div class="igv-grid-rect">'),rowContainer.append(row[0]),rowContainer},igv.Dialog.prototype.rowOfInput=function(){var rowContainer,row,column;return row=$('<div class="igv-grid-dialog">'),column=$('<div class="igv-col igv-col-4-4">'),this.$dialogInput=$('<input class="igv-user-input-dialog" type="text" value="#000000">'),column.append(this.$dialogInput[0]),row.append(column[0]),rowContainer=$('<div class="igv-grid-rect">'),rowContainer.append(row[0]),rowContainer},igv.Dialog.prototype.configure=function(labelHTMLFunction,inputValue,clickFunction){var self=this;labelHTMLFunction?(self.$dialogLabel.html(labelHTMLFunction()),self.$dialogLabel.show()):self.$dialogLabel.hide(),void 0!==inputValue?(self.$dialogInput.val(inputValue),self.$dialogInput.unbind(),self.$dialogInput.change(function(){clickFunction&&clickFunction(),self.hide()}),self.$dialogInput.show()):self.$dialogInput.hide(),self.$ok.unbind(),self.$ok.click(function(){clickFunction&&clickFunction(),self.hide()})},igv.Dialog.prototype.hide=function(){this.$container.hasClass("igv-grid-container-dialog")&&this.$container.offset({left:0,top:0}),this.$container.hide()},igv.Dialog.prototype.show=function($host){var body_scrolltop,offset,_top,_left;body_scrolltop=$("body").scrollTop(),this.$container.hasClass("igv-grid-container-dialog")&&(offset=$host.offset(),_top=offset.top+body_scrolltop,_left=$host.outerWidth()-300,this.$container.offset({left:_left,top:_top})),this.$container.show()},igv}(igv||{}),igv=function(igv){function createTrackLocationState(e,viewport){var genomicLocation,canvasCoords,xOrigin,referenceFrame=viewport.genomicState.referenceFrame;if(canvasCoords=igv.translateMouseCoordinates(e,viewport.canvas),void 0!==(genomicLocation=Math.floor(referenceFrame.start+referenceFrame.toBP(canvasCoords.x)))&&null!==viewport.tile)return xOrigin=Math.round(referenceFrame.toPixels(viewport.tile.startBP-referenceFrame.start)),{genomicLocation:genomicLocation,x:canvasCoords.x-xOrigin,y:canvasCoords.y}}function clampPopoverLocation(pageX,pageY,popover){var left,popupRect,containerCoordinates={x:pageX,y:pageY},containerRect={x:0,y:0,width:$(window).width(),height:$(window).height()},popupX=pageX,popupY=pageY;return popupX-=popover.$parent.offset().left,popupY-=popover.$parent.offset().top,popupRect={x:popupX,y:popupY,width:popover.$popover.outerWidth(),height:popover.$popover.outerHeight()},left=popupX,containerCoordinates.x+popupRect.width>containerRect.width&&(left=popupX-popupRect.width),{left:left+"px",top:popupY+"px"}}return igv.Popover=function($parent){this.$parent=this.initializationHelper($parent)},igv.Popover.prototype.initializationHelper=function($parent){var $popoverHeader,self=this;return this.$popover=$('<div class="igv-popover">'),$parent.append(this.$popover),$popoverHeader=$('<div class="igv-popover-header">'),this.$popover.append($popoverHeader),igv.attachDialogCloseHandlerWithParent($popoverHeader,function(){self.hide()}),this.$popoverContent=$("<div>"),this.$popover.append(this.$popoverContent),this.$popover.draggable({handle:$popoverHeader.get(0)}),$parent},igv.Popover.prototype.hide=function(){this.$popover.hide()},igv.Popover.prototype.presentTrackGearMenu=function(pageX,pageY,trackView){var $container,items;items=igv.trackMenuItemList(this,trackView),_.size(items)>0&&(this.$popoverContent.empty(),this.$popoverContent.removeClass("igv-popover-track-popup-content"),$container=$('<div class="igv-track-menu-container">'),this.$popoverContent.append($container),_.each(items,function(item){item.init&&item.init(),$container.append(item.object)}),this.$popover.css(clampPopoverLocation(pageX,pageY,this)),this.$popover.show(),this.$popover.offset(igv.constrainBBox(this.$popover,$(igv.browser.trackContainerDiv))))},igv.Popover.prototype.presentTrackPopupMenu=function(e,viewport){var trackLocationState,$container,menuItems;viewport.trackView.track;void 0!==(trackLocationState=createTrackLocationState(e,viewport))&&(menuItems=igv.trackPopupMenuItemList(this,viewport,trackLocationState.genomicLocation,trackLocationState.x,trackLocationState.y),_.size(menuItems)>0&&(this.$popoverContent.empty(),this.$popoverContent.removeClass("igv-popover-track-popup-content"),$container=$('<div class="igv-track-menu-container">'),this.$popoverContent.append($container),_.each(menuItems,function(item){$container.append(item.object)}),this.$popover.css(clampPopoverLocation(e.pageX,e.pageY,this)),this.$popover.show()))},igv.Popover.prototype.presentTrackPopup=function(e,viewport){var trackLocationState,dataList,popupClickHandlerResult,content,config,track=viewport.trackView.track;viewport.genomicState.referenceFrame;void 0!==(trackLocationState=createTrackLocationState(e,viewport))&&(config={popover:this,viewport:viewport,genomicLocation:trackLocationState.genomicLocation,x:trackLocationState.x,y:trackLocationState.y},dataList=track.popupData(config),popupClickHandlerResult=igv.browser.fireEvent("trackclick",[track,dataList]),void 0===popupClickHandlerResult?_.size(dataList)>0&&(content=igv.formatPopoverText(dataList)):"string"==typeof popupClickHandlerResult&&(content=popupClickHandlerResult),this.presentContent(e.pageX,e.pageY,content))},igv.Popover.prototype.presentContent=function(pageX,pageY,content){var $container;void 0!==content&&(this.$popoverContent.empty(),this.$popoverContent.addClass("igv-popover-track-popup-content"),$container=$('<div class="igv-track-menu-container">'),this.$popoverContent.append($container),this.$popoverContent.html(content),this.$popover.css(clampPopoverLocation(pageX,pageY,this)),this.$popover.show())},igv}(igv||{}),igv=function(igv){return igv.TrackMenuPopupDialog=function(trackMenu,dialogLabel,inputValue,ok,width,height){var dialogLabelRE,inputValueRE,htmlString,myself=this;htmlString='<div id="dialog-form" title="DIALOG_LABEL"><p class="validateTips"></p><form><fieldset><input type="text" name="name" id="name" value="INPUT_VALUE"></fieldset></form></div>',dialogLabelRE=new RegExp("DIALOG_LABEL","g"),htmlString=htmlString.replace(dialogLabelRE,dialogLabel),inputValueRE=new RegExp("INPUT_VALUE","g"),htmlString=htmlString.replace(inputValueRE,inputValue),$("body").append($.parseHTML(htmlString)),this.dialogForm=$("#dialog-form"),this.form=this.dialogForm.find("form"),this.name=$("#name"),this.tips=$(".validateTips"),this.dialogForm.dialog({autoOpen:!1,width:width||320,height:height||256,modal:!0,buttons:{ok:ok,cancel:function(){myself.dialogForm.dialog("close")}},close:function(){myself.form[0].reset(),myself.dialogForm.remove(),myself.dialogForm=void 0,trackMenu&&trackMenu.hide()}}),this.form.on("submit",function(event){event.preventDefault(),$("#users").find(" tbody").append("<tr><td>"+myself.name.val()+"</td></tr>"),myself.dialogForm.dialog("close")})},igv.TrackMenuPopupDialog.prototype.updateTips=function(t){var myself=this;this.tips.text(t).addClass("ui-state-highlight"),setTimeout(function(){myself.tips.removeClass("ui-state-highlight",1500)},500)},igv}(igv||{}),igv=function(igv){return igv.UserFeedback=function($parent){var myself=this;this.userFeedback=$('<div class="igv-user-feedback">'),$parent.append(this.userFeedback[0]),this.userFeedbackHeader=$("<div>"),this.userFeedback.append(this.userFeedbackHeader[0]),this.userFeedbackAlert=$('<i class="fa fa-exclamation-triangle">'),this.userFeedbackHeader.append(this.userFeedbackAlert[0]),this.userFeedbackDismiss=$('<i class="fa fa-times-circle">'),this.userFeedbackHeader.append(this.userFeedbackDismiss[0]),this.userFeedbackDismiss.click(function(){myself.userFeedbackBodyCopy.html(""),myself.userFeedback.hide()}),this.userFeedbackBodyCopy=$("<div>"),this.userFeedback.append(this.userFeedbackBodyCopy[0])},igv.UserFeedback.prototype.show=function(){this.userFeedback.show()},igv.UserFeedback.prototype.hide=function(){this.userFeedback.hide()},igv.UserFeedback.prototype.bodyCopy=function(htmlString){this.userFeedbackBodyCopy.html(htmlString)},igv}(igv||{}),igv=function(igv){function init(variant){function calcHeterozygosity(ac,an){var refFrac,sum=0,altFreqs=Array.isArray(ac)?ac:ac.split(","),altCount=0;return an=Array.isArray(an)?parseInt(an[0]):parseInt(an),altFreqs.forEach(function(altFreq){var a=parseInt(altFreq),altFrac=a/an;sum+=altFrac*altFrac,altCount+=a}),refFrac=(an-altCount)/an,1-(sum+=refFrac*refFrac)}function isRef(altAlleles){return!altAlleles||0===altAlleles.trim().length||"<NON_REF>"===altAlleles||"<*>"===altAlleles}var start,end,altTokens=variant.alternateBases.split(","),minAltLength=variant.referenceBases.length,maxAltLength=variant.referenceBases.length;variant.info&&variant.info.PERIOD&&(variant.type="str"),variant.alleles=[],"str"===variant.type?(variant.start=variant.pos-1,variant.end=variant.start+variant.referenceBases.length):isRef(variant.alternateBases)&&(variant.type="refblock"),"refblock"===variant.type||"."===variant.alternateBases?variant.heterozygosity=0:(altTokens.forEach(function(alt,index){var s,e,diff;variant.alleles.push(alt),"str"!==variant.type&&alt.length>0&&(diff=variant.referenceBases.length-alt.length,diff>0?(s=variant.pos-1+alt.length,e=s+diff):diff<0?(s=variant.pos-1+variant.referenceBases.length,e=s+1):(s=variant.pos-1,e=s+1),start=void 0===start?s:Math.min(start,s),end=void 0===end?e:Math.max(end,e)),minAltLength=Math.min(minAltLength,alt.length),maxAltLength=Math.max(maxAltLength,alt.length)}),variant.start=start,variant.end=end,variant.info&&variant.info.AC&&variant.info.AN&&(variant.heterozygosity=calcHeterozygosity(variant.info.AC,variant.info.AN).toFixed(3))),variant.minAltLength=minAltLength,variant.maxAltLength=maxAltLength}function arrayToString(value,delim){return void 0===delim&&(delim=","),Array.isArray(value)?value.join(delim):value}return igv.createVCFVariant=function(tokens){function getInfoObject(infoStr){if(infoStr){var info={};return infoStr.split("; ").forEach(function(elem){var element=elem.split("=");info[element[0]]=element[1]}),info}}var variant=new igv.Variant;return variant.chr=tokens[0],variant.pos=parseInt(tokens[1]),variant.names=tokens[2],variant.referenceBases=tokens[3],variant.alternateBases=tokens[4],variant.quality=parseInt(tokens[5]),variant.filter=tokens[6],variant.info=getInfoObject(tokens[7]),init(variant),variant},igv.createGAVariant=function(json){var variant=new igv.Variant;variant.chr=json.referenceName,variant.start=parseInt(json.start),variant.end=parseInt(json.end),variant.pos=variant.start+1,variant.names=arrayToString(json.names,"; "),variant.referenceBases=json.referenceBases,variant.alternateBases=arrayToString(json.alternateBases),variant.quality=json.quality,variant.filter=arrayToString(json.filter),variant.info=json.info,variant.calls={};var id,order=0;return json.calls&&json.calls.forEach(function(call){id=call.callSetId,variant.calls[id]=call,order++}),init(variant),variant},igv.Variant=function(){},igv.Variant.prototype.popupData=function(genomicLocation){var fields,gt,self=this;return fields=[{name:"Chr",value:this.chr},{name:"Pos",value:this.pos},{name:"Names",value:this.names?this.names:""},{name:"Ref",value:this.referenceBases},{name:"Alt",value:this.alternateBases},{name:"Qual",value:this.quality},{name:"Filter",value:this.filter}],this.hasOwnProperty("heterozygosity")&&fields.push({name:"Heterozygosity",value:this.heterozygosity}),this.calls&&1===this.calls.length&&(fields.push("<hr>"),gt=this.alleles[this.calls[0].genotype[0]]+this.alleles[this.calls[0].genotype[1]],fields.push({name:"Genotype",value:gt})),this.info&&(fields.push("<hr>"),Object.keys(this.info).forEach(function(key){fields.push({name:key,value:arrayToString(self.info[key])})})),fields},igv.Variant.prototype.isRefBlock=function(){return"refblock"===this.type},igv}(igv||{}),igv=function(igv){function getCallsetsLength(){var length=0,callSets=this.callSets;return Object.keys(callSets).forEach(function(key){callSets[key]&&(length+=callSets[key].length)}),length}function computeVisibilityWindow(){if(this.callSets){var length=getCallsetsLength.call(this);this.visibilityWindow=length<10?DEFAULT_VISIBILITY_WINDOW:1e3+2500/length*40}else this.visibilityWindow=DEFAULT_VISIBILITY_WINDOW;this.featureSource.visibilityWindow=this.visibilityWindow}function getAlleleString(call,variant,alleleNum){return alleleNum=alleleNum<=0?0:1,call.genotype[alleleNum]>0?variant.alleles[call.genotype[alleleNum]-1]:variant.referenceBases}function sortCallSets(callSets,variant,direction){var d="DESC"===direction?1:-1;Object.keys(callSets).forEach(function(property){callSets[property].sort(function(a,b){var aNan=isNaN(variant.calls[a.id].genotype[0]),bNan=isNaN(variant.calls[b.id].genotype[0]);if(aNan&&bNan)return 0;if(aNan)return 1;if(bNan)return-1;var a0=getAlleleString(variant.calls[a.id],variant,0),a1=getAlleleString(variant.calls[a.id],variant,1),b0=getAlleleString(variant.calls[b.id],variant,0),b1=getAlleleString(variant.calls[b.id],variant,1),result=Math.max(b0.length,b1.length)-Math.max(a0.length,a1.length);return 0===result&&(result=Math.min(b0.length,b1.length)-Math.min(a0.length,a1.length)),d*result})})}function extractPopupData(call,variant){var popupData,i,allele,gt="",numRepeats="",alleleFrac="";if("str"===variant.type){var info=variant.info,alt_ac=info.AC?info.AC.split(","):void 0;if(!isNaN(call.genotype[0]))for(i=0;i<call.genotype.length;i++){allele=getAlleleString(call,variant,i),gt+=allele,numRepeats+=(allele.length/info.PERIOD).toString();var ac=0===call.genotype[i]?info.REFAC:alt_ac[call.genotype[i]-1];alleleFrac+=(parseInt(ac)/parseInt(info.AN)).toFixed(3),i<call.genotype.length-1&&(gt+=" | ",numRepeats+=" | ",alleleFrac+=" | ")}}else call.genotype.forEach(function(i){gt+=0===i?variant.referenceBases:variant.alternateBases[i-1]});popupData=[],void 0!==call.callSetName&&popupData.push({name:"Name",value:call.callSetName}),popupData.push({name:"Genotype",value:gt}),numRepeats&&popupData.push({name:"Repeats",value:numRepeats}),alleleFrac&&popupData.push({name:"Allele Fraction",value:alleleFrac}),void 0!==call.phaseset&&popupData.push({name:"Phase set",value:call.phaseset}),void 0!==call.genotypeLikelihood&&popupData.push({name:"genotypeLikelihood",value:call.genotypeLikelihood.toString()});var attr=igv.sampleInformation.getAttributes(call.callSetName);attr&&Object.keys(attr).forEach(function(attrName){var displayText=attrName.replace(/([A-Z])/g," $1");displayText=displayText.charAt(0).toUpperCase()+displayText.slice(1),popupData.push({name:displayText,value:attr[attrName]})});var infoKeys=Object.keys(call.info);return infoKeys.length&&popupData.push("<hr>"),infoKeys.forEach(function(key){popupData.push({name:key,value:call.info[key]})}),popupData}var DEFAULT_VISIBILITY_WINDOW=1e5,sortDirection="ASC",strColors=["rgb(150,150,150)","rgb(255,0,0)","rgb(255,255,0)","rgb(0,0,255)","rgb(0,255,0)","rgb(128,0,128)"];return igv.VariantTrack=function(config){this.visibilityWindow=void 0===config.visibilityWindow?"compute":config.visibilityWindow,igv.configTrack(this,config),this.displayMode=config.displayMode||"EXPANDED",this.labelDisplayMode=config.labelDisplayMode,this.variantHeight=config.variantHeight||10,this.squishedCallHeight=config.squishedCallHeight||1,this.expandedCallHeight=config.expandedCallHeight||10,this.expandedVGap=void 0!==config.expandedVGap?config.expandedVGap:2,this.squishedVGap=void 0!==config.squishedVGap?config.squishedVGap:1,this.expandedGroupGap=config.expandedGroupGap||10,this.squishedGroupGap=config.squishedGroupGap||5,this.featureHeight=config.featureHeight||14,this.featureSource=new igv.FeatureSource(config),this.homrefColor=config.homrefColor||"rgb(200, 200, 200)",this.homvarColor=config.homvarColor||"rgb(17,248,254)",this.hetvarColor=config.hetvarColor||"rgb(34,12,253)",this.nRows=1,this.groupBy="NONE"},igv.VariantTrack.prototype.getFileHeader=function(){var self=this;return"function"==typeof self.featureSource.getFileHeader?self.featureSource.getFileHeader().then(function(header){return header&&(header.name&&!self.config.name&&(self.name=header.name),header.color&&!self.config.color&&(self.color="rgb("+header.color+")"),self.callSets={},self.callSetGroups=["NONE"],self.callSets.NONE=header.callSets,"compute"===self.visibilityWindow&&computeVisibilityWindow.call(self)),header}):Promise.resolve(null)},igv.VariantTrack.prototype.getFeatures=function(chr,bpStart,bpEnd){return this.featureSource.getFeatures(chr,bpStart,bpEnd)},igv.VariantTrack.prototype.computePixelHeight=function(features){var nRows,h,callSets=this.callSets,nCalls=callSets?getCallsetsLength.call(this):0,callHeight="EXPANDED"===this.displayMode?this.expandedCallHeight:this.squishedCallHeight,vGap="EXPANDED"===this.displayMode?this.expandedVGap:this.squishedVGap,groupGap="EXPANDED"===this.displayMode?this.expandedGroupGap:this.squishedGroupGap,groupSpace=Object.keys(callSets).length*groupGap;if("COLLAPSED"===this.displayMode)return this.nRows=1,10+this.variantHeight;var maxRow=0;return features&&"function"==typeof features.forEach&&features.forEach(function(feature){feature.row&&feature.row>maxRow&&(maxRow=feature.row)}),nRows=maxRow+1,h=10+nRows*(this.variantHeight+vGap),this.nRows=nRows,h+vGap+groupSpace+nCalls*(callHeight+vGap)},igv.VariantTrack.prototype.draw=function(options){function getFillColor(allele){return allele.length<variant.referenceBases.length?lowColorScale.getColor(allele.length):allele.length>variant.referenceBases.length?highColorScale.getColor(allele.length):"rgb(150,150,150)"}function getSTRColor(variant){var period,idx=0;return variant.info.PERIOD&&(period=parseInt(variant.info.PERIOD),idx=Math.max(0,Math.min(period,strColors.length-1))),strColors[idx]}var px,px1,pw,py,h,i,variant,call,callSet,j,k,group,allRef,allVar,callSets,nCalls,firstAllele,secondAllele,lowColorScale,highColorScale,callsDrawn,len,self=this,featureList=options.features,ctx=options.context,bpPerPixel=options.bpPerPixel,bpStart=options.bpStart,pixelWidth=options.pixelWidth,pixelHeight=options.pixelHeight,bpEnd=bpStart+pixelWidth*bpPerPixel+1,callHeight="EXPANDED"===this.displayMode?this.expandedCallHeight:this.squishedCallHeight,vGap="EXPANDED"===this.displayMode?this.expandedVGap:this.squishedVGap,groupGap="EXPANDED"===this.displayMode?this.expandedGroupGap:this.squishedGroupGap;if(this.variantBandHeight=10+this.nRows*(this.variantHeight+vGap),callSets=this.callSets,nCalls=getCallsetsLength.call(this),igv.graphics.fillRect(ctx,0,0,pixelWidth,pixelHeight,{fillStyle:"rgb(255, 255, 255)"}),callSets&&nCalls>0&&"COLLAPSED"!==this.displayMode&&igv.graphics.strokeLine(ctx,0,this.variantBandHeight,pixelWidth,this.variantBandHeight,{strokeStyle:"rgb(224,224,224) "}),featureList){for(i=0,len=featureList.length;i<len;i++)if(variant=featureList[i],!(variant.end<bpStart)){if(variant.start>bpEnd)break;if(py=10+("COLLAPSED"===this.displayMode?0:variant.row*(this.variantHeight+vGap)),h=this.variantHeight,px=Math.round((variant.start-bpStart)/bpPerPixel),px1=Math.round((variant.end-bpStart)/bpPerPixel),pw=Math.max(1,px1-px),pw<3?(pw=3,px-=1):pw>5&&(px+=1,pw-=2),"str"===variant.type?ctx.fillStyle=getSTRColor(variant):ctx.fillStyle=this.color,ctx.fillRect(px,py,pw,h),nCalls>0&&variant.calls&&"COLLAPSED"!==this.displayMode)for(h=callHeight,"str"===variant.type&&(lowColorScale=new igv.GradientColorScale({low:variant.minAltLength,lowR:135,lowG:206,lowB:250,high:variant.referenceBases.length,highR:150,highG:150,highB:150}),highColorScale=new igv.GradientColorScale({low:variant.referenceBases.length,lowR:150,lowG:150,lowB:150,high:variant.maxAltLength,highR:255,highG:69,highB:0})),callsDrawn=0,j=0;j<this.callSetGroups.length;j++)for(group=callSets[this.callSetGroups[j]],k=0;k<group.length;k++)callSet=group[k],call=variant.calls[callSet.id],call&&(py=self.variantBandHeight+vGap+(callsDrawn+variant.row)*(h+vGap)+j*groupGap,"str"===variant.type?isNaN(call.genotype[0])?ctx.strokeStyle="#B0B0B0":(firstAllele=getAlleleString(call,variant,0),secondAllele=getAlleleString(call,variant,1),ctx.fillStyle=getFillColor(firstAllele),ctx.fillRect(px,py,pw,h/2),ctx.fillStyle=getFillColor(secondAllele),ctx.fillRect(px,py+h/2,pw,h/2),"EXPANDED"===self.displayMode&&(ctx.beginPath(),ctx.moveTo(px,py+h/2),ctx.lineTo(px+pw,py+h/2),ctx.strokeStyle="#000",ctx.stroke())):(allVar=allRef=!0,call.genotype.forEach(function(g){0!=g&&(allRef=!1),0==g&&(allVar=!1)}),ctx.fillStyle=allRef?this.homrefColor:allVar?this.homvarColor:this.hetvarColor,ctx.fillRect(px,py,pw,h))),callsDrawn++}}else console.log("No feature list")},igv.VariantTrack.prototype.altClick=function(genomicLocation,referenceFrame,event){var chr=referenceFrame.chrName,tolerance=Math.floor(2*referenceFrame.bpPerPixel),featureList=this.featureSource.featureCache.queryFeatures(chr,genomicLocation-tolerance,genomicLocation+tolerance),self=this;this.callSets&&featureList&&featureList.length>0&&featureList.forEach(function(variant){variant.start<=genomicLocation+tolerance&&variant.end>genomicLocation-tolerance&&(sortCallSets(self.callSets,variant,sortDirection),sortDirection="ASC"===sortDirection?"DESC":"ASC",self.trackView.update())})},igv.VariantTrack.prototype.popupData=function(config){var genomicLocation=config.genomicLocation,yOffset=(config.x,config.y),referenceFrame=config.viewport.genomicState.referenceFrame;if(this.featureSource.featureCache){var group,chr=referenceFrame.chrName,tolerance=Math.floor(2*referenceFrame.bpPerPixel),featureList=this.featureSource.featureCache.queryFeatures(chr,genomicLocation-tolerance,genomicLocation+tolerance),vGap="EXPANDED"===this.displayMode?this.expandedVGap:this.squishedVGap,groupGap="EXPANDED"===this.displayMode?this.expandedGroupGap:this.squishedGroupGap,popupData=[],self=this;return featureList&&featureList.length>0&&featureList.forEach(function(variant){var row,callHeight,callSets,cs,call;if(variant.start<=genomicLocation+tolerance&&variant.end>genomicLocation-tolerance)if(popupData.length>0&&popupData.push("<HR>"),"COLLAPSED"==self.displayMode)Array.prototype.push.apply(popupData,variant.popupData(genomicLocation,self.type));else if(yOffset<=self.variantBandHeight)row=Math.floor((yOffset-10)/(self.variantHeight+vGap)),variant.row===row&&Array.prototype.push.apply(popupData,variant.popupData(genomicLocation),self.type);else if((callSets=self.callSets)&&variant.calls){callHeight="SQUISHED"===self.displayMode?self.squishedCallHeight:self.expandedCallHeight;var totalCalls=0;for(group=0;group<self.callSetGroups.length;group++){var groupName=self.callSetGroups[group],groupCalls=callSets[groupName].length;if(yOffset<=self.variantBandHeight+vGap+(totalCalls+groupCalls)*(callHeight+vGap)+group*groupGap){row=Math.floor((yOffset-(self.variantBandHeight+vGap+totalCalls*(callHeight+vGap)+group*groupGap))/(callHeight+vGap));break}totalCalls+=groupCalls}row>=0&&(cs=callSets[groupName][row],call=variant.calls[cs.id],Array.prototype.push.apply(popupData,extractPopupData(call,variant)))}}),popupData}},igv.VariantTrack.prototype.popupMenuItemList=function(config){var menuItems=[],self=this;"NONE"!==this.groupBy&&igv.sampleInformation.hasAttributes()&&menuItems.push({name:"Sort groups",click:function(){try{self.callSetGroups.sort(function(a,b){return a-b})}catch(err){self.callSetGroups.sort()}self.trackView.update(),config.popover.hide()}});var referenceFrame=config.viewport.genomicState.referenceFrame,genomicLocation=config.genomicLocation,chr=referenceFrame.chrName,tolerance=Math.floor(2*referenceFrame.bpPerPixel),featureList=this.featureSource.featureCache.queryFeatures(chr,genomicLocation-tolerance,genomicLocation+tolerance);return this.callSets&&featureList&&featureList.length>0&&featureList.forEach(function(variant){variant.start<=genomicLocation+tolerance&&variant.end>genomicLocation-tolerance&&"str"===variant.type&&menuItems.push({name:"Sort by allele length",click:function(){sortCallSets(self.callSets,variant,sortDirection),sortDirection="ASC"===sortDirection?"DESC":"ASC",self.trackView.update(),config.popover.hide()}})}),menuItems},igv.VariantTrack.prototype.groupCallSets=function(attribute){var group,attr,key,self=this,groupedCallSets={},callSetGroups=[];Object.keys(this.callSets).forEach(function(i){group=self.callSets[i],group.forEach(function(callSet){key="NONE","NONE"!==attribute&&(attr=igv.sampleInformation.getAttributes(callSet.name))&&attr[attribute]&&(key=attr[attribute]),groupedCallSets.hasOwnProperty(key)||(groupedCallSets[key]=[],callSetGroups.push(key)),groupedCallSets[key].push(callSet)})}),this.callSets=groupedCallSets,this.callSetGroups=callSetGroups,this.groupBy=attribute,this.trackView.update()},igv.VariantTrack.prototype.menuItemList=function(popover){function groupByMarkup(buttonVal,selfVal,lut){return buttonVal===selfVal?'<div><i class="fa fa-check fa-check-shim"></i>'+lut[buttonVal]+"</div>":'<div><i class="fa fa-check fa-check-shim fa-check-hidden"></i>'+lut[buttonVal]+"</div>"}function displayModeMarkup(index,displayMode,selfDisplayMode){var lut,chosen;return lut={COLLAPSED:"Collapse",SQUISHED:"Squish",EXPANDED:"Expand"},chosen=0===index?'<div class="igv-track-menu-border-top">':"<div>",displayMode===selfDisplayMode?chosen+'<i class="fa fa-check fa-check-shim"></i>'+lut[displayMode]+"</div>":chosen+'<i class="fa fa-check fa-check-shim fa-check-hidden"></i>'+lut[displayMode]+"</div>"}var mapped,self=this,menuItems=[];if(mapped=["COLLAPSED","SQUISHED","EXPANDED"].map(function(displayMode,index){return{object:$(displayModeMarkup(index,displayMode,self.displayMode)),click:function(){popover.hide(),self.displayMode=displayMode,self.trackView.update()}}}),menuItems=menuItems.concat(mapped),igv.sampleInformation.hasAttributes()){var $groupBy={object:$('<div class="igv-track-menu-border-top">Group By:</div>')};menuItems.push($groupBy);var attrs={},attributes=igv.sampleInformation.getAttributeNames();attributes.forEach(function(attribute){var result=attribute.replace(/([A-Z])/g," $1");result=result.charAt(0).toUpperCase()+result.slice(1),attrs[attribute]=result}),attributes.push("NONE"),attrs.NONE="None";var mappedAttrs=_.map(attributes,function(attr,index){return{object:$(groupByMarkup(attr,self.groupBy,attrs)),click:function(){popover.hide(),self.groupCallSets(attr)}}});menuItems=menuItems.concat(mappedAttrs)}return menuItems},igv}(igv||{}),igv=function(igv){function extractCallFields(tokens){var i,callFields={genotypeIndex:-1,fields:tokens};for(i=0;i<tokens.length;i++)"GT"===tokens[i]&&(callFields.genotypeIndex=i);return callFields}return igv.VcfParser=function(type){this.type=type},igv.VcfParser.prototype.parseHeader=function(data){var dataWrapper,tokens,line,j,id,values,ltIdx,gtIdx,type,header={};if(dataWrapper=igv.getDataWrapper(data),line=dataWrapper.nextLine(),!line.startsWith("##fileformat"))throw new Error("Invalid VCF file: missing fileformat line");for(header.version=line.substr(13);(line=dataWrapper.nextLine())&&line.startsWith("#");)if(id=null,values={},line.startsWith("##")){if(line.startsWith("##INFO")||line.startsWith("##FILTER")||line.startsWith("##FORMAT")){if(ltIdx=line.indexOf("<"),gtIdx=line.lastIndexOf(">"),!(ltIdx>2&&gtIdx>0)){console.log("Malformed VCF header line: "+line);continue}type=line.substring(2,ltIdx-1),header[type]||(header[type]={}),tokens=igv.splitStringRespectingQuotes(line.substring(ltIdx+1,gtIdx-1),","),tokens.forEach(function(token){var kv=token.split("=");kv.length>1&&("ID"===kv[0]?id=kv[1]:values[kv[0]]=kv[1])}),id&&(header[type][id]=values)}}else if(line.startsWith("#CHROM")&&(tokens=line.split("\t"),tokens.length>8))for(header.callSets=[],j=9;j<tokens.length;j++)header.callSets.push({id:j,name:tokens[j]});return this.header=header,header},igv.VcfParser.prototype.parseFeatures=function(data){var dataWrapper,line,variant,tokens,callFields,index,token,allFeatures=[],callSets=this.header.callSets;for(dataWrapper=igv.getDataWrapper(data);line=dataWrapper.nextLine();)if(!line.startsWith("#")&&(tokens=line.split("\t"),tokens.length>=8)){if(variant=igv.createVCFVariant(tokens),variant.isRefBlock())continue;if(variant.header=this.header,allFeatures.push(variant),tokens.length>9)for(callFields=extractCallFields(tokens[8].split(":")),variant.calls={},index=9;index<tokens.length;index++){token=tokens[index];var callSet=callSets[index-9],call={callSetName:callSet.name,info:{}};variant.calls[callSet.id]=call,token.split(":").forEach(function(callToken,idx){switch(idx){case callFields.genotypeIndex:call.genotype=[],callToken.split(/[\|\/]/).forEach(function(s){call.genotype.push(parseInt(s))});break;default:call.info[callFields.fields[idx]]=callToken}})}}return allFeatures},igv}(igv||{}),igv=function(igv){igv.Viewport=function(trackView,$container,genomicState){function createZoomInNotice(){var $container,$child;return $child=$("<div>"),$child.text("Zoom in to see features"),$container=$('<div class="zoom-in-notice-container">'),$container.append($child),$container.hide(),$container}function addViewportBorders($viewport,locusIndex,lociCount){1!==lociCount&&locusIndex!==lociCount-1&&$viewport.addClass("igv-viewport-div-border-right")}var description,$trackLabel,$spinner,dimen,$div,self=this;this.trackView=trackView,this.id=_.uniqueId("viewport_"),this.genomicState=genomicState,this.$viewport=$('<div class="igv-viewport-div">'),$container.append(this.$viewport),this.$viewport.data("viewport",this.id),this.$viewport.data("locusindex",this.genomicState.locusIndex),addViewportBorders(this.$viewport,this.genomicState.locusIndex,igv.browser.genomicStateList.length),this.setWidth(igv.browser.viewportContainerWidth()/this.genomicState.locusCount),this.contentDiv=$('<div class="igv-viewport-content-div">')[0],this.$viewport.append(this.contentDiv),trackView.track instanceof igv.SequenceTrack&&this.$viewport.addClass("igv-viewport-sequence"),trackView.track instanceof igv.RulerTrack&&($div=$("<div>",{class:"igv-whole-genome-container"}),$(this.contentDiv).append($div),$div.hide()),this.genomicState.locusCount>1&&trackView.track instanceof igv.RulerTrack&&(this.$viewport.addClass("igv-viewport-ruler"),this.$close=$('<div class="igv-viewport-fa-close">'),this.$closeButton=$('<i class="fa fa-times-circle">'),this.$close.append(this.$closeButton),this.$close.click(function(e){igv.browser.closeMultiLocusPanelWithGenomicState(self.genomicState)}),this.$viewport.append(this.$close)),this.canvas=$("<canvas>")[0],$(this.contentDiv).append(this.canvas),this.canvas.setAttribute("width",this.contentDiv.clientWidth),this.canvas.setAttribute("height",this.contentDiv.clientHeight),this.ctx=this.canvas.getContext("2d"),this.genomicState.locusCount>1&&trackView.track instanceof igv.RulerTrack&&$(this.contentDiv).append(igv.browser.rulerTrack.locusLabelWithGenomicState(this.genomicState)),void 0===trackView.track.visibilityWindow&&trackView.track.supportsWholeGenome||(self.$zoomInNotice=createZoomInNotice(),$(this.contentDiv).append(self.$zoomInNotice)),trackView.track.name&&0===this.genomicState.locusIndex&&(description="function"==typeof trackView.track.description?trackView.track.description():trackView.track.description||trackView.track.name,$trackLabel=$('<div class="igv-track-label">'),$trackLabel.html(trackView.track.name),$trackLabel.click(function(e){self.popover.presentContent(e.pageX,e.pageY,description)}),this.$viewport.append($trackLabel),igv.browser.$trackLabelToggle.hasClass("igv-nav-bar-toggle-button-on")&&$trackLabel.hide()),trackView.track instanceof igv.RulerTrack||(this.addMouseHandlers(),dimen=this.$viewport.height(),dimen>32&&(dimen=32),$spinner=$('<div class="igv-viewport-spinner">'),$spinner.css({"font-size":dimen+"px"}),$spinner.append($('<i class="fa fa-spinner fa-spin fa-fw">')),this.$viewport.append($spinner),this.stopSpinner(),this.popover=new igv.Popover(igv.browser.$content))},igv.Viewport.prototype.setWidth=function(width){var percentage;this.$viewport.width(width),percentage=this.$viewport.width()/this.$viewport.outerWidth(),this.$viewport.width(Math.floor(percentage*width))},igv.Viewport.prototype.addMouseHandlers=function(){var popupTimer,doubleClickDelay,self=this,isMouseDown=!1,lastMouseX=void 0,mouseDownX=void 0,lastClickTime=0;doubleClickDelay=igv.browser.constants.doubleClickDelay,$(self.canvas).mousedown(function(e){var canvasCoords;e.preventDefault(),isMouseDown=!0,canvasCoords=igv.translateMouseCoordinates(e,self.canvas),lastMouseX=canvasCoords.x,mouseDownX=lastMouseX}),$(self.canvas).click(function(e){var canvasCoords,referenceFrame,genomicLocation,time,newCenter,locusString,loci,chr;if(e.preventDefault(),e=$.event.fix(e),e.stopPropagation(),void 0===(referenceFrame=self.genomicState.referenceFrame))return void console.log("undefined === referenceFrame");canvasCoords=igv.translateMouseCoordinates(e,self.canvas),genomicLocation=Math.floor(referenceFrame.start+referenceFrame.toBP(canvasCoords.x)),time=Date.now(),time-lastClickTime<doubleClickDelay?(popupTimer&&(window.clearTimeout(popupTimer),popupTimer=void 0),igv.browser.minimumBasesExtent()>Math.floor(self.$viewport.width()*referenceFrame.bpPerPixel/2)||(newCenter=Math.round(referenceFrame.start+canvasCoords.x*referenceFrame.bpPerPixel),"all"===referenceFrame.chrName.toLowerCase()?(chr=igv.browser.genome.getChromosomeCoordinate(newCenter).chr,1===self.genomicState.locusCount?locusString=chr:(loci=igv.browser.genomicStateList.map(function(g){return g.locusSearchString}),loci[self.genomicState.locusIndex]=chr,locusString=loci.join(" ")),igv.browser.search(locusString)):(self.genomicState.referenceFrame.bpPerPixel/=2,self.genomicState.referenceFrame.start=Math.round((newCenter+self.genomicState.referenceFrame.start)/2),igv.browser.updateWithLocusIndex(self.genomicState.locusIndex)))):e.shiftKey&&"function"==typeof self.trackView.track.shiftClick?(e.preventDefault(),e=$.event.fix(e),e.stopPropagation(),self.trackView.track.shiftClick(genomicLocation,e)):e.altKey?(e.preventDefault(),e=$.event.fix(e),e.stopPropagation(),self.popover.presentTrackPopupMenu(e,self)):Math.abs(canvasCoords.x-mouseDownX)<=igv.browser.constants.dragThreshold&&self.trackView.track.popupData&&(popupTimer=window.setTimeout(function(){self.popover.presentTrackPopup(e,self),mouseDownX=void 0,popupTimer=void 0},doubleClickDelay)),mouseDownX=void 0,isMouseDown=!1,lastMouseX=void 0,lastClickTime=time})},igv.Viewport.prototype.goto=function(chr,start,end){igv.popover&&igv.popover.hide(),this.genomicState.referenceFrame.bpPerPixel=(Math.round(end)-Math.round(start))/this.$viewport.width(),this.genomicState.referenceFrame.start=Math.round(start),igv.browser.updateWithLocusIndex(this.genomicState.locusIndex)},igv.Viewport.prototype.startSpinner=function(){var $spinner=this.$viewport.find(".fa-spinner");$spinner.addClass("fa-spin"),$spinner.show()},igv.Viewport.prototype.stopSpinner=function(){var $spinner=this.$viewport.find(".fa-spinner");$spinner.hide(),$spinner.removeClass("fa-spin")},igv.Viewport.prototype.resize=function(){var contentWidth=igv.browser.viewportContainerWidth()/this.genomicState.locusCount;contentWidth>0&&(this.setWidth(contentWidth),this.canvas.style.width=this.$viewport.width()+"px",this.canvas.setAttribute("width",this.$viewport.width()),this.update())},igv.Viewport.prototype.update=function(){this.tile&&(this.tile.invalidate=!0),this.repaint()},igv.Viewport.prototype.repaint=function(){function renderControlCanvasWithTrackView(trackView){var buffer2;buffer2=document.createElement("canvas"),buffer2.width=trackView.controlCanvas.width,buffer2.height=trackView.controlCanvas.height,trackView.track.paintAxis(buffer2.getContext("2d"),buffer2.width,buffer2.height),trackView.controlCtx.drawImage(buffer2,0,0)}function doRenderControlCanvas(genomicState,trackView){return"function"==typeof trackView.track.paintAxis&&trackView.controlCanvas.width>0&&trackView.controlCanvas.height>0}function viewIsReady(){return igv.browser&&igv.browser.genomicStateList&&igv.browser.genomicStateList[self.genomicState.locusIndex].referenceFrame}function getFeatures(chr,start,end,bpPerPixel){var self=this;return self.cachedFeatures&&self.cachedFeatures.containsRange(chr,start,end,bpPerPixel)?Promise.resolve(self.cachedFeatures.features):"function"==typeof self.trackView.track.getFeatures?self.trackView.track.getFeatures(chr,start,end,bpPerPixel).then(function(features){return self.cachedFeatures=new CachedFeatures(chr,start,end,bpPerPixel,features),features}).catch(function(error){console.log(error)}):void Promise.resolve(void 0)}var pixelWidth,bpWidth,bpStart,bpEnd,chr,refFrameStart,refFrameEnd,drawConfiguration,buffer,self=this,genomicState=self.genomicState,referenceFrame=genomicState.referenceFrame;if(viewIsReady.call(this)){if(this.$zoomInNotice&&void 0!==this.trackView.track.visibilityWindow&&this.trackView.track.visibilityWindow>0){if(referenceFrame.bpPerPixel*this.$viewport.width()>this.trackView.track.visibilityWindow||"all"===referenceFrame.chrName.toLowerCase()&&!this.trackView.track.supportsWholeGenome)return this.tile=null,this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),self.stopSpinner(),void this.$zoomInNotice.show();this.$zoomInNotice.hide()}if(chr=referenceFrame.chrName,refFrameStart=referenceFrame.start,refFrameEnd=refFrameStart+referenceFrame.toBP(this.canvas.width),this.paintImage(chr,refFrameStart,refFrameEnd,referenceFrame.bpPerPixel),!this.tile||this.tile.invalidate||!this.tile.containsRange(chr,refFrameStart,refFrameEnd,referenceFrame.bpPerPixel)){var chrLength=igv.browser.genome.getChromosome(chr).bpLength;if(pixelWidth=3*this.canvas.width,bpWidth=referenceFrame.toBP(pixelWidth),bpStart=Math.floor(Math.max(0,referenceFrame.start-bpWidth/3)),bpEnd=Math.ceil(Math.min(chrLength,bpStart+bpWidth)),pixelWidth=(bpEnd-bpStart)/referenceFrame.bpPerPixel,self.loading&&self.loading.start===bpStart&&self.loading.end===bpEnd)return;self.loading={start:bpStart,end:bpEnd},self.startSpinner(),getFeatures.call(self,referenceFrame.chrName,bpStart,bpEnd,referenceFrame.bpPerPixel).then(function(features){var requiredHeight,roiPromises;return self.loading=void 0,self.stopSpinner(),features&&"function"==typeof self.trackView.track.computePixelHeight&&(requiredHeight=self.trackView.track.computePixelHeight(features))!=self.contentDiv.clientHeight&&self.trackView.setContentHeightForViewport(self,requiredHeight),buffer=document.createElement("canvas"),buffer.width=pixelWidth,buffer.height=self.canvas.height,drawConfiguration={features:features,context:buffer.getContext("2d"),pixelWidth:buffer.width,pixelHeight:buffer.height,bpStart:bpStart,bpEnd:bpEnd,bpPerPixel:referenceFrame.bpPerPixel,referenceFrame:referenceFrame,genomicState:genomicState,selection:self.selection,viewport:self,viewportWidth:self.$viewport.width(),viewportContainerX:genomicState.referenceFrame.toPixels(genomicState.referenceFrame.start-bpStart),viewportContainerWidth:igv.browser.viewportContainerWidth()},features&&(drawConfiguration.features=features,self.trackView.track.draw(drawConfiguration),doRenderControlCanvas(genomicState,self.trackView)&&renderControlCanvasWithTrackView(self.trackView)),igv.browser.roi?(roiPromises=[],igv.browser.roi.forEach(function(r){roiPromises.push(r.getFeatures(referenceFrame.chrName,bpStart,bpEnd))}),Promise.all(roiPromises)):void 0}).then(function(roiArray){if(roiArray){var i,len;for(i=0,len=roiArray.length;i<len;i++)drawConfiguration.features=roiArray[i],igv.browser.roi[i].draw(drawConfiguration)}}).then(function(ignore){self.tile=new Tile(referenceFrame.chrName,bpStart,bpEnd,referenceFrame.bpPerPixel,buffer),self.paintImage(chr,refFrameStart,refFrameEnd,referenceFrame.bpPerPixel)}).catch(function(error){console.error(error),self.stopSpinner(),self.loading=!1,igv.presentAlert(error,void 0)})}}},igv.Viewport.prototype.setContentHeight=function(newHeight){newHeight=Math.min(newHeight,32e3),this.trackView.track.minHeight&&(newHeight=Math.max(this.trackView.track.minHeight,newHeight));var contentHeightStr=newHeight+"px";$(this.contentDiv).height(newHeight),this.canvas.style.height=contentHeightStr,this.canvas.setAttribute("height",newHeight)},igv.Viewport.prototype.paintImage=function(chr,start,end,bpPerPixel){var offset,sx,dx,scale,sWidth,dWidth,iHeight,tile=this.tile;if(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),tile&&tile.containsRange(chr,start,end,bpPerPixel))this.xOffset=Math.round((tile.startBP-start)/tile.bpPerPixel),this.ctx.drawImage(tile.image,this.xOffset,0),this.ctx.save(),this.ctx.restore();else if(tile&&tile.overlapsRange(chr,start,end)){var offset=Math.round((start-tile.startBP)/tile.bpPerPixel);offset>0?(sx=offset,dx=0):(sx=0,dx=-offset),dWidth=tile.image.width,bpPerPixel===tile.bpPerPixel?sWidth=dWidth:(scale=bpPerPixel/tile.bpPerPixel,sWidth=Math.round(scale*dWidth)),iHeight=tile.image.height,this.ctx.drawImage(tile.image,sx,0,sWidth,iHeight,dx,0,dWidth,iHeight),this.ctx.save(),this.ctx.restore()}},igv.Viewport.prototype.isLoading=function(){return!(void 0===this.loading)},igv.Viewport.viewportWidthAtLocusIndex=function(locusIndex){return igv.Viewport.viewportsWithLocusIndex(locusIndex)[0].$viewport.width()},igv.Viewport.viewportsWithLocusIndex=function(locusIndex){var list=[];return igv.browser.trackViews.forEach(function(tv){tv.viewports.forEach(function(vp){locusIndex===vp.genomicState.locusIndex&&list.push(vp)})}),list},igv.Viewport.viewportWithID=function(id){var result=void 0;return igv.browser.trackViews.forEach(function(tv){void 0===result&&tv.viewports.forEach(function(vp){id===vp.id&&(result=vp)})}),result};var Tile=function(chr,tileStart,tileEnd,bpPerPixel,image){this.chr=chr,this.startBP=tileStart,this.endBP=tileEnd,this.bpPerPixel=bpPerPixel,this.image=image};Tile.prototype.containsRange=function(chr,start,end,bpPerPixel){return this.bpPerPixel===bpPerPixel&&start>=this.startBP&&end<=this.endBP&&chr===this.chr},Tile.prototype.overlapsRange=function(chr,start,end){return this.chr===chr&&end>=this.startBP&&start<=this.endBP};var CachedFeatures=function(chr,tileStart,tileEnd,bpPerPixel,features){this.chr=chr,this.startBP=tileStart,this.endBP=tileEnd,this.bpPerPixel=bpPerPixel,this.features=features};return CachedFeatures.prototype.containsRange=function(chr,start,end,bpPerPixel){return this.bpPerPixel===bpPerPixel&&start>=this.startBP&&end<=this.endBP&&chr===this.chr},igv}(igv||{}),igv=function(igv){return igv.WindowSizePanel=function($parent){this.$content=$('<div class="igv-windowsizepanel-content-div">'),$parent.append(this.$content)},igv.WindowSizePanel.prototype.show=function(){this.$content.show()},igv.WindowSizePanel.prototype.hide=function(){this.$content.hide()},igv.WindowSizePanel.prototype.updateWithGenomicState=function(genomicState){var viewportWidth,referenceFrame,length;1===genomicState.locusCount&&"all"!==genomicState.locusSearchString.toLowerCase()?this.show():this.hide(),viewportWidth=igv.Viewport.viewportWidthAtLocusIndex(genomicState.locusIndex),referenceFrame=genomicState.referenceFrame,length=viewportWidth*referenceFrame.bpPerPixel,this.$content.text(igv.prettyBasePairNumber(Math.round(length)))},igv}(igv||{});return igv});
//# sourceMappingURL=igv.min.map
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="//igv.org/web/img/favicon.ico">
<title>Integrative Genomics Viewer</title>
<!-- Bootstrap CSS - NOT REQUIRED FOR IGV -->
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- jQuery UI CSS -->
<link rel="stylesheet" type="text/css"
href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css"/>
<!-- Font Awesome CSS -->
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css">
<!-- IGV CSS -->
<link rel="stylesheet" type="text/css" href="http://igv.org/web/test/dist/css/igv.css"/>
<!-- jQuery JS -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<!-- Bootstrap JS - NOT REQUIRED FOR IGV -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<!-- IGV JS-->
<script type="text/javascript" src="igv.min.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-92237317-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<body role="document">
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">IGV.js Example - API</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Tracks
<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="#"
onclick="igv.browser.loadTrack({
url: 'https://data.broadinstitute.org/igvdata/test/igv-web/segmented_data_080520.seg.gz',
label: 'GBM Copy # (TCGA Broad GDAC)'});">GBM Copy # (TCGA Broad GDAC))</a>
</li>
<li>
<a href="#"
onclick="igv.browser.loadTrack({
format: 'bed',
url: 'https://data.broadinstitute.org/igvdata/annotations/hg19/dbSnp/snp137.hg19.bed.gz',
indexURL: 'https://data.broadinstitute.org/igvdata/annotations/hg19/dbSnp/snp137.hg19.bed.gz.tbi',
visibilityWindow: 200000,
label: 'dbSNP 137'})">dbSNP 137 (bed tabix)</a></li>
<li>
<a href="#"
onclick="igv.browser.loadTrack(
{
url: 'https://s3.amazonaws.com/igv.broadinstitute.org/data/hg19/encode/wgEncodeBroadHistoneGm12878H3k4me3StdSig.bigWig',
name: 'Gm12878H3k4me3'
})">Encode bigwig</a></li>
</ul>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h2>IGV.js API Example</h2>
<p>IGV.js embedded in a Bootstrap page. Example illustrates the use of the API to add tracks dynamically from a
menu.</p>
</div>
<!-- container -->
</div>
<!-- jumbotron -->
<div class="container-fluid" id="igvDiv" style="padding:5px; border:1px solid lightgray">
</div>
<!-- container -->
<div class="container-fluid">
<footer>
<p></p>
</footer>
</div>
<!-- container -->
<script type="text/javascript">
$(document).ready(function () {
var div = $("#igvDiv")[0],
options = {
showNavigation: true,
showRuler: true,
showLoadFileWidget: true,
locus: "chr1:155,160,475-155,184,282",
reference: {
id: "hg19"
},
tracks: [
{
name: "Genes",
type: "annotation",
format: "bed",
sourceType: "file",
url: "https://s3.amazonaws.com/igv.broadinstitute.org/annotations/hg19/genes/refGene.hg19.bed.gz",
indexURL: "https://s3.amazonaws.com/igv.broadinstitute.org/annotations/hg19/genes/refGene.hg19.bed.gz.tbi",
order: Number.MAX_VALUE,
visibilityWindow: 300000000,
displayMode: "EXPANDED"
}
]
};
igv.createBrowser(div, options);
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment