function RGBColorParser(n){var f,u,i,t,r;this.ok=!1,n.charAt(0)=="#"&&(n=n.substr(1,6)),n=n.replace(/ /g,""),n=n.toLowerCase(),f={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};for(u in f)n==u&&(n=f[u]);for(i=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(n){return[parseInt(n[1]),parseInt(n[2]),parseInt(n[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(n){return[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(n){return[parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)]}}],t=0;t<i.length;t++){var o=i[t].re,s=i[t].process,e=o.exec(n);e&&(r=s(e),this.r=r[0],this.g=r[1],this.b=r[2],this.ok=!0)}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var i=this.r.toString(16),t=this.g.toString(16),n=this.b.toString(16);return i.length==1&&(i="0"+i),t.length==1&&(t="0"+t),n.length==1&&(n="0"+n),"#"+i+t+n}}function printStackTrace(n){n=n||{guess:!0};var u=n.e||null,r=!!n.guess,t=new printStackTrace.implementation,i=t.run(u);return r?t.guessAnonymousFunctions(i):i}var DygraphOptions,DygraphLayout,DygraphCanvasRenderer,Dygraph,DateGraph;Date.ext={},Date.ext.util={},Date.ext.util.xPad=function(n,t,i){for(typeof i=="undefined"&&(i=10);parseInt(n,10)<i&&i>1;i/=10)n=t.toString()+n;return n.toString()},Date.prototype.locale="en-GB",document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang&&(Date.prototype.locale=document.getElementsByTagName("html")[0].lang),Date.ext.locales={},Date.ext.locales.en={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],x:"%d/%m/%y",X:"%T"},Date.ext.locales["en-US"]=Date.ext.locales.en,Date.ext.locales["en-US"].c="%a %d %b %Y %r %Z",Date.ext.locales["en-US"].x="%D",Date.ext.locales["en-US"].X="%r",Date.ext.locales["en-GB"]=Date.ext.locales.en,Date.ext.locales["en-AU"]=Date.ext.locales["en-GB"],Date.ext.formats={a:function(n){return Date.ext.locales[n.locale].a[n.getDay()]},A:function(n){return Date.ext.locales[n.locale].A[n.getDay()]},b:function(n){return Date.ext.locales[n.locale].b[n.getMonth()]},B:function(n){return Date.ext.locales[n.locale].B[n.getMonth()]},c:"toLocaleString",C:function(n){return Date.ext.util.xPad(parseInt(n.getFullYear()/100,10),0)},d:["getDate","0"],e:["getDate"," "],g:function(n){return Date.ext.util.xPad(parseInt(Date.ext.util.G(n)/100,10),0)},G:function(n){var t=n.getFullYear(),r=parseInt(Date.ext.formats.V(n),10),i=parseInt(Date.ext.formats.W(n),10);return i>r?t++:i===0&&r>=52&&t--,t},H:["getHours","0"],I:function(n){var t=n.getHours()%12;return Date.ext.util.xPad(t===0?12:t,0)},j:function(n){var i=n-new Date(""+n.getFullYear()+"/1/1 GMT"),t;return i+=n.getTimezoneOffset()*6e4,t=parseInt(i/864e5,10)+1,Date.ext.util.xPad(t,0,100)},m:function(n){return Date.ext.util.xPad(n.getMonth()+1,0)},M:["getMinutes","0"],p:function(n){return Date.ext.locales[n.locale].p[n.getHours()>=12?1:0]},P:function(n){return Date.ext.locales[n.locale].P[n.getHours()>=12?1:0]},S:["getSeconds","0"],u:function(n){var t=n.getDay();return t===0?7:t},U:function(n){var r=parseInt(Date.ext.formats.j(n),10),i=6-n.getDay(),t=parseInt((r+i)/7,10);return Date.ext.util.xPad(t,0)},V:function(n){var r=parseInt(Date.ext.formats.W(n),10),i=new Date(""+n.getFullYear()+"/1/1").getDay(),t=r+(i>4||i<=1?0:1);return t==53&&new Date(""+n.getFullYear()+"/12/31").getDay()<4?t=1:t===0&&(t=Date.ext.formats.V(new Date(""+(n.getFullYear()-1)+"/12/31"))),Date.ext.util.xPad(t,0)},w:"getDay",W:function(n){var r=parseInt(Date.ext.formats.j(n),10),i=7-Date.ext.formats.u(n),t=parseInt((r+i)/7,10);return Date.ext.util.xPad(t,0,10)},y:function(n){return Date.ext.util.xPad(n.getFullYear()%100,0)},Y:"getFullYear",z:function(n){var t=n.getTimezoneOffset(),r=Date.ext.util.xPad(parseInt(Math.abs(t/60),10),0),i=Date.ext.util.xPad(t%60,0);return(t>0?"-":"+")+r+i},Z:function(n){return n.toString().replace(/^.*\(([^)]+)\)$/,"$1")},"%":function(){return"%"}},Date.ext.aggregates={c:"locale",D:"%m/%d/%y",h:"%b",n:"\n",r:"%I:%M:%S %p",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},Date.ext.aggregates.z=Date.ext.formats.z(new Date),Date.ext.aggregates.Z=Date.ext.formats.Z(new Date),Date.ext.unsupported={},Date.prototype.strftime=function(n){var t,i;for((this.locale in Date.ext.locales)||(this.locale=this.locale.replace(/-[a-zA-Z]+$/,"")in Date.ext.locales?this.locale.replace(/-[a-zA-Z]+$/,""):"en-GB"),t=this;n.match(/%[cDhnrRtTxXzZ]/);)n=n.replace(/%([cDhnrRtTxXzZ])/g,function(n,i){var r=Date.ext.aggregates[i];return r=="locale"?Date.ext.locales[t.locale][i]:r});return i=n.replace(/%([aAbBCdegGHIjmMpPSuUVwWyY%])/g,function(n,i){var r=Date.ext.formats[i];return typeof r=="string"?t[r]():typeof r=="function"?r.call(t,t):typeof r=="object"&&typeof r[0]=="string"?Date.ext.util.xPad(t[r[0]](),r[1]):i}),t=null,i},printStackTrace.implementation=function(){},printStackTrace.implementation.prototype={run:function(n,t){return n=n||this.createException(),t=t||this.mode(n),t==="other"?this.other(arguments.callee):this[t](n)},createException:function(){try{this.undef()}catch(n){return n}},mode:function(n){return n.arguments&&n.stack?"chrome":typeof n.message=="string"&&typeof window!="undefined"&&window.opera?n.stacktrace?n.message.indexOf("\n")>-1&&n.message.split("\n").length>n.stacktrace.split("\n").length?"opera9":n.stack?n.stacktrace.indexOf("called from line")<0?"opera10b":"opera11":"opera10a":"opera9":n.stack?"firefox":"other"},instrumentFunction:function(n,t,i){n=n||window;var r=n[t];n[t]=function(){return i.call(this,printStackTrace().slice(4)),n[t]._instrumented.apply(this,arguments)},n[t]._instrumented=r},deinstrumentFunction:function(n,t){n[t].constructor===Function&&n[t]._instrumented&&n[t]._instrumented.constructor===Function&&(n[t]=n[t]._instrumented)},chrome:function(n){var t=(n.stack+"\n").replace(/^\S[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^([^\(]+?)([\n$])/gm,"{anonymous}()@$1$2").replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm,"{anonymous}()@$1").split("\n");return t.pop(),t},firefox:function(n){return n.stack.replace(/(?:\n@:0)?\s+$/m,"").replace(/^\(/gm,"{anonymous}(").split("\n")},opera11:function(n){for(var h="{anonymous}",s=/^.*line (\d+), column (\d+)(?: in (.+))? in (\S+):$/,u=n.stacktrace.split("\n"),e=[],t,f,r,i=0,o=u.length;i<o;i+=2)t=s.exec(u[i]),t&&(f=t[4]+":"+t[1]+":"+t[2],r=t[3]||"global code",r=r.replace(/<anonymous function: (\S+)>/,"$1").replace(/<anonymous function>/,h),e.push(r+"@"+f+" -- "+u[i+1].replace(/^\s+/,"")));return e},opera10b:function(n){for(var s="{anonymous}",o=/^(.*)@(.+):(\d+)$/,f=n.stacktrace.split("\n"),e=[],t,r,i=0,u=f.length;i<u;i++)t=o.exec(f[i]),t&&(r=t[1]?t[1]+"()":"global code",e.push(r+"@"+t[2]+":"+t[3]));return e},opera10a:function(n){for(var o="{anonymous}",s=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),e=[],i,u,t=0,f=r.length;t<f;t+=2)i=s.exec(r[t]),i&&(u=i[3]||o,e.push(u+"()@"+i[2]+":"+i[1]+" -- "+r[t+1].replace(/^\s+/,"")));return e},opera9:function(n){for(var o="{anonymous}",e=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),f=[],i,t=2,u=r.length;t<u;t+=2)i=e.exec(r[t]),i&&f.push(o+"()@"+i[2]+":"+i[1]+" -- "+r[t+1].replace(/^\s+/,""));return f},other:function(n){for(var r="{anonymous}",e=/function\s*([\w\-$]+)?\s*\(/i,t=[],u,i,f=10;n&&t.length<f;)u=e.test(n.toString())?RegExp.$1||r:r,i=Array.prototype.slice.call(n.arguments||[]),t[t.length]=u+"("+this.stringifyArguments(i)+")",n=n.caller;return t},stringifyArguments:function(n){for(var r=[],u=Array.prototype.slice,t,i=0;i<n.length;++i)t=n[i],t===undefined?r[i]="undefined":t===null?r[i]="null":t.constructor&&(t.constructor===Array?r[i]=t.length<3?"["+this.stringifyArguments(t)+"]":"["+this.stringifyArguments(u.call(t,0,1))+"..."+this.stringifyArguments(u.call(t,-1))+"]":t.constructor===Object?r[i]="#object":t.constructor===Function?r[i]="#function":t.constructor===String?r[i]='"'+t+'"':t.constructor===Number&&(r[i]=t));return r.join(",")},sourceCache:{},ajax:function(n){var t=this.createXMLHTTPObject();if(t)try{return t.open("GET",n,!1),t.send(null),t.responseText}catch(i){}return""},createXMLHTTPObject:function(){for(var i,t=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],n=0;n<t.length;n++)try{return i=t[n](),this.createXMLHTTPObject=t[n],i}catch(r){}},isSameDomain:function(n){return n.indexOf(location.hostname)!==-1},getSource:function(n){return n in this.sourceCache||(this.sourceCache[n]=this.ajax(n).split("\n")),this.sourceCache[n]},guessAnonymousFunctions:function(n){for(var u,t=0;t<n.length;++t){var s=/\{anonymous\}\(.*\)@(.*)/,c=/^(.*?)(?::(\d+))(?::(\d+))?(?: -- .+)?$/,e=n[t],o=s.exec(e);if(o){var r=c.exec(o[1]),i=r[1],f=r[2],h=r[3]||0;i&&this.isSameDomain(i)&&f&&(u=this.guessAnonymousFunction(i,f,h),n[t]=e.replace("{anonymous}",u))}}return n},guessAnonymousFunction:function(n,t){var r;try{r=this.findFunctionName(this.getSource(n),t)}catch(u){r="getSource failed with url: "+n+", exception: "+u.toString()}return r},findFunctionName:function(n,t){for(var s=/function\s+([^(]*?)\s*\(([^)]*)\)/,h=/['"]?([0-9A-Za-z_]+)['"]?\s*[:=]\s*function\b/,o=/['"]?([0-9A-Za-z_]+)['"]?\s*[:=]\s*(?:eval|new Function)\b/,u="",r,c=Math.min(t,20),i,e,f=0;f<c;++f)if(r=n[t-f-1],e=r.indexOf("//"),e>=0&&(r=r.substr(0,e)),r&&((u=r+u,i=h.exec(u),i&&i[1])||(i=s.exec(u),i&&i[1])||(i=o.exec(u),i&&i[1])))return i[1];return"(?)"}},CanvasRenderingContext2D.prototype.installPattern=function(n){if(typeof this.isPatternInstalled!="undefined")throw"Must un-install old line pattern before installing a new one.";this.isPatternInstalled=!0;var i=[0,0],t=[],f=this.beginPath,e=this.lineTo,r=this.moveTo,u=this.stroke;this.uninstallPattern=function(){this.beginPath=f,this.lineTo=e,this.moveTo=r,this.stroke=u,this.uninstallPattern=undefined,this.isPatternInstalled=undefined},this.beginPath=function(){t=[],f.call(this)},this.moveTo=function(n,i){t.push([[n,i]]),r.call(this,n,i)},this.lineTo=function(n,i){var r=t[t.length-1];r.push([n,i])},this.stroke=function(){var l,s,b,w,o,f,k;if(t.length===0){u.call(this);return}for(l=0;l<t.length;l++){var h=t[l],y=h[0][0],p=h[0][1];for(s=1;s<h.length;s++){b=h[s][0],w=h[s][1],this.save();var v=b-y,a=w-p,c=Math.sqrt(v*v+a*a),d=Math.atan2(a,v);for(this.translate(y,p),r.call(this,0,0),this.rotate(d),o=i[0],f=0;c>f;)k=n[o],f+=i[1]?i[1]:k,f>c?(i=[o,f-c],f=c):i=[(o+1)%n.length,0],o%2==0?e.call(this,f,0):r.call(this,f,0),o=(o+1)%n.length;this.restore(),y=b,p=w}}u.call(this),t=[]}},CanvasRenderingContext2D.prototype.uninstallPattern=function(){throw"Must install a line pattern before uninstalling it.";},DygraphOptions=function(){var n=function(n){this.dygraph_=n,this.yAxes_=[],this.xAxis_={},this.series_={},this.global_=this.dygraph_.attrs_,this.user_=this.dygraph_.user_attrs_||{},this.labels_=[],this.highlightSeries_=this.get("highlightSeriesOpts")||{},this.reparseSeries()};return n.AXIS_STRING_MAPPINGS_={y:0,Y:0,y1:0,Y1:0,y2:1,Y2:1},n.axisToIndex_=function(t){if(typeof t=="string"){if(n.AXIS_STRING_MAPPINGS_.hasOwnProperty(t))return n.AXIS_STRING_MAPPINGS_[t];throw"Unknown axis : "+t;}if(typeof t=="number"){if(t===0||t===1)return t;throw"Dygraphs only supports two y-axes, indexed from 0-1.";}if(t)throw"Unknown axis : "+t;return 0},n.prototype.reparseSeries=function(){var o=this.get("labels"),s,h,r,t,e;if(o){if(this.labels_=o.slice(1),this.yAxes_=[{series:[],options:{}}],this.xAxis_={options:{}},this.series_={},s=!this.user_.series,s){for(h=0,t=0;t<this.labels_.length;t++){var i=this.labels_[t],f=this.user_[i]||{},r=0,u=f.axis;typeof u=="object"&&(r=++h,this.yAxes_[r]={series:[i],options:u}),u||this.yAxes_[0].series.push(i),this.series_[i]={idx:t,yAxis:r,options:f}}for(t=0;t<this.labels_.length;t++){var i=this.labels_[t],f=this.series_[i].options,u=f.axis;if(typeof u=="string"){if(!this.series_.hasOwnProperty(u)){Dygraph.error("Series "+i+" wants to share a y-axis with series "+u+", which does not define its own axis.");return}r=this.series_[u].yAxis,this.series_[i].yAxis=r,this.yAxes_[r].series.push(i)}}}else for(t=0;t<this.labels_.length;t++){var i=this.labels_[t],f=this.user_.series[i]||{},r=n.axisToIndex_(f.axis);this.series_[i]={idx:t,yAxis:r,options:f},this.yAxes_[r]?this.yAxes_[r].series.push(i):this.yAxes_[r]={series:[i],options:{}}}e=this.user_.axes||{},Dygraph.update(this.yAxes_[0].options,e.y||{}),this.yAxes_.length>1&&Dygraph.update(this.yAxes_[1].options,e.y2||{}),Dygraph.update(this.xAxis_.options,e.x||{})}},n.prototype.get=function(n){var t=this.getGlobalUser_(n);return t!==null?t:this.getGlobalDefault_(n)},n.prototype.getGlobalUser_=function(n){return this.user_.hasOwnProperty(n)?this.user_[n]:null},n.prototype.getGlobalDefault_=function(n){return this.global_.hasOwnProperty(n)?this.global_[n]:Dygraph.DEFAULT_ATTRS.hasOwnProperty(n)?Dygraph.DEFAULT_ATTRS[n]:null},n.prototype.getForAxis=function(n,t){var i,e,o,f,r,u;if(typeof t=="number")i=t,e=i===0?"y":"y2";else{if(t=="y1"&&(t="y"),t=="y")i=0;else if(t=="y2")i=1;else if(t=="x")i=-1;else throw"Unknown axis "+t;e=t}return(o=i==-1?this.xAxis_:this.yAxes_[i],o&&(f=o.options,f.hasOwnProperty(n)))?f[n]:(r=this.getGlobalUser_(n),r!==null)?r:(u=Dygraph.DEFAULT_ATTRS.axes[e],u.hasOwnProperty(n))?u[n]:this.getGlobalDefault_(n)},n.prototype.getForSeries=function(n,t){if(t===this.dygraph_.getHighlightSeries()&&this.highlightSeries_.hasOwnProperty(n))return this.highlightSeries_[n];if(!this.series_.hasOwnProperty(t))throw"Unknown series: "+t;var r=this.series_[t],i=r.options;return i.hasOwnProperty(n)?i[n]:this.getForAxis(n,r.yAxis)},n.prototype.numAxes=function(){return this.yAxes_.length},n.prototype.axisForSeries=function(n){return this.series_[n].yAxis},n.prototype.axisOptions=function(n){return this.yAxes_[n].options},n.prototype.seriesForAxis=function(n){return this.yAxes_[n].series},n.prototype.seriesNames=function(){return this.labels_},n}(),DygraphLayout=function(n){this.dygraph_=n,this.points=[],this.setNames=[],this.annotations=[],this.yAxes_=null,this.xTicks_=null,this.yTicks_=null},DygraphLayout.prototype.attr_=function(n){return this.dygraph_.attr_(n)},DygraphLayout.prototype.addDataset=function(n,t){this.points.push(t),this.setNames.push(n)},DygraphLayout.prototype.getPlotArea=function(){return this.area_},DygraphLayout.prototype.computePlotArea=function(){var n={x:0,y:0},t;n.w=this.dygraph_.width_-n.x-this.attr_("rightGap"),n.h=this.dygraph_.height_,t={chart_div:this.dygraph_.graphDiv,reserveSpaceLeft:function(t){var i={x:n.x,y:n.y,w:t,h:n.h};return n.x+=t,n.w-=t,i},reserveSpaceRight:function(t){var i={x:n.x+n.w-t,y:n.y,w:t,h:n.h};return n.w-=t,i},reserveSpaceTop:function(t){var i={x:n.x,y:n.y,w:n.w,h:t};return n.y+=t,n.h-=t,i},reserveSpaceBottom:function(t){var i={x:n.x,y:n.y+n.h-t,w:n.w,h:t};return n.h-=t,i},chartRect:function(){return{x:n.x,y:n.y,w:n.w,h:n.h}}},this.dygraph_.cascadeEvents_("layout",t),this.area_=n},DygraphLayout.prototype.setAnnotations=function(n){var r,t,i;for(this.annotations=[],r=this.attr_("xValueParser")||function(n){return n},t=0;t<n.length;t++){if(i={},!n[t].xval&&n[t].x===undefined){this.dygraph_.error("Annotations must have an 'x' property");return}if(n[t].icon&&!(n[t].hasOwnProperty("width")&&n[t].hasOwnProperty("height"))){this.dygraph_.error("Must set width and height when setting annotation.icon property");return}Dygraph.update(i,n[t]),i.xval||(i.xval=r(i.x)),this.annotations.push(i)}},DygraphLayout.prototype.setXTicks=function(n){this.xTicks_=n},DygraphLayout.prototype.setYAxes=function(n){this.yAxes_=n},DygraphLayout.prototype.evaluate=function(){this._evaluateLimits(),this._evaluateLineCharts(),this._evaluateLineTicks(),this._evaluateAnnotations()},DygraphLayout.prototype._evaluateLimits=function(){var i=this.dygraph_.xAxisRange(),r,t,n;for(this.minxval=i[0],this.maxxval=i[1],r=i[1]-i[0],this.xscale=r!==0?1/r:1,t=0;t<this.yAxes_.length;t++)n=this.yAxes_[t],n.minyval=n.computedValueRange[0],n.maxyval=n.computedValueRange[1],n.yrange=n.maxyval-n.minyval,n.yscale=n.yrange!==0?1/n.yrange:1,n.g.attr_("logscale")&&(n.ylogrange=Dygraph.log10(n.maxyval)-Dygraph.log10(n.minyval),n.ylogscale=n.ylogrange!==0?1/n.ylogrange:1,(!isFinite(n.ylogrange)||isNaN(n.ylogrange))&&n.g.error("axis "+t+" of graph at "+n.g+" can't be displayed in log scale for range ["+n.minyval+" - "+n.maxyval+"]"))},DygraphLayout._calcYNormal=function(n,t,i){return i?1-(Dygraph.log10(t)-Dygraph.log10(n.minyval))*n.ylogscale:1-(t-n.minyval)*n.yscale},DygraphLayout.prototype._evaluateLineCharts=function(){for(var s=this.attr_("connectSeparatedPoints"),h=this.attr_("stackedGraph"),c=this.attr_("errorBars")||this.attr_("customBars"),f,n,t,i=0;i<this.points.length;i++){var e=this.points[i],o=this.setNames[i],r=this.dygraph_.axisPropertiesForSeries(o),u=this.dygraph_.attributes_.getForSeries("logscale",o);for(f=0;f<e.length;f++)n=e[f],n.x=(n.xval-this.minxval)*this.xscale,t=n.yval,h&&(n.y_stacked=DygraphLayout._calcYNormal(r,n.yval_stacked,u),t===null||isNaN(t)||(t=n.yval_stacked)),t===null&&(t=NaN,s||(n.yval=NaN)),n.y=DygraphLayout._calcYNormal(r,t,u),c&&(n.y_top=DygraphLayout._calcYNormal(r,t-n.yval_minus,u),n.y_bottom=DygraphLayout._calcYNormal(r,t+n.yval_plus,u))}},DygraphLayout.parseFloat_=function(n){return n===null?NaN:n},DygraphLayout.prototype._evaluateLineTicks=function(){var n,i,u,t,f,r;for(this.xticks=[],n=0;n<this.xTicks_.length;n++)i=this.xTicks_[n],u=i.label,t=this.xscale*(i.v-this.minxval),t>=0&&t<=1&&this.xticks.push([t,u]);for(this.yticks=[],n=0;n<this.yAxes_.length;n++)for(f=this.yAxes_[n],r=0;r<f.ticks.length;r++)i=f.ticks[r],u=i.label,t=this.dygraph_.toPercentYCoord(i.v,n),t>=0&&t<=1&&this.yticks.push([n,t,u])},DygraphLayout.prototype._evaluateAnnotations=function(){for(var f={},r,i,e,t,u,n=0;n<this.annotations.length;n++)r=this.annotations[n],f[r.xval+","+r.series]=r;if(this.annotated_points=[],this.annotations&&this.annotations.length)for(i=0;i<this.points.length;i++)for(e=this.points[i],n=0;n<e.length;n++)t=e[n],u=t.xval+","+t.name,u in f&&(t.annotation=f[u],this.annotated_points.push(t))},DygraphLayout.prototype.removeAllDatasets=function(){delete this.points,delete this.setNames,delete this.setPointsLengths,delete this.setPointsOffsets,this.points=[],this.setNames=[],this.setPointsLengths=[],this.setPointsOffsets=[]},DygraphCanvasRenderer=function(n,t,i,r){if(this.dygraph_=n,this.layout=r,this.element=t,this.elementContext=i,this.container=this.element.parentNode,this.height=this.element.height,this.width=this.element.width,!this.isIE&&!DygraphCanvasRenderer.isSupported(this.element))throw"Canvas is not supported.";if(this.area=r.getPlotArea(),this.container.style.position="relative",this.container.style.width=this.width+"px",this.dygraph_.isUsingExcanvas_)this._createIEClipArea();else if(!Dygraph.isAndroid()){var u=this.dygraph_.canvas_ctx_;u.beginPath(),u.rect(this.area.x,this.area.y,this.area.w,this.area.h),u.clip(),u=this.dygraph_.hidden_ctx_,u.beginPath(),u.rect(this.area.x,this.area.y,this.area.w,this.area.h),u.clip()}},DygraphCanvasRenderer.prototype.attr_=function(n,t){return this.dygraph_.attr_(n,t)},DygraphCanvasRenderer.prototype.clear=function(){var n;if(this.isIE)try{this.clearDelay&&(this.clearDelay.cancel(),this.clearDelay=null),n=this.elementContext}catch(t){return}n=this.elementContext,n.clearRect(0,0,this.width,this.height)},DygraphCanvasRenderer.isSupported=function(n){var i=null,t,r;try{i=typeof n=="undefined"||n===null?document.createElement("canvas"):n,i.getContext("2d")}catch(u){return(t=navigator.appVersion.match(/MSIE (\d\.\d)/),r=navigator.userAgent.toLowerCase().indexOf("opera")!=-1,!t||t[1]<6||r)?!1:!0}return!0},DygraphCanvasRenderer.prototype.render=function(){this._updatePoints(),this._renderLineChart()},DygraphCanvasRenderer.prototype._createIEClipArea=function(){function f(n){if(n.w!==0&&n.h!==0){var t=document.createElement("div");t.className=o,t.style.backgroundColor=e,t.style.position="absolute",t.style.left=n.x+"px",t.style.top=n.y+"px",t.style.width=n.w+"px",t.style.height=n.h+"px",r.appendChild(t)}}for(var o="dygraph-clip-div",r=this.dygraph_.graphDiv,e,t,u,n,i=r.childNodes.length-1;i>=0;i--)r.childNodes[i].className==o&&r.removeChild(r.childNodes[i]);for(e=document.bgColor,t=this.dygraph_.graphDiv;t!=document;){if(u=t.currentStyle.backgroundColor,u&&u!="transparent"){e=u;break}t=t.parentNode}n=this.area,f({x:0,y:0,w:n.x,h:this.height}),f({x:n.x,y:0,w:this.width-n.x,h:n.y}),f({x:n.x+n.w,y:0,w:this.width-n.x-n.w,h:this.height}),f({x:n.x,y:n.y+n.h,w:this.width-n.x,h:this.height-n.h-n.y})},DygraphCanvasRenderer._getIteratorPredicate=function(n){return n?DygraphCanvasRenderer._predicateThatSkipsEmptyPoints:null},DygraphCanvasRenderer._predicateThatSkipsEmptyPoints=function(n,t){return n[t].yval!==null},DygraphCanvasRenderer._drawStyledLine=function(n,t,i,r,u,f,e){var s=n.dygraph,a=s.getOption("stepPlot",n.setName),l;Dygraph.isArrayLike(r)||(r=null);var v=s.getOption("drawGapEdgePoints",n.setName),c=n.points,y=Dygraph.createIterator(c,0,c.length,DygraphCanvasRenderer._getIteratorPredicate(s.getOption("connectSeparatedPoints"))),h=r&&r.length>=2,o=n.drawingContext;o.save(),h&&o.installPattern(r),l=DygraphCanvasRenderer._drawSeries(n,y,i,e,u,v,a,t),DygraphCanvasRenderer._drawPointsOnLine(n,l,f,t,e),h&&o.uninstallPattern(),o.restore()},DygraphCanvasRenderer._drawSeries=function(n,t,i,r,u,f,e,o){var l=null,a=null,y=null,v,s,k=[],d=!0,h=n.drawingContext,c,w;h.beginPath(),h.strokeStyle=o,h.lineWidth=i;var b=t.array_,p=t.end_,g=t.predicate_;for(c=t.start_;c<p;c++){if(s=b[c],g){while(c<p&&!g(b,c))c++;if(c==p)break;s=b[c]}s.canvasy===null||s.canvasy!=s.canvasy?(e&&l!==null&&(h.moveTo(l,a),h.lineTo(s.canvasx,a)),l=a=null):(v=!1,(f||!l)&&(t.nextIdx_=c,t.next(),y=t.hasNext?t.peek.canvasy:null,w=y===null||y!=y,v=!l&&w,f&&(!d&&!l||t.hasNext&&w)&&(v=!0)),l!==null?i&&(e&&(h.moveTo(l,a),h.lineTo(s.canvasx,a)),h.lineTo(s.canvasx,s.canvasy)):h.moveTo(s.canvasx,s.canvasy),(u||v)&&k.push([s.canvasx,s.canvasy,s.idx]),l=s.canvasx,a=s.canvasy),d=!1}return h.stroke(),k},DygraphCanvasRenderer._drawPointsOnLine=function(n,t,i,r,u){for(var o=n.drawingContext,e,f=0;f<t.length;f++)e=t[f],o.save(),i(n.dygraph,n.setName,o,e[0],e[1],r,u,e[2]),o.restore()},DygraphCanvasRenderer.prototype._updatePoints=function(){for(var u=this.layout.points,i,t,n,r=u.length;r--;)for(i=u[r],t=i.length;t--;)n=i[t],n.canvasx=this.area.w*n.x+this.area.x,n.canvasy=this.area.h*n.y+this.area.y},DygraphCanvasRenderer.prototype._renderLineChart=function(n,t){var e=t||this.elementContext,r,s=this.layout.points,a=this.layout.setNames,i,v,u,o,y,p,w,f,b,c,h,l;for(this.colors=this.dygraph_.colorsMap_,v=this.attr_("plotter"),u=v,Dygraph.isArrayLike(u)||(u=[u]),o={},r=0;r<a.length;r++)(i=a[r],y=this.attr_("plotter",i),y!=v)&&(o[i]=y);for(r=0;r<u.length;r++)for(p=u[r],w=r==u.length-1,f=0;f<s.length;f++)if(i=a[f],!n||i==n){if(b=s[f],c=p,i in o)if(w)c=o[i];else continue;h=this.colors[i],l=this.dygraph_.getOption("strokeWidth",i),e.save(),e.strokeStyle=h,e.lineWidth=l,c({points:b,setName:i,drawingContext:e,color:h,strokeWidth:l,dygraph:this.dygraph_,axis:this.dygraph_.axisPropertiesForSeries(i),plotArea:this.area,seriesIndex:f,seriesCount:s.length,singleSeriesName:n,allSeriesPoints:s}),e.restore()}},DygraphCanvasRenderer._Plotters={linePlotter:function(n){DygraphCanvasRenderer._linePlotter(n)},fillPlotter:function(n){DygraphCanvasRenderer._fillPlotter(n)},errorPlotter:function(n){DygraphCanvasRenderer._errorPlotter(n)}},DygraphCanvasRenderer._linePlotter=function(n){var i=n.dygraph,t=n.setName,r=n.strokeWidth,o=i.getOption("strokeBorderWidth",t),s=i.getOption("drawPointCallback",t)||Dygraph.Circles.DEFAULT,e=i.getOption("strokePattern",t),u=i.getOption("drawPoints",t),f=i.getOption("pointSize",t);o&&r&&DygraphCanvasRenderer._drawStyledLine(n,i.getOption("strokeBorderColor",t),r+2*o,e,u,s,f),DygraphCanvasRenderer._drawStyledLine(n,n.color,r,e,u,s,f)},DygraphCanvasRenderer._errorPlotter=function(n){var u=n.dygraph,h=n.setName,p=u.getOption("errorBars")||u.getOption("customBars"),v,l,t;if(p){v=u.getOption("fillGraph",h),v&&u.warn("Can't use fillGraph option with error bars");var i=n.drawingContext,k=n.color,b=u.getOption("fillAlpha",h),o=u.getOption("stepPlot",h),a=n.points,y=Dygraph.createIterator(a,0,a.length,DygraphCanvasRenderer._getIteratorPredicate(u.getOption("connectSeparatedPoints"))),r,f=NaN,s=NaN,e=[-1,-1],c=new RGBColorParser(k),w="rgba("+c.r+","+c.g+","+c.b+","+b+")";for(i.fillStyle=w,i.beginPath(),l=function(n){return n===null||n===undefined||isNaN(n)};y.hasNext;){if(t=y.next(),!o&&l(t.y)||o&&!isNaN(s)&&l(s)){f=NaN;continue}o?(r=[t.y_bottom,t.y_top],s=t.y):r=[t.y_bottom,t.y_top],r[0]=n.plotArea.h*r[0]+n.plotArea.y,r[1]=n.plotArea.h*r[1]+n.plotArea.y,isNaN(f)||(o?(i.moveTo(f,e[0]),i.lineTo(t.canvasx,e[0]),i.lineTo(t.canvasx,e[1])):(i.moveTo(f,e[0]),i.lineTo(t.canvasx,r[0]),i.lineTo(t.canvasx,r[1])),i.lineTo(f,e[1]),i.closePath()),e=r,f=t.canvasx}i.fill()}},DygraphCanvasRenderer._fillPlotter=function(n){var i,s,h,ut,e,y,nt,b,t,p;if(!n.singleSeriesName&&n.seriesIndex===0){for(i=n.dygraph,s=i.getLabels().slice(1),h=s.length;h>=0;h--)i.visibility()[h]||s.splice(h,1);if(ut=function(){for(var n=0;n<s.length;n++)if(i.getOption("fillGraph",s[n]))return!0;return!1}(),ut){var r=n.drawingContext,v=n.plotArea,it=n.allSeriesPoints,ot=it.length,et=i.getOption("fillAlpha"),ft=i.getOption("stackedGraph"),ct=i.getColors(),l={},f,d;for(e=ot-1;e>=0;e--)if(y=s[e],i.getOption("fillGraph",y)){var w=i.getOption("stepPlot",y),st=ct[e],tt=i.axisPropertiesForSeries(y),u=1+tt.minyval*tt.yscale;u<0?u=0:u>1&&(u=1),u=v.h*u+v.y;var rt=it[e],g=Dygraph.createIterator(rt,0,rt.length,DygraphCanvasRenderer._getIteratorPredicate(i.getOption("connectSeparatedPoints"))),a=NaN,o=[-1,-1],c,k=new RGBColorParser(st),ht="rgba("+k.r+","+k.g+","+k.b+","+et+")";for(r.fillStyle=ht,r.beginPath(),b=!0;g.hasNext;){if(t=g.next(),!Dygraph.isOK(t.y)){a=NaN,t.y_stacked===null||isNaN(t.y_stacked)||(l[t.canvasx]=v.h*t.y_stacked+v.y);continue}if(ft){if(b||nt!=t.xval)b=!1,nt=t.xval;else continue;f=l[t.canvasx],p=f===undefined?u:d?f[0]:f,c=[t.canvasy,p],l[t.canvasx]=w?o[0]===-1?[t.canvasy,u]:[t.canvasy,o[0]]:t.canvasy}else c=[t.canvasy,u];isNaN(a)||(r.moveTo(a,o[0]),w?r.lineTo(t.canvasx,o[0]):r.lineTo(t.canvasx,c[0]),d&&f?r.lineTo(t.canvasx,f[1]):r.lineTo(t.canvasx,c[1]),r.lineTo(a,o[1]),r.closePath()),o=c,a=t.canvasx}d=w,r.fill()}}}},Dygraph=function(n,t,i,r){this.is_initial_draw_=!0,this.readyFns_=[],r!==undefined?(this.warn("Using deprecated four-argument dygraph constructor"),this.__old_init__(n,t,i,r)):this.__init__(n,t,i)},Dygraph.NAME="Dygraph",Dygraph.VERSION="1.0.0",Dygraph.__repr__=function(){return"["+this.NAME+" "+this.VERSION+"]"},Dygraph.toString=function(){return this.__repr__()},Dygraph.DEFAULT_ROLL_PERIOD=1,Dygraph.DEFAULT_WIDTH=480,Dygraph.DEFAULT_HEIGHT=320,Dygraph.ANIMATION_STEPS=12,Dygraph.ANIMATION_DURATION=200,Dygraph.KMB_LABELS=["K","M","B","T","Q"],Dygraph.KMG2_BIG_LABELS=["k","M","G","T","P","E","Z","Y"],Dygraph.KMG2_SMALL_LABELS=["m","u","n","p","f","a","z","y"],Dygraph.numberValueFormatter=function(n,t){var y=t("sigFigs"),c,e,a,p,s,h,u;if(y!==null)return Dygraph.floatFormat(n,y);var o=t("digitsAfterDecimal"),w=t("maxNumberWidth"),l=t("labelsKMB"),v=t("labelsKMG2"),f;if(f=n!==0&&(Math.abs(n)>=Math.pow(10,w)||Math.abs(n)<Math.pow(10,-o))?n.toExponential(o):""+Dygraph.round_(n,o),l||v){for(e=[],a=[],l&&(c=1e3,e=Dygraph.KMB_LABELS),v&&(l&&Dygraph.warn("Setting both labelsKMB and labelsKMG2. Pick one!"),c=1024,e=Dygraph.KMG2_BIG_LABELS,a=Dygraph.KMG2_SMALL_LABELS),p=Math.abs(n),s=Dygraph.pow(c,e.length),h=e.length-1;h>=0;h--,s/=c)if(p>=s){f=Dygraph.round_(n/s,o)+e[h];break}v&&(u=String(n.toExponential()).split("e-"),u.length===2&&u[1]>=3&&u[1]<=24&&(f=u[1]%3>0?Dygraph.round_(u[0]/Dygraph.pow(10,u[1]%3),o):Number(u[0]).toFixed(2),f+=a[Math.floor(u[1]/3)-1]))}return f},Dygraph.numberAxisLabelFormatter=function(n,t,i,r){return Dygraph.numberValueFormatter(n,i,r)},Dygraph.dateString_=function(n){var r=Dygraph.zeropad,t=new Date(n),e=""+t.getFullYear(),o=r(t.getMonth()+1),f=r(t.getDate()),i="",u=t.getHours()*3600+t.getMinutes()*60+t.getSeconds();return u&&(i=" "+Dygraph.hmsString_(n)),e+"/"+o+"/"+f+i},Dygraph.dateAxisFormatter=function(n,t){if(t>=Dygraph.DECADAL)return n.strftime("%Y");if(t>=Dygraph.MONTHLY)return n.strftime("%b %y");var i=n.getHours()*3600+n.getMinutes()*60+n.getSeconds()+n.getMilliseconds();return i===0||t>=Dygraph.DAILY?new Date(n.getTime()+36e5).strftime("%d%b"):Dygraph.hmsString_(n.getTime())},Dygraph.Plotters=DygraphCanvasRenderer._Plotters,Dygraph.DEFAULT_ATTRS={highlightCircleSize:3,highlightSeriesOpts:null,highlightSeriesBackgroundAlpha:.5,labelsDivWidth:250,labelsDivStyles:{},labelsSeparateLines:!1,labelsShowZeroValues:!0,labelsKMB:!1,labelsKMG2:!1,showLabelsOnHighlight:!0,digitsAfterDecimal:2,maxNumberWidth:6,sigFigs:null,strokeWidth:1,strokeBorderWidth:0,strokeBorderColor:"white",axisTickSize:3,axisLabelFontSize:14,xAxisLabelWidth:50,yAxisLabelWidth:50,rightGap:5,showRoller:!1,xValueParser:Dygraph.dateParser,delimiter:",",sigma:2,errorBars:!1,fractions:!1,wilsonInterval:!0,customBars:!1,fillGraph:!1,fillAlpha:.15,connectSeparatedPoints:!1,stackedGraph:!1,stackedGraphNaNFill:"all",hideOverlayOnMouseOut:!0,legend:"onmouseover",stepPlot:!1,avoidMinZero:!1,xRangePad:0,yRangePad:null,drawAxesAtZero:!1,titleHeight:28,xLabelHeight:18,yLabelWidth:18,drawXAxis:!0,drawYAxis:!0,axisLineColor:"black",axisLineWidth:.3,gridLineWidth:.3,axisLabelColor:"black",axisLabelFont:"Arial",axisLabelWidth:50,drawYGrid:!0,drawXGrid:!0,gridLineColor:"rgb(128,128,128)",interactionModel:null,animatedZooms:!1,showRangeSelector:!1,rangeSelectorHeight:40,rangeSelectorPlotStrokeColor:"#808FAB",rangeSelectorPlotFillColor:"#A7B1C4",plotter:[Dygraph.Plotters.fillPlotter,Dygraph.Plotters.errorPlotter,Dygraph.Plotters.linePlotter],plugins:[],axes:{x:{pixelsPerLabel:60,axisLabelFormatter:Dygraph.dateAxisFormatter,valueFormatter:Dygraph.dateString_,drawGrid:!0,independentTicks:!0,ticker:null},y:{pixelsPerLabel:30,valueFormatter:Dygraph.numberValueFormatter,axisLabelFormatter:Dygraph.numberAxisLabelFormatter,drawGrid:!0,independentTicks:!0,ticker:null},y2:{pixelsPerLabel:30,valueFormatter:Dygraph.numberValueFormatter,axisLabelFormatter:Dygraph.numberAxisLabelFormatter,drawGrid:!1,independentTicks:!1,ticker:null}}},Dygraph.HORIZONTAL=1,Dygraph.VERTICAL=2,Dygraph.PLUGINS=[],Dygraph.addedAnnotationCSS=!1,Dygraph.prototype.__old_init__=function(n,t,i,r){var f,u;if(i!==null){for(f=["Date"],u=0;u<i.length;u++)f.push(i[u]);Dygraph.update(r,{labels:f})}this.__init__(n,t,r)},Dygraph.prototype.__init__=function(n,t,i){var s,o,u,f,r,h,e;if(/MSIE/.test(navigator.userAgent)&&!window.opera&&typeof G_vmlCanvasManager!="undefined"&&document.readyState!="complete"){s=this,setTimeout(function(){s.__init__(n,t,i)},100);return}if((i===null||i===undefined)&&(i={}),i=Dygraph.mapLegacyOptions_(i),typeof n=="string"&&(n=document.getElementById(n)),!n){Dygraph.error("Constructing dygraph with a non-existent div!");return}for(this.isUsingExcanvas_=typeof G_vmlCanvasManager!="undefined",this.maindiv_=n,this.file_=t,this.rollPeriod_=i.rollPeriod||Dygraph.DEFAULT_ROLL_PERIOD,this.previousVerticalX_=-1,this.fractions_=i.fractions||!1,this.dateWindow_=i.dateWindow||null,this.annotations_=[],this.zoomed_x_=!1,this.zoomed_y_=!1,n.innerHTML="",n.style.width===""&&i.width&&(n.style.width=i.width+"px"),n.style.height===""&&i.height&&(n.style.height=i.height+"px"),n.style.height===""&&n.clientHeight===0&&(n.style.height=Dygraph.DEFAULT_HEIGHT+"px",n.style.width===""&&(n.style.width=Dygraph.DEFAULT_WIDTH+"px")),this.width_=n.clientWidth||i.width||0,this.height_=n.clientHeight||i.height||0,i.stackedGraph&&(i.fillGraph=!0),this.user_attrs_={},Dygraph.update(this.user_attrs_,i),this.attrs_={},Dygraph.updateDeep(this.attrs_,Dygraph.DEFAULT_ATTRS),this.boundaryIds_=[],this.setIndexByName_={},this.datasetIndex_=[],this.registeredEvents_=[],this.eventListeners_={},this.attributes_=new DygraphOptions(this),this.createInterface_(),this.plugins_=[],o=Dygraph.PLUGINS.concat(this.getOption("plugins")),u=0;u<o.length;u++){var v=o[u],c=new v,l={plugin:c,events:{},options:{},pluginOptions:{}},a=c.activate(this);for(r in a)l.events[r]=a[r];this.plugins_.push(l)}for(u=0;u<this.plugins_.length;u++){f=this.plugins_[u];for(r in f.events)f.events.hasOwnProperty(r)&&(h=f.events[r],e=[f.plugin,h],r in this.eventListeners_?this.eventListeners_[r].push(e):this.eventListeners_[r]=[e])}this.createDragInterface_(),this.start_()},Dygraph.prototype.cascadeEvents_=function(n,t){var i,u,r,e,f;if(!(n in this.eventListeners_))return!0;if(i={dygraph:this,cancelable:!1,defaultPrevented:!1,preventDefault:function(){if(!i.cancelable)throw"Cannot call preventDefault on non-cancelable event.";i.defaultPrevented=!0},propagationStopped:!1,stopPropagation:function(){i.propagationStopped=!0}},Dygraph.update(i,t),u=this.eventListeners_[n],u)for(r=u.length-1;r>=0;r--)if(e=u[r][0],f=u[r][1],f.call(e,i),i.propagationStopped)break;return i.defaultPrevented},Dygraph.prototype.isZoomed=function(n){if(n===null||n===undefined)return this.zoomed_x_||this.zoomed_y_;if(n==="x")return this.zoomed_x_;if(n==="y")return this.zoomed_y_;throw"axis parameter is ["+n+"] must be null, 'x' or 'y'.";},Dygraph.prototype.toString=function(){var n=this.maindiv_,t=n&&n.id?n.id:n;return"[Dygraph "+t+"]"},Dygraph.prototype.attr_=function(n,t){return t?this.attributes_.getForSeries(n,t):this.attributes_.get(n)},Dygraph.prototype.getOption=function(n,t){return this.attr_(n,t)},Dygraph.prototype.getOptionForAxis=function(n,t){return this.attributes_.getForAxis(n,t)},Dygraph.prototype.optionsViewForAxis_=function(n){var t=this;return function(i){var r=t.user_attrs_.axes;return r&&r[n]&&r[n].hasOwnProperty(i)?r[n][i]:typeof t.user_attrs_[i]!="undefined"?t.user_attrs_[i]:(r=t.attrs_.axes,r&&r[n]&&r[n].hasOwnProperty(i))?r[n][i]:n=="y"&&t.axes_[0].hasOwnProperty(i)?t.axes_[0][i]:n=="y2"&&t.axes_[1].hasOwnProperty(i)?t.axes_[1][i]:t.attr_(i)}},Dygraph.prototype.rollPeriod=function(){return this.rollPeriod_},Dygraph.prototype.xAxisRange=function(){return this.dateWindow_?this.dateWindow_:this.xAxisExtremes()},Dygraph.prototype.xAxisExtremes=function(){var n=this.attr_("xRangePad")/this.plotter_.area.w,i,t,r;return this.numRows()===0?[0-n,1+n]:(i=this.rawData_[0][0],t=this.rawData_[this.rawData_.length-1][0],n&&(r=t-i,i-=r*n,t+=r*n),[i,t])},Dygraph.prototype.yAxisRange=function(n){if(typeof n=="undefined"&&(n=0),n<0||n>=this.axes_.length)return null;var t=this.axes_[n];return[t.computedValueRange[0],t.computedValueRange[1]]},Dygraph.prototype.yAxisRanges=function(){for(var t=[],n=0;n<this.axes_.length;n++)t.push(this.yAxisRange(n));return t},Dygraph.prototype.toDomCoords=function(n,t,i){return[this.toDomXCoord(n),this.toDomYCoord(t,i)]},Dygraph.prototype.toDomXCoord=function(n){if(n===null)return null;var i=this.plotter_.area,t=this.xAxisRange();return i.x+(n-t[0])/(t[1]-t[0])*i.w},Dygraph.prototype.toDomYCoord=function(n,t){var r=this.toPercentYCoord(n,t),i;return r===null?null:(i=this.plotter_.area,i.y+r*i.h)},Dygraph.prototype.toDataCoords=function(n,t,i){return[this.toDataXCoord(n),this.toDataYCoord(t,i)]},Dygraph.prototype.toDataXCoord=function(n){if(n===null)return null;var i=this.plotter_.area,t=this.xAxisRange();return t[0]+(n-i.x)/i.w*(t[1]-t[0])},Dygraph.prototype.toDataYCoord=function(n,t){var r,i;if(n===null)return null;if(r=this.plotter_.area,i=this.yAxisRange(t),typeof t=="undefined"&&(t=0),this.axes_[t].logscale){var o=(n-r.y)/r.h,u=Dygraph.log10(i[1]),e=u-o*(u-Dygraph.log10(i[0]));return Math.pow(Dygraph.LOG_SCALE,e)}return i[0]+(r.y+r.h-n)/r.h*(i[1]-i[0])},Dygraph.prototype.toPercentYCoord=function(n,t){var i,u,f,r;return n===null?null:(typeof t=="undefined"&&(t=0),i=this.yAxisRange(t),f=this.attributes_.getForAxis("logscale",t),f?(r=Dygraph.log10(i[1]),u=(r-Dygraph.log10(n))/(r-Dygraph.log10(i[0]))):u=(i[1]-n)/(i[1]-i[0]),u)},Dygraph.prototype.toPercentXCoord=function(n){if(n===null)return null;var t=this.xAxisRange();return(n-t[0])/(t[1]-t[0])},Dygraph.prototype.numColumns=function(){return this.rawData_?this.rawData_[0]?this.rawData_[0].length:this.attr_("labels").length:0},Dygraph.prototype.numRows=function(){return this.rawData_?this.rawData_.length:0},Dygraph.prototype.getValue=function(n,t){return n<0||n>this.rawData_.length?null:t<0||t>this.rawData_[n].length?null:this.rawData_[n][t]},Dygraph.prototype.createInterface_=function(){var t=this.maindiv_,n;this.graphDiv=document.createElement("div"),this.graphDiv.style.textAlign="left",t.appendChild(this.graphDiv),this.canvas_=Dygraph.createCanvas(),this.canvas_.style.position="absolute",this.hidden_=this.createPlotKitCanvas_(this.canvas_),this.resizeElements_(),this.canvas_ctx_=Dygraph.getContext(this.canvas_),this.hidden_ctx_=Dygraph.getContext(this.hidden_),this.graphDiv.appendChild(this.hidden_),this.graphDiv.appendChild(this.canvas_),this.mouseEventElement_=this.createMouseEventElement_(),this.layout_=new DygraphLayout(this),n=this,this.mouseMoveHandler_=function(t){n.mouseMove_(t)},this.mouseOutHandler_=function(t){var r=t.target||t.fromElement,i=t.relatedTarget||t.toElement;Dygraph.isNodeContainedBy(r,n.graphDiv)&&!Dygraph.isNodeContainedBy(i,n.graphDiv)&&n.mouseOut_(t)},this.addAndTrackEvent(window,"mouseout",this.mouseOutHandler_),this.addAndTrackEvent(this.mouseEventElement_,"mousemove",this.mouseMoveHandler_),this.resizeHandler_||(this.resizeHandler_=function(){n.resize()},this.addAndTrackEvent(window,"resize",this.resizeHandler_))},Dygraph.prototype.resizeElements_=function(){this.graphDiv.style.width=this.width_+"px",this.graphDiv.style.height=this.height_+"px",this.canvas_.width=this.width_,this.canvas_.height=this.height_,this.canvas_.style.width=this.width_+"px",this.canvas_.style.height=this.height_+"px",this.hidden_.width=this.width_,this.hidden_.height=this.height_,this.hidden_.style.width=this.width_+"px",this.hidden_.style.height=this.height_+"px"},Dygraph.prototype.destroy=function(){var t,n;this.canvas_ctx_.restore(),this.hidden_ctx_.restore(),t=function(n){while(n.hasChildNodes())t(n.firstChild),n.removeChild(n.firstChild)},this.removeTrackedEvents_(),Dygraph.removeEvent(window,"mouseout",this.mouseOutHandler_),Dygraph.removeEvent(this.mouseEventElement_,"mousemove",this.mouseMoveHandler_),Dygraph.removeEvent(window,"resize",this.resizeHandler_),this.resizeHandler_=null,t(this.maindiv_),n=function(n){for(var t in n)typeof n[t]=="object"&&(n[t]=null)},n(this.layout_),n(this.plotter_),n(this)},Dygraph.prototype.createPlotKitCanvas_=function(n){var t=Dygraph.createCanvas();return t.style.position="absolute",t.style.top=n.style.top,t.style.left=n.style.left,t.width=this.width_,t.height=this.height_,t.style.width=this.width_+"px",t.style.height=this.height_+"px",t},Dygraph.prototype.createMouseEventElement_=function(){if(this.isUsingExcanvas_){var n=document.createElement("div");return n.style.position="absolute",n.style.backgroundColor="white",n.style.filter="alpha(opacity=0)",n.style.width=this.width_+"px",n.style.height=this.height_+"px",this.graphDiv.appendChild(n),n}return this.canvas_},Dygraph.prototype.setColors_=function(){var u=this.getLabels(),i=u.length-1,r,n,t;if(this.colors_=[],this.colorsMap_={},r=this.attr_("colors"),r)for(n=0;n<i;n++)this.visibility()[n]&&(t=r[n%r.length],this.colors_.push(t),this.colorsMap_[u[1+n]]=t);else{var e=this.attr_("colorSaturation")||1,s=this.attr_("colorValue")||.5,h=Math.ceil(i/2);for(n=1;n<=i;n++)if(this.visibility()[n-1]){var o=n%2?Math.ceil(n/2):h+n/2,f=1*o/(1+i),t=Dygraph.hsvToRGB(f,e,s);this.colors_.push(t),this.colorsMap_[u[n]]=t}}},Dygraph.prototype.getColors=function(){return this.colors_},Dygraph.prototype.getPropertiesForSeries=function(n){for(var i=-1,r=this.getLabels(),t=1;t<r.length;t++)if(r[t]==n){i=t;break}return i==-1?null:{name:n,column:i,visible:this.visibility()[i-1],color:this.colorsMap_[n],axis:1+this.attributes_.axisForSeries(n)}},Dygraph.prototype.createRollInterface_=function(){var n,t;this.roller_||(this.roller_=document.createElement("input"),this.roller_.type="text",this.roller_.style.display="none",this.graphDiv.appendChild(this.roller_));var u=this.attr_("showRoller")?"block":"none",r=this.plotter_.area,i={position:"absolute",zIndex:10,top:r.y+r.h-25+"px",left:r.x+1+"px",display:u};this.roller_.size="2",this.roller_.value=this.rollPeriod_;for(n in i)i.hasOwnProperty(n)&&(this.roller_.style[n]=i[n]);t=this,this.roller_.onchange=function(){t.adjustRoll(t.roller_.value)}},Dygraph.prototype.dragGetX_=function(n,t){return Dygraph.pageX(n)-t.px},Dygraph.prototype.dragGetY_=function(n,t){return Dygraph.pageY(n)-t.py},Dygraph.prototype.createDragInterface_=function(){var n={isZooming:!1,isPanning:!1,is2DPan:!1,dragStartX:null,dragStartY:null,dragEndX:null,dragEndY:null,dragDirection:null,prevEndX:null,prevEndY:null,prevDragDirection:null,cancelNextDblclick:!1,initialLeftmostDate:null,xUnitsPerPixel:null,dateRange:null,px:0,py:0,boundedDates:null,boundedValues:null,tarp:new Dygraph.IFrameTarp,initializeMouseDown:function(n,t,i){n.preventDefault?n.preventDefault():(n.returnValue=!1,n.cancelBubble=!0),i.px=Dygraph.findPosX(t.canvas_),i.py=Dygraph.findPosY(t.canvas_),i.dragStartX=t.dragGetX_(n,i),i.dragStartY=t.dragGetY_(n,i),i.cancelNextDblclick=!1,i.tarp.cover()}},r=this.attr_("interactionModel"),i=this,f=function(t){return function(r){t(r,i,n)}},t,u;for(t in r)r.hasOwnProperty(t)&&this.addAndTrackEvent(this.mouseEventElement_,t,f(r[t]));u=function(){if((n.isZooming||n.isPanning)&&(n.isZooming=!1,n.dragStartX=null,n.dragStartY=null),n.isPanning){n.isPanning=!1,n.draggingDate=null,n.dateRange=null;for(var r=0;r<i.axes_.length;r++)delete i.axes_[r].draggingValue,delete i.axes_[r].dragValueRange}n.tarp.uncover()},this.addAndTrackEvent(document,"mouseup",u)},Dygraph.prototype.drawZoomRect_=function(n,t,i,r,u,f,e,o){var s=this.canvas_ctx_;f==Dygraph.HORIZONTAL?s.clearRect(Math.min(t,e),this.layout_.getPlotArea().y,Math.abs(t-e),this.layout_.getPlotArea().h):f==Dygraph.VERTICAL&&s.clearRect(this.layout_.getPlotArea().x,Math.min(r,o),this.layout_.getPlotArea().w,Math.abs(r-o)),n==Dygraph.HORIZONTAL?i&&t&&(s.fillStyle="rgba(128,128,128,0.33)",s.fillRect(Math.min(t,i),this.layout_.getPlotArea().y,Math.abs(i-t),this.layout_.getPlotArea().h)):n==Dygraph.VERTICAL&&u&&r&&(s.fillStyle="rgba(128,128,128,0.33)",s.fillRect(this.layout_.getPlotArea().x,Math.min(r,u),this.layout_.getPlotArea().w,Math.abs(u-r))),this.isUsingExcanvas_&&(this.currentZoomRectArgs_=[n,t,i,r,u,0,0,0])},Dygraph.prototype.clearZoomRect_=function(){this.currentZoomRectArgs_=null,this.canvas_ctx_.clearRect(0,0,this.canvas_.width,this.canvas_.height)},Dygraph.prototype.doZoomX_=function(n,t){this.currentZoomRectArgs_=null;var r=this.toDataXCoord(n),i=this.toDataXCoord(t);this.doZoomXDates_(r,i)},Dygraph.zoomAnimationFunction=function(n,t){var i=1.5;return(1-Math.pow(i,-n))/(1-Math.pow(i,-t))},Dygraph.prototype.doZoomXDates_=function(n,t){var r=this.xAxisRange(),u=[n,t],i;this.zoomed_x_=!0,i=this,this.doAnimatedZoom(r,u,null,null,function(){i.attr_("zoomCallback")&&i.attr_("zoomCallback")(n,t,i.yAxisRanges())})},Dygraph.prototype.doZoomY_=function(n,t){var f,u,i,o,e,r;for(this.currentZoomRectArgs_=null,f=this.yAxisRanges(),u=[],i=0;i<this.axes_.length;i++)o=this.toDataYCoord(n,i),e=this.toDataYCoord(t,i),u.push([e,o]);this.zoomed_y_=!0,r=this,this.doAnimatedZoom(null,null,f,u,function(){if(r.attr_("zoomCallback")){var n=r.xAxisRange();r.attr_("zoomCallback")(n[0],n[1],r.yAxisRanges())}})},Dygraph.prototype.resetZoom=function(){var e=!1,s=!1,v=!1,n,r,u,c,o,i,t;for(this.dateWindow_!==null&&(e=!0,s=!0),n=0;n<this.axes_.length;n++)typeof this.axes_[n].valueWindow!="undefined"&&this.axes_[n].valueWindow!==null&&(e=!0,v=!0);if(this.clearSelection(),e){if(this.zoomed_x_=!1,this.zoomed_y_=!1,r=this.rawData_[0][0],u=this.rawData_[this.rawData_.length-1][0],!this.attr_("animatedZooms")){for(this.dateWindow_=null,n=0;n<this.axes_.length;n++)this.axes_[n].valueWindow!==null&&delete this.axes_[n].valueWindow;this.drawGraph_(),this.attr_("zoomCallback")&&this.attr_("zoomCallback")(r,u,this.yAxisRanges());return}var h=null,l=null,a=null,f=null;if(s&&(h=this.xAxisRange(),l=[r,u]),v)for(a=this.yAxisRanges(),c=this.gatherDatasets_(this.rolledSeries_,null),o=c.extremes,this.computeYAxisRanges_(o),f=[],n=0;n<this.axes_.length;n++)i=this.axes_[n],f.push(i.valueRange!==null&&i.valueRange!==undefined?i.valueRange:i.extremeRange);t=this,this.doAnimatedZoom(h,l,a,f,function(){t.dateWindow_=null;for(var n=0;n<t.axes_.length;n++)t.axes_[n].valueWindow!==null&&delete t.axes_[n].valueWindow;t.attr_("zoomCallback")&&t.attr_("zoomCallback")(r,u,t.yAxisRanges())})}},Dygraph.prototype.doAnimatedZoom=function(n,t,i,r,u){var s=this.attr_("animatedZooms")?Dygraph.ANIMATION_STEPS:1,c=[],l=[],e,f,a,o,h;if(n!==null&&t!==null)for(e=1;e<=s;e++)f=Dygraph.zoomAnimationFunction(e,s),c[e-1]=[n[0]*(1-f)+f*t[0],n[1]*(1-f)+f*t[1]];if(i!==null&&r!==null)for(e=1;e<=s;e++){for(f=Dygraph.zoomAnimationFunction(e,s),a=[],o=0;o<this.axes_.length;o++)a.push([i[o][0]*(1-f)+f*r[o][0],i[o][1]*(1-f)+f*r[o][1]]);l[e-1]=a}h=this,Dygraph.repeatAndCleanup(function(n){var t,i;if(l.length)for(t=0;t<h.axes_.length;t++)i=l[n][t],h.axes_[t].valueWindow=[i[0],i[1]];c.length&&(h.dateWindow_=c[n]),h.drawGraph_()},s,Dygraph.ANIMATION_DURATION/s,u)},Dygraph.prototype.getArea=function(){return this.plotter_.area},Dygraph.prototype.eventToDomCoords=function(n){if(n.offsetX&&n.offsetY)return[n.offsetX,n.offsetY];var i=Dygraph.pageX(n)-Dygraph.findPosX(this.mouseEventElement_),t=Dygraph.pageY(n)-Dygraph.findPosY(this.mouseEventElement_);return[i,t]},Dygraph.prototype.findClosestRow=function(n){for(var e=Infinity,h=-1,o=this.layout_.points,u,s,i,r,f,t=0;t<o.length;t++)for(u=o[t],s=u.length,i=0;i<s;i++)(r=u[i],Dygraph.isValidPoint(r,!0))&&(f=Math.abs(r.canvasx-n),f<e&&(e=f,h=r.idx));return h},Dygraph.prototype.findClosestPoint=function(n,t){for(var l=Infinity,e,o,s,i,c,v,a,f,u,h,r=this.layout_.points.length-1;r>=0;--r)for(f=this.layout_.points[r],u=0;u<f.length;++u)(i=f[u],Dygraph.isValidPoint(i))&&(o=i.canvasx-n,s=i.canvasy-t,e=o*o+s*s,e<l&&(l=e,c=i,v=r,a=i.idx));return h=this.layout_.setNames[v],{row:a,seriesName:h,point:c}},Dygraph.prototype.findStackedPoint=function(n,t){for(var l=this.findClosestRow(n),v,a,i,c,s,h,u,o,y,r=0;r<this.layout_.points.length;++r){var p=this.getLeftBoundary_(r),f=l-p,e=this.layout_.points[r];f>=e.length||(i=e[f],Dygraph.isValidPoint(i))&&(c=i.canvasy,n>i.canvasx&&f+1<e.length?(s=e[f+1],Dygraph.isValidPoint(s)&&(u=s.canvasx-i.canvasx,u>0&&(o=(n-i.canvasx)/u,c+=o*(s.canvasy-i.canvasy)))):n<i.canvasx&&f>0&&(h=e[f-1],Dygraph.isValidPoint(h)&&(u=i.canvasx-h.canvasx,u>0&&(o=(i.canvasx-n)/u,c+=o*(h.canvasy-i.canvasy)))),(r===0||c<t)&&(v=i,a=r))}return y=this.layout_.setNames[a],{row:l,seriesName:y,point:v}},Dygraph.prototype.mouseMove_=function(n){var o=this.layout_.points,t,f,i;if(o!==undefined&&o!==null){var s=this.eventToDomCoords(n),u=s[0],e=s[1],h=this.attr_("highlightSeriesOpts"),r=!1;h&&!this.isSeriesLocked()?(t=this.attr_("stackedGraph")?this.findStackedPoint(u,e):this.findClosestPoint(u,e),r=this.setSelection(t.row,t.seriesName)):(f=this.findClosestRow(u),r=this.setSelection(f)),i=this.attr_("highlightCallback"),i&&r&&i(n,this.lastx_,this.selPoints_,this.lastRow_,this.highlightSet_)}},Dygraph.prototype.getLeftBoundary_=function(n){if(this.boundaryIds_[n])return this.boundaryIds_[n][0];for(var t=0;t<this.boundaryIds_.length;t++)if(this.boundaryIds_[t]!==undefined)return this.boundaryIds_[t][0];return 0},Dygraph.prototype.animateSelection_=function(n){var f=10,e=30,i,r,u,t;if(this.fadeLevel===undefined&&(this.fadeLevel=0),this.animateId===undefined&&(this.animateId=0),i=this.fadeLevel,r=n<0?i:f-i,r<=0){this.fadeLevel&&this.updateSelection_(1);return}u=++this.animateId,t=this,Dygraph.repeatAndCleanup(function(){t.animateId==u&&(t.fadeLevel+=n,t.fadeLevel===0?t.clearSelection():t.updateSelection_(t.fadeLevel/f))},r,e,function(){})},Dygraph.prototype.updateSelection_=function(n){var r,t,f,l,u,c,h,a,e,i;if(this.cascadeEvents_("select",{selectedX:this.lastx_,selectedPoints:this.selPoints_}),t=this.canvas_ctx_,this.attr_("highlightSeriesOpts")){if(t.clearRect(0,0,this.width_,this.height_),f=1-this.attr_("highlightSeriesBackgroundAlpha"),f){if(l=!0,l){if(n===undefined){this.animateSelection_(1);return}f*=n}t.fillStyle="rgba(255,255,255,"+f+")",t.fillRect(0,0,this.width_,this.height_)}this.plotter_._renderLineChart(this.highlightSet_,t)}else if(this.previousVerticalX_>=0){for(u=0,c=this.attr_("labels"),r=1;r<c.length;r++)h=this.attr_("highlightCircleSize",c[r]),h>u&&(u=h);a=this.previousVerticalX_,t.clearRect(a-u-1,0,2*u+2,this.height_)}if(this.isUsingExcanvas_&&this.currentZoomRectArgs_&&Dygraph.prototype.drawZoomRect_.apply(this,this.currentZoomRectArgs_),this.selPoints_.length>0){for(e=this.selPoints_[0].canvasx,t.save(),r=0;r<this.selPoints_.length;r++)if(i=this.selPoints_[r],Dygraph.isOK(i.canvasy)){var v=this.attr_("highlightCircleSize",i.name),s=this.attr_("drawHighlightPointCallback",i.name),o=this.plotter_.colors[i.name];s||(s=Dygraph.Circles.DEFAULT),t.lineWidth=this.attr_("strokeWidth",i.name),t.strokeStyle=o,t.fillStyle=o,s(this.g,i.name,t,e,i.canvasy,o,v,i.idx)}t.restore(),this.previousVerticalX_=e}},Dygraph.prototype.setSelection=function(n,t,i){var r,u,o,e,f;if(this.selPoints_=[],r=!1,n!==!1&&n>=0)for(n!=this.lastRow_&&(r=!0),this.lastRow_=n,u=0;u<this.layout_.points.length;++u)o=this.layout_.points[u],e=n-this.getLeftBoundary_(u),e<o.length&&(f=o[e],f.yval!==null&&this.selPoints_.push(f));else this.lastRow_>=0&&(r=!0),this.lastRow_=-1;return this.lastx_=this.selPoints_.length?this.selPoints_[0].xval:-1,t!==undefined&&(this.highlightSet_!==t&&(r=!0),this.highlightSet_=t),i!==undefined&&(this.lockedSet_=i),r&&this.updateSelection_(undefined),r},Dygraph.prototype.mouseOut_=function(n){this.attr_("unhighlightCallback")&&this.attr_("unhighlightCallback")(n),this.attr_("hideOverlayOnMouseOut")&&!this.lockedSet_&&this.clearSelection()},Dygraph.prototype.clearSelection=function(){if(this.cascadeEvents_("deselect",{}),this.lockedSet_=!1,this.fadeLevel){this.animateSelection_(-1);return}this.canvas_ctx_.clearRect(0,0,this.width_,this.height_),this.fadeLevel=0,this.selPoints_=[],this.lastx_=-1,this.lastRow_=-1,this.highlightSet_=null},Dygraph.prototype.getSelection=function(){var t,i,n;if(!this.selPoints_||this.selPoints_.length<1)return-1;for(t=0;t<this.layout_.points.length;t++)for(i=this.layout_.points[t],n=0;n<i.length;n++)if(i[n].x==this.selPoints_[0].x)return i[n].idx;return-1},Dygraph.prototype.getHighlightSeries=function(){return this.highlightSet_},Dygraph.prototype.isSeriesLocked=function(){return this.lockedSet_},Dygraph.prototype.loadedEvent_=function(n){this.rawData_=this.parseCSV_(n),this.predraw_()},Dygraph.prototype.addXTicks_=function(){var n,t,i;n=this.dateWindow_?[this.dateWindow_[0],this.dateWindow_[1]]:this.xAxisExtremes(),t=this.optionsViewForAxis_("x"),i=t("ticker")(n[0],n[1],this.width_,t,this),this.layout_.setXTicks(i)},Dygraph.prototype.extremeValues_=function(n){var r=null,u=null,i,t,o=this.attr_("errorBars")||this.attr_("customBars"),f,e;if(o)for(i=0;i<n.length;i++)(t=n[i][1][0],t===null||isNaN(t))||(f=t-n[i][1][1],e=t+n[i][1][2],f>t&&(f=t),e<t&&(e=t),(u===null||e>u)&&(u=e),(r===null||f<r)&&(r=f));else for(i=0;i<n.length;i++)(t=n[i][1],t===null||isNaN(t))||((u===null||t>u)&&(u=t),(r===null||t<r)&&(r=t));return[r,u]},Dygraph.prototype.predraw_=function(){var u=new Date,n,r,t,i;for(this.layout_.computePlotArea(),this.computeYAxes_(),this.plotter_&&(this.cascadeEvents_("clearChart"),this.plotter_.clear()),this.is_initial_draw_||(this.canvas_ctx_.restore(),this.hidden_ctx_.restore()),this.canvas_ctx_.save(),this.hidden_ctx_.save(),this.plotter_=new DygraphCanvasRenderer(this,this.hidden_,this.hidden_ctx_,this.layout_),this.createRollInterface_(),this.cascadeEvents_("predraw"),this.rolledSeries_=[null],n=1;n<this.numColumns();n++)r=this.attr_("logscale"),t=this.extractSeries_(this.rawData_,n,r),t=this.rollingAverage(t,this.rollPeriod_),this.rolledSeries_.push(t);this.drawGraph_(),i=new Date,this.drawingTimeMs_=i-u},Dygraph.PointType=undefined,Dygraph.seriesToPoints_=function(n,t,i,r){for(var o=[],f=0;f<n.length;++f){var u=n[f],s=t?u[1][0]:u[1],h=s===null?null:DygraphLayout.parseFloat_(s),e={x:NaN,y:NaN,xval:DygraphLayout.parseFloat_(u[0]),yval:h,name:i,idx:f+r};t&&(e.y_top=NaN,e.y_bottom=NaN,e.yval_minus=DygraphLayout.parseFloat_(u[1][1]),e.yval_plus=DygraphLayout.parseFloat_(u[1][2])),o.push(e)}return o},Dygraph.stackPoints_=function(n,t,i,r){for(var l=null,o=null,s=null,a=-1,v=function(t){if(!(a>=t))for(var i=t;i<n.length;++i)if(s=null,!isNaN(n[i].yval)&&n[i].yval!==null){a=i,s=n[i];break}},h,u,f,e,c=0;c<n.length;++c)h=n[c],u=h.xval,t[u]===undefined&&(t[u]=0),f=h.yval,isNaN(f)||f===null?(v(c),f=o&&s&&r!="none"?o.yval+(s.yval-o.yval)*((u-o.xval)/(s.xval-o.xval)):o&&r=="all"?o.yval:s&&r=="all"?s.yval:0):o=h,e=t[u],l!=u&&(e+=f,t[u]=e),l=u,h.yval_stacked=e,e>i[1]&&(i[1]=e),e<i[0]&&(i[0]=e)},Dygraph.prototype.gatherDatasets_=function(n,t){for(var c=[],p=[],nt=[],w={},e,b=this.attr_("errorBars"),y=this.attr_("customBars"),k=b||y,d=function(n){return k?y?n[1][1]===null:b?n[1][0]===null:!1:n[1]===null},tt=n.length-1,i,s,o,h,r=tt;r>=1;r--)if(this.visibility()[r-1]){if(t){i=n[r];var g=t[0],it=t[1],u=null,f=null;for(e=0;e<i.length;e++)i[e][0]>=g&&u===null&&(u=e),i[e][0]<=it&&(f=e);for(u===null&&(u=0),s=u,o=!0;o&&s>0;)s--,o=d(i[s]);for(f===null&&(f=i.length-1),h=f,o=!0;o&&h<i.length-1;)h++,o=d(i[h]);s!==u&&(u=s),h!==f&&(f=h),c[r-1]=[u,f],i=i.slice(u,f+1)}else i=n[r],c[r-1]=[0,i.length-1];var v=this.attr_("labels")[r],a=this.extremeValues_(i),l=Dygraph.seriesToPoints_(i,k,v,c[r-1][0]);this.attr_("stackedGraph")&&Dygraph.stackPoints_(l,nt,a,this.attr_("stackedGraphNaNFill")),w[v]=a,p[r]=l}return{points:p,extremes:w,boundaryIds:c}},Dygraph.prototype.drawGraph_=function(){var o=new Date,s=this.is_initial_draw_,t,u,n,e,r;this.is_initial_draw_=!1,this.layout_.removeAllDatasets(),this.setColors_(),this.attrs_.pointSize=.5*this.attr_("highlightCircleSize");var i=this.gatherDatasets_(this.rolledSeries_,this.dateWindow_),f=i.points,h=i.extremes;for(this.boundaryIds_=i.boundaryIds,this.setIndexByName_={},t=this.attr_("labels"),t.length>0&&(this.setIndexByName_[t[0]]=0),u=0,n=1;n<f.length;n++)(this.setIndexByName_[t[n]]=n,this.visibility()[n-1])&&(this.layout_.addDataset(t[n],f[n]),this.datasetIndex_[n]=u++);this.computeYAxisRanges_(h),this.layout_.setYAxes(this.axes_),this.addXTicks_(),e=this.zoomed_x_,this.zoomed_x_=e,this.layout_.evaluate(),this.renderGraph_(s),this.attr_("timingName")&&(r=new Date,Dygraph.info(this.attr_("timingName")+" - drawGraph: "+(r-o)+"ms"))},Dygraph.prototype.renderGraph_=function(n){var t,i;if(this.cascadeEvents_("clearChart"),this.plotter_.clear(),this.attr_("underlayCallback")&&this.attr_("underlayCallback")(this.hidden_ctx_,this.layout_.getPlotArea(),this,this),t={canvas:this.hidden_,drawingContext:this.hidden_ctx_},this.cascadeEvents_("willDrawChart",t),this.plotter_.render(),this.cascadeEvents_("didDrawChart",t),this.lastRow_=-1,this.canvas_.getContext("2d").clearRect(0,0,this.canvas_.width,this.canvas_.height),this.attr_("drawCallback")!==null&&this.attr_("drawCallback")(this,n),n)for(this.readyFired_=!0;this.readyFns_.length>0;)i=this.readyFns_.pop(),i(this)},Dygraph.prototype.computeYAxes_=function(){var u,n,t,r,i,e,f;if(this.axes_!==undefined&&this.user_attrs_.hasOwnProperty("valueRange")===!1)for(u=[],t=0;t<this.axes_.length;t++)u.push(this.axes_[t].valueWindow);for(this.axes_=[],n=0;n<this.attributes_.numAxes();n++)r={g:this},Dygraph.update(r,this.attributes_.axisOptions(n)),this.axes_[n]=r;if(i=this.attr_("valueRange"),i&&(this.axes_[0].valueRange=i),u!==undefined)for(e=Math.min(u.length,this.axes_.length),t=0;t<e;t++)this.axes_[t].valueWindow=u[t];for(n=0;n<this.axes_.length;n++)n===0?(r=this.optionsViewForAxis_("y"+(n?"2":"")),i=r("valueRange"),i&&(this.axes_[n].valueRange=i)):(f=this.user_attrs_.axes,f&&f.y2&&(i=f.y2.valueRange,i&&(this.axes_[n].valueRange=i)))},Dygraph.prototype.numAxes=function(){return this.attributes_.numAxes()},Dygraph.prototype.axisPropertiesForSeries=function(n){return this.axes_[this.attributes_.axisForSeries(n)]},Dygraph.prototype.computeYAxisRanges_=function(n){for(var nt=function(n){return isNaN(parseFloat(n))},ot=this.attributes_.numAxes(),y,u,l,e,o,f,i,d,g,s,h,a,p,w,c,v,k,t,b,rt,it,r=0;r<ot;r++){var t=this.axes_[r],et=this.attributes_.getForAxis("logscale",r),ht=this.attributes_.getForAxis("includeZero",r),ft=this.attributes_.getForAxis("independentTicks",r);if(l=this.attributes_.seriesForAxis(r),y=!0,e=.1,this.attr_("yRangePad")!==null&&(y=!1,e=this.attr_("yRangePad")/this.plotter_.area.h),l.length===0)t.extremeRange=[0,1];else{for(f=Infinity,i=-Infinity,s=0;s<l.length;s++)n.hasOwnProperty(l[s])&&(d=n[l[s]][0],d!==null&&(f=Math.min(d,f)),g=n[l[s]][1],g!==null&&(i=Math.max(g,i)));ht&&!et&&(f>0&&(f=0),i<0&&(i=0)),f==Infinity&&(f=0),i==-Infinity&&(i=1),u=i-f,u===0&&(i!==0?u=Math.abs(i):(i=1,u=1)),et?y?(h=i+e*u,a=f):(c=Math.exp(Math.log(u)*e),h=i*c,a=f/c):(h=i+e*u,a=f-e*u,y&&!this.attr_("avoidMinZero")&&(a<0&&f>=0&&(a=0),h>0&&i<=0&&(h=0))),t.extremeRange=[a,h]}t.valueWindow?t.computedValueRange=[t.valueWindow[0],t.valueWindow[1]]:t.valueRange?(p=nt(t.valueRange[0])?t.extremeRange[0]:t.valueRange[0],w=nt(t.valueRange[1])?t.extremeRange[1]:t.valueRange[1],y||(t.logscale?(c=Math.exp(Math.log(u)*e),p*=c,w/=c):(u=w-p,p-=u*e,w+=u*e)),t.computedValueRange=[p,w]):t.computedValueRange=t.extremeRange,ft&&(t.independentTicks=ft,v=this.optionsViewForAxis_("y"+(r?"2":"")),k=v("ticker"),t.ticks=k(t.computedValueRange[0],t.computedValueRange[1],this.height_,v,this),o||(o=t))}if(o===undefined)throw'Configuration Error: At least one axis has to have the "independentTicks" option activated.';for(r=0;r<ot;r++)if(t=this.axes_[r],!t.independentTicks){var v=this.optionsViewForAxis_("y"+(r?"2":"")),k=v("ticker"),ut=o.ticks,st=o.computedValueRange[1]-o.computedValueRange[0],ct=t.computedValueRange[1]-t.computedValueRange[0],tt=[];for(b=0;b<ut.length;b++)rt=(ut[b].v-o.computedValueRange[0])/st,it=t.computedValueRange[0]+rt*ct,tt.push(it);t.ticks=k(t.computedValueRange[0],t.computedValueRange[1],this.height_,v,this,tt)}},Dygraph.prototype.extractSeries_=function(n,t,i){for(var e=[],s=this.attr_("errorBars"),h=this.attr_("customBars"),o,r,f,u=0;u<n.length;u++){if(o=n[u][0],r=n[u][t],i)if(s||h){for(f=0;f<r.length;f++)if(r[f]<=0){r=null;break}}else r<=0&&(r=null);r!==null?e.push([o,r]):e.push([o,s?[null,null]:h?[null,null,null]:r])}return e},Dygraph.prototype.rollingAverage=function(n,t){var f,u,d,v,i,o,r,k,s,b,g,c,p,h,y,w,it,nt;if(t=Math.min(t,n.length),f=[],u=this.attr_("sigma"),this.fractions_){var rt=0,e=0,l=100;for(i=0;i<n.length;i++)if(rt+=n[i][1][0],e+=n[i][1][1],i-t>=0&&(rt-=n[i-t][1][0],e-=n[i-t][1][1]),g=n[i][0],c=e?rt/e:0,this.attr_("errorBars"))if(this.attr_("wilsonInterval"))if(e){var a=c<0?0:c,tt=e,ft=u*Math.sqrt(a*(1-a)/tt+u*u/(4*tt*tt)),ut=1+u*u/e;d=(a+u*u/(2*e)-ft)/ut,v=(a+u*u/(2*e)+ft)/ut,f[i]=[g,[a*l,(a-d)*l,(v-a)*l]]}else f[i]=[g,[0,0,0]];else b=e?u*Math.sqrt(c*(1-c)/e):1,f[i]=[g,[l*c,l*b,l*b]];else f[i]=[g,l*c]}else if(this.attr_("customBars"))for(d=0,p=0,v=0,h=0,i=0;i<n.length;i++)y=n[i][1],r=y[1],f[i]=[n[i][0],[r,r-y[0],y[2]-r]],r===null||isNaN(r)||(d+=y[0],p+=r,v+=y[2],h+=1),i-t>=0&&(w=n[i-t],w[1][1]===null||isNaN(w[1][1])||(d-=w[1][0],p-=w[1][1],v-=w[1][2],h-=1)),f[i]=h?[n[i][0],[1*p/h,1*(p-d)/h,1*(v-p)/h]]:[n[i][0],[null,null,null]];else if(this.attr_("errorBars"))for(i=0;i<n.length;i++){for(k=0,it=0,s=0,o=Math.max(0,i-t+1);o<i+1;o++)(r=n[o][1][0],r===null||isNaN(r))||(s++,k+=n[o][1][0],it+=Math.pow(n[o][1][1],2));s?(b=Math.sqrt(it)/s,f[i]=[n[i][0],[k/s,u*b,u*b]]):(nt=t==1?n[i][1][0]:null,f[i]=[n[i][0],[nt,nt,nt]])}else{if(t==1)return n;for(i=0;i<n.length;i++){for(k=0,s=0,o=Math.max(0,i-t+1);o<i+1;o++)(r=n[o][1],r===null||isNaN(r))||(s++,k+=n[o][1]);f[i]=s?[n[i][0],k/s]:[n[i][0],null]}}return f},Dygraph.prototype.detectTypeFromString_=function(n){var i=!1,t=n.indexOf("-");t>0&&n[t-1]!="e"&&n[t-1]!="E"||n.indexOf("/")>=0||isNaN(parseFloat(n))?i=!0:n.length==8&&n>"19700101"&&n<"20371231"&&(i=!0),this.setXAxisOptions_(i)},Dygraph.prototype.setXAxisOptions_=function(n){n?(this.attrs_.xValueParser=Dygraph.dateParser,this.attrs_.axes.x.valueFormatter=Dygraph.dateString_,this.attrs_.axes.x.ticker=Dygraph.dateTicker,this.attrs_.axes.x.axisLabelFormatter=Dygraph.dateAxisFormatter):(this.attrs_.xValueParser=function(n){return parseFloat(n)},this.attrs_.axes.x.valueFormatter=function(n){return n},this.attrs_.axes.x.ticker=Dygraph.numericLinearTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter)},Dygraph.prototype.parseFloat_=function(n,t,i){var u=parseFloat(n),r;return isNaN(u)?/^ *$/.test(n)?null:/^ *nan *$/i.test(n)?NaN:(r="Unable to parse '"+n+"' as a number",i!==null&&t!==null&&(r+=" on line "+(1+t)+" ('"+i+"') of CSV."),this.error(r),null):u},Dygraph.prototype.parseCSV_=function(n){var o=[],k=Dygraph.detectLineDelimiter(n),s=n.split(k||"\n"),e,t,l=this.attr_("delimiter"),a,i,u,r,f,h,c;s[0].indexOf(l)==-1&&s[0].indexOf("\t")>=0&&(l="\t"),a=0,"labels"in this.user_attrs_||(a=1,this.attrs_.labels=s[0].split(l),this.attributes_.reparseSeries());var b=0,v,y=!1,p=this.attr_("labels").length,w=!1;for(i=a;i<s.length;i++)if((u=s[i],b=i,u.length!==0)&&u[0]!="#"&&(r=u.split(l),!(r.length<2))){if(f=[],y||(this.detectTypeFromString_(r[0]),v=this.attr_("xValueParser"),y=!0),f[0]=v(r[0],this),this.fractions_)for(t=1;t<r.length;t++)e=r[t].split("/"),e.length!=2?(this.error('Expected fractional "num/den" values in CSV data but found a value \''+r[t]+"' on line "+(1+i)+" ('"+u+"') which is not of this form."),f[t]=[0,0]):f[t]=[this.parseFloat_(e[0],i,u),this.parseFloat_(e[1],i,u)];else if(this.attr_("errorBars"))for(r.length%2!=1&&this.error("Expected alternating (value, stdev.) pairs in CSV data but line "+(1+i)+" has an odd number of values ("+(r.length-1)+"): '"+u+"'"),t=1;t<r.length;t+=2)f[(t+1)/2]=[this.parseFloat_(r[t],i,u),this.parseFloat_(r[t+1],i,u)];else if(this.attr_("customBars"))for(t=1;t<r.length;t++)h=r[t],/^ *$/.test(h)?f[t]=[null,null,null]:(e=h.split(";"),e.length==3?f[t]=[this.parseFloat_(e[0],i,u),this.parseFloat_(e[1],i,u),this.parseFloat_(e[2],i,u)]:this.warn('When using customBars, values must be either blank or "low;center;high" tuples (got "'+h+'" on line '+(1+i)));else for(t=1;t<r.length;t++)f[t]=this.parseFloat_(r[t],i,u);if(o.length>0&&f[0]<o[o.length-1][0]&&(w=!0),f.length!=p&&this.error("Number of columns in line "+i+" ("+f.length+") does not agree with number of labels ("+p+") "+u),i===0&&this.attr_("labels")){for(c=!0,t=0;c&&t<f.length;t++)f[t]&&(c=!1);if(c){this.warn("The dygraphs 'labels' option is set, but the first row of CSV data ('"+u+"') appears to also contain labels. Will drop the CSV labels and use the option labels.");continue}}o.push(f)}return w&&(this.warn("CSV is out of order; order it correctly to speed loading."),o.sort(function(n,t){return n[0]-t[0]})),o},Dygraph.prototype.parseArray_=function(n){var t,r,i;if(n.length===0)return this.error("Can't plot empty data set"),null;if(n[0].length===0)return this.error("Data set cannot contain an empty row"),null;if(this.attr_("labels")===null){for(this.warn("Using default labels. Set labels explicitly via 'labels' in the options parameter"),this.attrs_.labels=["X"],t=1;t<n[0].length;t++)this.attrs_.labels.push("Y"+t);this.attributes_.reparseSeries()}else if(r=this.attr_("labels"),r.length!=n[0].length)return this.error("Mismatch between number of labels ("+r+") and number of columns in array ("+n[0].length+")"),null;if(Dygraph.isDateLike(n[0][0])){for(this.attrs_.axes.x.valueFormatter=Dygraph.dateString_,this.attrs_.axes.x.ticker=Dygraph.dateTicker,this.attrs_.axes.x.axisLabelFormatter=Dygraph.dateAxisFormatter,i=Dygraph.clone(n),t=0;t<n.length;t++){if(i[t].length===0)return this.error("Row "+(1+t)+" of data is empty"),null;if(i[t][0]===null||typeof i[t][0].getTime!="function"||isNaN(i[t][0].getTime()))return this.error("x value in row "+(1+t)+" is not a Date"),null;i[t][0]=i[t][0].getTime()}return i}return this.attrs_.axes.x.valueFormatter=function(n){return n},this.attrs_.axes.x.ticker=Dygraph.numericLinearTicks,this.attrs_.axes.x.axisLabelFormatter=Dygraph.numberAxisLabelFormatter,n},Dygraph.prototype.parseDataTable_=function(n){var d=function(n){var t=String.fromCharCode(65+n%26);for(n=Math.floor(n/26);n>0;)t=String.fromCharCode(65+(n-1)%26)+t.toLowerCase(),n=Math.floor((n-1)/26);return t},y=n.getNumberOfColumns(),k=n.getNumberOfRows(),s=n.getColumnType(0),p,v,a,r,f,u,c;if(s=="date"||s=="datetime")this.attrs_.xValueParser=Dygraph.dateParser,this.attrs_.axes.x.valueFormatter=Dygraph.dateString_,this.attrs_.axes.x.ticker=Dygraph.dateTicker,this.attrs_.axes.x.axisLabelFormatter=Dygraph.dateAxisFormatter;else if(s=="number")this.attrs_.xValueParser=function(n){return parseFloat(n)},this.attrs_.axes.x.valueFormatter=function(n){return n},this.attrs_.axes.x.ticker=Dygraph.numericLinearTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter;else return this.error("only 'date', 'datetime' and 'number' types are supported for column 1 of DataTable input (Got '"+s+"')"),null;for(var o=[],e={},w=!1,i,t=1;t<y;t++)p=n.getColumnType(t),p=="number"?o.push(t):p=="string"&&this.attr_("displayAnnotations")?(v=o[o.length-1],e.hasOwnProperty(v)?e[v].push(t):e[v]=[t],w=!0):this.error("Only 'number' is supported as a dependent type with Gviz. 'string' is only supported if displayAnnotations is true");for(a=[n.getColumnLabel(0)],t=0;t<o.length;t++)a.push(n.getColumnLabel(o[t])),this.attr_("errorBars")&&(t+=1);this.attrs_.labels=a,y=a.length;var h=[],b=!1,l=[];for(t=0;t<k;t++){if(r=[],typeof n.getValue(t,0)=="undefined"||n.getValue(t,0)===null){this.warn("Ignoring row "+t+" of DataTable because of undefined or null first column.");continue}if(s=="date"||s=="datetime"?r.push(n.getValue(t,0).getTime()):r.push(n.getValue(t,0)),this.attr_("errorBars"))for(i=0;i<y-1;i++)r.push([n.getValue(t,1+2*i),n.getValue(t,2+2*i)]);else{for(i=0;i<o.length;i++)if(f=o[i],r.push(n.getValue(t,f)),w&&e.hasOwnProperty(f)&&n.getValue(t,e[f][0])!==null){for(u={},u.series=n.getColumnLabel(f),u.xval=r[0],u.shortText=d(l.length),u.text="",c=0;c<e[f].length;c++)c&&(u.text+="\n"),u.text+=n.getValue(t,e[f][c]);l.push(u)}for(i=0;i<r.length;i++)isFinite(r[i])||(r[i]=null)}h.length>0&&r[0]<h[h.length-1][0]&&(b=!0),h.push(r)}b&&(this.warn("DataTable is out of order; order it correctly to speed loading."),h.sort(function(n,t){return n[0]-t[0]})),this.rawData_=h,l.length>0&&this.setAnnotations(l,!0),this.attributes_.reparseSeries()},Dygraph.prototype.start_=function(){var n=this.file_,r,t,i;typeof n=="function"&&(n=n()),Dygraph.isArrayLike(n)?(this.rawData_=this.parseArray_(n),this.predraw_()):typeof n=="object"&&typeof n.getColumnRange=="function"?(this.parseDataTable_(n),this.predraw_()):typeof n=="string"?(r=Dygraph.detectLineDelimiter(n),r?this.loadedEvent_(n):(t=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),i=this,t.onreadystatechange=function(){t.readyState==4&&(t.status===200||t.status===0)&&i.loadedEvent_(t.responseText)},t.open("GET",n,!0),t.send(null))):this.error("Unknown data format: "+typeof n)},Dygraph.prototype.updateOptions=function(n,t){var r,i,u;typeof t=="undefined"&&(t=!1),r=n.file,i=Dygraph.mapLegacyOptions_(n),"rollPeriod"in i&&(this.rollPeriod_=i.rollPeriod),"dateWindow"in i&&(this.dateWindow_=i.dateWindow,"isZoomedIgnoreProgrammaticZoom"in i||(this.zoomed_x_=i.dateWindow!==null)),"valueRange"in i&&!("isZoomedIgnoreProgrammaticZoom"in i)&&(this.zoomed_y_=i.valueRange!==null),u=Dygraph.isPixelChangingOptionList(this.attr_("labels"),i),Dygraph.updateDeep(this.user_attrs_,i),this.attributes_.reparseSeries(),r?(this.file_=r,t||this.start_()):t||(u?this.predraw_():this.renderGraph_(!1))},Dygraph.mapLegacyOptions_=function(n){var i={},r,u,t;for(r in n)r!="file"&&n.hasOwnProperty(r)&&(i[r]=n[r]);return u=function(n,t,r){i.axes||(i.axes={}),i.axes[n]||(i.axes[n]={}),i.axes[n][t]=r},t=function(t,r,f){typeof n[t]!="undefined"&&(Dygraph.warn("Option "+t+" is deprecated. Use the "+f+" option for the "+r+" axis instead. (e.g. { axes : { "+r+" : { "+f+" : ... } } } (see http://dygraphs.com/per-axis.html for more information."),u(r,f,n[t]),delete i[t])},t("xValueFormatter","x","valueFormatter"),t("pixelsPerXLabel","x","pixelsPerLabel"),t("xAxisLabelFormatter","x","axisLabelFormatter"),t("xTicker","x","ticker"),t("yValueFormatter","y","valueFormatter"),t("pixelsPerYLabel","y","pixelsPerLabel"),t("yAxisLabelFormatter","y","axisLabelFormatter"),t("yTicker","y","ticker"),i},Dygraph.prototype.resize=function(n,t){if(!this.resize_lock){this.resize_lock=!0,n===null!=(t===null)&&(this.warn("Dygraph.resize() should be called with zero parameters or two non-NULL parameters. Pretending it was zero."),n=t=null);var r=this.width_,i=this.height_;n?(this.maindiv_.style.width=n+"px",this.maindiv_.style.height=t+"px",this.width_=n,this.height_=t):(this.width_=this.maindiv_.clientWidth,this.height_=this.maindiv_.clientHeight),(r!=this.width_||i!=this.height_)&&(this.resizeElements_(),this.predraw_()),this.resize_lock=!1}},Dygraph.prototype.adjustRoll=function(n){this.rollPeriod_=n,this.predraw_()},Dygraph.prototype.visibility=function(){for(this.attr_("visibility")||(this.attrs_.visibility=[]);this.attr_("visibility").length<this.numColumns()-1;)this.attrs_.visibility.push(!0);return this.attr_("visibility")},Dygraph.prototype.setVisibility=function(n,t){var i=this.visibility();n<0||n>=i.length?this.warn("invalid series number in setVisibility: "+n):(i[n]=t,this.predraw_())},Dygraph.prototype.size=function(){return{width:this.width_,height:this.height_}},Dygraph.prototype.setAnnotations=function(n,t){if(Dygraph.addAnnotationRule(),this.annotations_=n,!this.layout_){this.warn("Tried to setAnnotations before dygraph was ready. Try setting them in a ready() block. See dygraphs.com/tests/annotation.html");return}this.layout_.setAnnotations(this.annotations_),t||this.predraw_()},Dygraph.prototype.annotations=function(){return this.annotations_},Dygraph.prototype.getLabels=function(){var n=this.attr_("labels");return n?n.slice():null},Dygraph.prototype.indexFromSetName=function(n){return this.setIndexByName_[n]},Dygraph.prototype.ready=function(n){this.is_initial_draw_?this.readyFns_.push(n):n(this)},Dygraph.addAnnotationRule=function(){var i,r,t,n,u;if(!Dygraph.addedAnnotationCSS){for(i="border: 1px solid black; background-color: white; text-align: center;",r=document.createElement("style"),r.type="text/css",document.getElementsByTagName("head")[0].appendChild(r),t=0;t<document.styleSheets.length;t++)if(!document.styleSheets[t].disabled){n=document.styleSheets[t];try{n.insertRule?(u=n.cssRules?n.cssRules.length:0,n.insertRule(".dygraphDefaultAnnotation { "+i+" }",u)):n.addRule&&n.addRule(".dygraphDefaultAnnotation",i),Dygraph.addedAnnotationCSS=!0;return}catch(f){}}this.warn("Unable to add default annotation CSS rule; display may be off.")}},DateGraph=Dygraph,Dygraph.LOG_SCALE=10,Dygraph.LN_TEN=Math.log(Dygraph.LOG_SCALE),Dygraph.log10=function(n){return Math.log(n)/Dygraph.LN_TEN},Dygraph.DEBUG=1,Dygraph.INFO=2,Dygraph.WARNING=3,Dygraph.ERROR=3,Dygraph.LOG_STACK_TRACES=!1,Dygraph.DOTTED_LINE=[2,2],Dygraph.DASHED_LINE=[7,3],Dygraph.DOT_DASH_LINE=[7,2,2,2],Dygraph.log=function(n,t){var r,f,e,i,u;if(typeof printStackTrace!="undefined")try{for(r=printStackTrace({guess:!1});r[0].indexOf("stacktrace")!=-1;)r.splice(0,1);for(r.splice(0,2),f=0;f<r.length;f++)r[f]=r[f].replace(/\([^)]*\/(.*)\)/,"@$1").replace(/\@.*\/([^\/]*)/,"@$1").replace("[object Object].","");e=r.splice(0,1)[0],t+=" ("+e.replace(/^.*@ ?/,"")+")"}catch(o){}if(typeof window.console!="undefined"){i=window.console,u=function(n,t,i){t&&typeof t=="function"?t.call(n,i):n.log(i)};switch(n){case Dygraph.DEBUG:u(i,i.debug,"dygraphs: "+t);break;case Dygraph.INFO:u(i,i.info,"dygraphs: "+t);break;case Dygraph.WARNING:u(i,i.warn,"dygraphs: "+t);break;case Dygraph.ERROR:u(i,i.error,"dygraphs: "+t)}}Dygraph.LOG_STACK_TRACES&&window.console.log(r.join("\n"))},Dygraph.info=function(n){Dygraph.log(Dygraph.INFO,n)},Dygraph.prototype.info=Dygraph.info,Dygraph.warn=function(n){Dygraph.log(Dygraph.WARNING,n)},Dygraph.prototype.warn=Dygraph.warn,Dygraph.error=function(n){Dygraph.log(Dygraph.ERROR,n)},Dygraph.prototype.error=Dygraph.error,Dygraph.getContext=function(n){return n.getContext("2d")},Dygraph.addEvent=function(n,t,i){n.addEventListener?n.addEventListener(t,i,!1):(n[t+i]=function(){i(window.event)},n.attachEvent("on"+t,n[t+i]))},Dygraph.prototype.addAndTrackEvent=function(n,t,i){Dygraph.addEvent(n,t,i),this.registeredEvents_.push({elem:n,type:t,fn:i})},Dygraph.removeEvent=function(n,t,i){if(n.removeEventListener)n.removeEventListener(t,i,!1);else{try{n.detachEvent("on"+t,n[t+i])}catch(r){}n[t+i]=null}},Dygraph.prototype.removeTrackedEvents_=function(){var t,n;if(this.registeredEvents_)for(t=0;t<this.registeredEvents_.length;t++)n=this.registeredEvents_[t],Dygraph.removeEvent(n.elem,n.type,n.fn);this.registeredEvents_=[]},Dygraph.cancelEvent=function(n){return n=n?n:window.event,n.stopPropagation&&n.stopPropagation(),n.preventDefault&&n.preventDefault(),n.cancelBubble=!0,n.cancel=!0,n.returnValue=!1,!1},Dygraph.hsvToRGB=function(n,t,i){var f,u,r;if(t===0)f=i,u=i,r=i;else{var c=Math.floor(n*6),h=n*6-c,e=i*(1-t),o=i*(1-t*h),s=i*(1-t*(1-h));switch(c){case 1:f=o,u=i,r=e;break;case 2:f=e,u=i,r=s;break;case 3:f=e,u=o,r=i;break;case 4:f=s,u=e,r=i;break;case 5:f=i,u=e,r=o;break;case 6:case 0:f=i,u=s,r=e}}return f=Math.floor(255*f+.5),u=Math.floor(255*u+.5),r=Math.floor(255*r+.5),"rgb("+f+","+u+","+r+")"},Dygraph.findPosX=function(n){var i=0,t,r;if(n.offsetParent)for(t=n;;){if(r="0",window.getComputedStyle&&(r=window.getComputedStyle(t,null).borderLeft||"0"),i+=parseInt(r,10),i+=t.offsetLeft,!t.offsetParent)break;t=t.offsetParent}else n.x&&(i+=n.x);while(n&&n!=document.body)i-=n.scrollLeft,n=n.parentNode;return i},Dygraph.findPosY=function(n){var i=0,t,r;if(n.offsetParent)for(t=n;;){if(r="0",window.getComputedStyle&&(r=window.getComputedStyle(t,null).borderTop||"0"),i+=parseInt(r,10),i+=t.offsetTop,!t.offsetParent)break;t=t.offsetParent}else n.y&&(i+=n.y);while(n&&n!=document.body)i-=n.scrollTop,n=n.parentNode;return i},Dygraph.pageX=function(n){if(n.pageX)return!n.pageX||n.pageX<0?0:n.pageX;var t=document.documentElement,i=document.body;return n.clientX+(t.scrollLeft||i.scrollLeft)-(t.clientLeft||0)},Dygraph.pageY=function(n){if(n.pageY)return!n.pageY||n.pageY<0?0:n.pageY;var t=document.documentElement,i=document.body;return n.clientY+(t.scrollTop||i.scrollTop)-(t.clientTop||0)},Dygraph.isOK=function(n){return!!n&&!isNaN(n)},Dygraph.isValidPoint=function(n,t){return n?n.yval===null?!1:n.x===null||n.x===undefined?!1:n.y===null||n.y===undefined?!1:isNaN(n.x)||!t&&isNaN(n.y)?!1:!0:!1},Dygraph.floatFormat=function(n,t){var i=Math.min(Math.max(1,t||2),21);return Math.abs(n)<.001&&n!==0?n.toExponential(i-1):n.toPrecision(i)},Dygraph.zeropad=function(n){return n<10?"0"+n:""+n},Dygraph.hmsString_=function(n){var i=Dygraph.zeropad,t=new Date(n);return t.getSeconds()?i(t.getHours())+":"+i(t.getMinutes())+":"+i(t.getSeconds()):i(t.getHours())+":"+i(t.getMinutes())},Dygraph.round_=function(n,t){var i=Math.pow(10,t);return Math.round(n*i)/i},Dygraph.binarySearch=function(n,t,i,r,u){if((r===null||r===undefined||u===null||u===undefined)&&(r=0,u=t.length-1),r>u)return-1;(i===null||i===undefined)&&(i=0);var s=function(n){return n>=0&&n<t.length},f=parseInt((r+u)/2,10),o=t[f],e;return o==n?f:o>n?i>0&&(e=f-1,s(e)&&t[e]<n)?f:Dygraph.binarySearch(n,t,i,r,f-1):o<n?i<0&&(e=f+1,s(e)&&t[e]>n)?f:Dygraph.binarySearch(n,t,i,f+1,u):-1},Dygraph.dateParser=function(n){var i,t;if((n.search("-")==-1||n.search("T")!=-1||n.search("Z")!=-1)&&(t=Dygraph.dateStrToMillis(n),t&&!isNaN(t)))return t;if(n.search("-")!=-1){for(i=n.replace("-","/","g");i.search("-")!=-1;)i=i.replace("-","/");t=Dygraph.dateStrToMillis(i)}else n.length==8?(i=n.substr(0,4)+"/"+n.substr(4,2)+"/"+n.substr(6,2),t=Dygraph.dateStrToMillis(i)):t=Dygraph.dateStrToMillis(n);return(!t||isNaN(t))&&Dygraph.error("Couldn't parse "+n+" as a date"),t},Dygraph.dateStrToMillis=function(n){return+new Date(n)},Dygraph.update=function(n,t){if(typeof t!="undefined"&&t!==null)for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);return n},Dygraph.updateDeep=function(n,t){function r(n){return typeof Node=="object"?n instanceof Node:typeof n=="object"&&typeof n.nodeType=="number"&&typeof n.nodeName=="string"}if(typeof t!="undefined"&&t!==null)for(var i in t)t.hasOwnProperty(i)&&(t[i]===null?n[i]=null:Dygraph.isArrayLike(t[i])?n[i]=t[i].slice():r(t[i])?n[i]=t[i]:typeof t[i]=="object"?((typeof n[i]!="object"||n[i]===null)&&(n[i]={}),Dygraph.updateDeep(n[i],t[i])):n[i]=t[i]);return n},Dygraph.isArrayLike=function(n){var t=typeof n;return t!="object"&&!(t=="function"&&typeof n.item=="function")||n===null||typeof n.length!="number"||n.nodeType===3?!1:!0},Dygraph.isDateLike=function(n){return typeof n!="object"||n===null||typeof n.getTime!="function"?!1:!0},Dygraph.clone=function(n){for(var i=[],t=0;t<n.length;t++)Dygraph.isArrayLike(n[t])?i.push(Dygraph.clone(n[t])):i.push(n[t]);return i},Dygraph.createCanvas=function(){var n=document.createElement("canvas"),t=/MSIE/.test(navigator.userAgent)&&!window.opera;return t&&typeof G_vmlCanvasManager!="undefined"&&(n=G_vmlCanvasManager.initElement(n)),n},Dygraph.isAndroid=function(){return/Android/.test(navigator.userAgent)},Dygraph.Iterator=function(n,t,i,r){t=t||0,i=i||n.length,this.hasNext=!0,this.peek=null,this.start_=t,this.array_=n,this.predicate_=r,this.end_=Math.min(n.length,t+i),this.nextIdx_=t-1,this.next()},Dygraph.Iterator.prototype.next=function(){if(!this.hasNext)return null;for(var i=this.peek,n=this.nextIdx_+1,t=!1;n<this.end_;){if(!this.predicate_||this.predicate_(this.array_,n)){this.peek=this.array_[n],t=!0;break}n++}return this.nextIdx_=n,t||(this.hasNext=!1,this.peek=null),i},Dygraph.createIterator=function(n,t,i,r){return new Dygraph.Iterator(n,t,i,r)},Dygraph.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(n){window.setTimeout(n,1e3/60)}}(),Dygraph.repeatAndCleanup=function(n,t,i,r){var u=0,e,s=+new Date,f;if(n(u),t==1){r();return}f=t-1,function o(){u>=t||Dygraph.requestAnimFrame.call(window,function(){var c=+new Date,l=c-s,t,h;e=u,u=Math.floor(l/i),t=u-e,h=u+t>f,h||u>=f?(n(f),r()):(t!==0&&n(u),o())})}()},Dygraph.isPixelChangingOptionList=function(n,t){var o={annotationClickHandler:!0,annotationDblClickHandler:!0,annotationMouseOutHandler:!0,annotationMouseOverHandler:!0,axisLabelColor:!0,axisLineColor:!0,axisLineWidth:!0,clickCallback:!0,digitsAfterDecimal:!0,drawCallback:!0,drawHighlightPointCallback:!0,drawPoints:!0,drawPointCallback:!0,drawXGrid:!0,drawYGrid:!0,fillAlpha:!0,gridLineColor:!0,gridLineWidth:!0,hideOverlayOnMouseOut:!0,highlightCallback:!0,highlightCircleSize:!0,interactionModel:!0,isZoomedIgnoreProgrammaticZoom:!0,labelsDiv:!0,labelsDivStyles:!0,labelsDivWidth:!0,labelsKMB:!0,labelsKMG2:!0,labelsSeparateLines:!0,labelsShowZeroValues:!0,legend:!0,maxNumberWidth:!0,panEdgeFraction:!0,pixelsPerYLabel:!0,pointClickCallback:!0,pointSize:!0,rangeSelectorPlotFillColor:!0,rangeSelectorPlotStrokeColor:!0,showLabelsOnHighlight:!0,showRoller:!0,sigFigs:!0,strokeWidth:!0,underlayCallback:!0,unhighlightCallback:!0,xAxisLabelFormatter:!0,xTicker:!0,xValueFormatter:!0,yAxisLabelFormatter:!0,yValueFormatter:!0,zoomCallback:!0},r=!1,e={},u,i,f;if(n)for(u=1;u<n.length;u++)e[n[u]]=!0;for(i in t){if(r)break;if(t.hasOwnProperty(i))if(e[i])for(f in t[i]){if(r)break;t[i].hasOwnProperty(f)&&!o[f]&&(r=!0)}else o[i]||(r=!0)}return r},Dygraph.compareArrays=function(n,t){if(!Dygraph.isArrayLike(n)||!Dygraph.isArrayLike(t)||n.length!==t.length)return!1;for(var i=0;i<n.length;i++)if(n[i]!==t[i])return!1;return!0},Dygraph.regularShape_=function(n,t,i,r,u,f,e){var s,h;f=f||0,e=e||Math.PI*2/t,n.beginPath();var c=f,o=c,l=function(){var t=r+Math.sin(o)*i,n=u+-Math.cos(o)*i;return[t,n]},a=l(),v=a[0],y=a[1];for(n.moveTo(v,y),s=0;s<t;s++)o=s==t-1?c:o+e,h=l(),n.lineTo(h[0],h[1]);n.fill(),n.stroke()},Dygraph.shapeFunction_=function(n,t,i){return function(r,u,f,e,o,s,h){f.strokeStyle=s,f.fillStyle="white",Dygraph.regularShape_(f,n,h,e,o,t,i)}},Dygraph.Circles={DEFAULT:function(n,t,i,r,u,f,e){i.beginPath(),i.fillStyle=f,i.arc(r,u,e,0,2*Math.PI,!1),i.fill()},TRIANGLE:Dygraph.shapeFunction_(3),SQUARE:Dygraph.shapeFunction_(4,Math.PI/4),DIAMOND:Dygraph.shapeFunction_(4),PENTAGON:Dygraph.shapeFunction_(5),HEXAGON:Dygraph.shapeFunction_(6),CIRCLE:function(n,t,i,r,u,f,e){i.beginPath(),i.strokeStyle=f,i.fillStyle="white",i.arc(r,u,e,0,2*Math.PI,!1),i.fill(),i.stroke()},STAR:Dygraph.shapeFunction_(5,0,4*Math.PI/5),PLUS:function(n,t,i,r,u,f,e){i.strokeStyle=f,i.beginPath(),i.moveTo(r+e,u),i.lineTo(r-e,u),i.closePath(),i.stroke(),i.beginPath(),i.moveTo(r,u+e),i.lineTo(r,u-e),i.closePath(),i.stroke()},EX:function(n,t,i,r,u,f,e){i.strokeStyle=f,i.beginPath(),i.moveTo(r+e,u+e),i.lineTo(r-e,u-e),i.closePath(),i.stroke(),i.beginPath(),i.moveTo(r+e,u-e),i.lineTo(r-e,u+e),i.closePath(),i.stroke()}},Dygraph.IFrameTarp=function(){this.tarps=[]},Dygraph.IFrameTarp.prototype.cover=function(){for(var r=document.getElementsByTagName("iframe"),i=0;i<r.length;i++){var t=r[i],f=Dygraph.findPosX(t),e=Dygraph.findPosY(t),o=t.offsetWidth,u=t.offsetHeight,n=document.createElement("div");n.style.position="absolute",n.style.left=f+"px",n.style.top=e+"px",n.style.width=o+"px",n.style.height=u+"px",n.style.zIndex=999,document.body.appendChild(n),this.tarps.push(n)}},Dygraph.IFrameTarp.prototype.uncover=function(){for(var n=0;n<this.tarps.length;n++)this.tarps[n].parentNode.removeChild(this.tarps[n]);this.tarps=[]},Dygraph.detectLineDelimiter=function(n){for(var i,t=0;t<n.length;t++){if(i=n.charAt(t),i==="\r")return t+1<n.length&&n.charAt(t+1)==="\n"?"\r\n":i;if(i==="\n")return t+1<n.length&&n.charAt(t+1)==="\r"?"\n\r":i}return null},Dygraph.isNodeContainedBy=function(n,t){if(t===null||n===null)return!1;for(var i=n;i&&i!==t;)i=i.parentNode;return i===t},Dygraph.pow=function(n,t){return t<0?1/Math.pow(n,-t):Math.pow(n,t)},Dygraph.dateSetters={ms:Date.prototype.setMilliseconds,s:Date.prototype.setSeconds,m:Date.prototype.setMinutes,h:Date.prototype.setHours},Dygraph.setDateSameTZ=function(n,t){var u=n.getTimezoneOffset(),i,r;for(i in t)if(t.hasOwnProperty(i)){if(r=Dygraph.dateSetters[i],!r)throw"Invalid setter: "+i;r.call(n,t[i]),n.getTimezoneOffset()!=u&&n.setTime(n.getTime()+(u-n.getTimezoneOffset())*6e4)}},Dygraph.GVizChart=function(n){this.container=n},Dygraph.GVizChart.prototype.draw=function(n,t){this.container.innerHTML="",typeof this.date_graph!="undefined"&&this.date_graph.destroy(),this.date_graph=new Dygraph(this.container,n,t)},Dygraph.GVizChart.prototype.setSelection=function(n){var t=!1;n.length&&(t=n[0].row),this.date_graph.setSelection(t)},Dygraph.GVizChart.prototype.getSelection=function(){var t=[],i=this.date_graph.getSelection(),r,n;if(i<0)return t;for(r=this.date_graph.layout_.points,n=0;n<r.length;++n)t.push({row:i,column:n+1});return t},Dygraph.Interaction={},Dygraph.Interaction.startPan=function(n,t,i){var r,e,o,h,s;if(i.isPanning=!0,o=t.xAxisRange(),i.dateRange=o[1]-o[0],i.initialLeftmostDate=o[0],i.xUnitsPerPixel=i.dateRange/(t.plotter_.area.w-1),t.attr_("panEdgeFraction")){var l=t.width_*t.attr_("panEdgeFraction"),a=t.xAxisExtremes(),k=t.toDomXCoord(a[0])-l,b=t.toDomXCoord(a[1])+l,d=t.toDataXCoord(k),nt=t.toDataXCoord(b);for(i.boundedDates=[d,nt],h=[],s=t.height_*t.attr_("panEdgeFraction"),r=0;r<t.axes_.length;r++){e=t.axes_[r];var c=e.extremeRange,g=t.toDomYCoord(c[0],r)+s,w=t.toDomYCoord(c[1],r)-s,v=t.toDataYCoord(g,r),p=t.toDataYCoord(w,r);h[r]=[v,p]}i.boundedValues=h}for(i.is2DPan=!1,i.axes=[],r=0;r<t.axes_.length;r++){e=t.axes_[r];var u={},f=t.yAxisRange(r),y=t.attributes_.getForAxis("logscale",r);y?(u.initialTopValue=Dygraph.log10(f[1]),u.dragValueRange=Dygraph.log10(f[1])-Dygraph.log10(f[0])):(u.initialTopValue=f[1],u.dragValueRange=f[1]-f[0]),u.unitsPerPixel=u.dragValueRange/(t.plotter_.area.h-1),i.axes.push(u),(e.valueWindow||e.valueRange)&&(i.is2DPan=!0)}},Dygraph.Interaction.movePan=function(n,t,i){var u,s,c,f,e,a;if(i.dragEndX=t.dragGetX_(n,i),i.dragEndY=t.dragGetY_(n,i),u=i.initialLeftmostDate-(i.dragEndX-i.dragStartX)*i.xUnitsPerPixel,i.boundedDates&&(u=Math.max(u,i.boundedDates[0])),s=u+i.dateRange,i.boundedDates&&s>i.boundedDates[1]&&(u=u-(s-i.boundedDates[1]),s=u+i.dateRange),t.dateWindow_=[u,s],i.is2DPan)for(c=i.dragEndY-i.dragStartY,f=0;f<t.axes_.length;f++){var l=t.axes_[f],h=i.axes[f],v=c*h.unitsPerPixel,o=i.boundedValues?i.boundedValues[f]:null,r=h.initialTopValue+v;o&&(r=Math.min(r,o[1])),e=r-h.dragValueRange,o&&e<o[0]&&(r=r-(e-o[0]),e=r-h.dragValueRange),a=t.attributes_.getForAxis("logscale",f),l.valueWindow=a?[Math.pow(Dygraph.LOG_SCALE,e),Math.pow(Dygraph.LOG_SCALE,r)]:[e,r]}t.drawGraph_(!1)},Dygraph.Interaction.endPan=function(n,t,i){i.dragEndX=t.dragGetX_(n,i),i.dragEndY=t.dragGetY_(n,i);var u=Math.abs(i.dragEndX-i.dragStartX),r=Math.abs(i.dragEndY-i.dragStartY);u<2&&r<2&&t.lastx_!==undefined&&t.lastx_!=-1&&Dygraph.Interaction.treatMouseOpAsClick(t,n,i),i.isPanning=!1,i.is2DPan=!1,i.initialLeftmostDate=null,i.dateRange=null,i.valueRange=null,i.boundedDates=null,i.boundedValues=null,i.axes=null},Dygraph.Interaction.startZoom=function(n,t,i){i.isZooming=!0,i.zoomMoved=!1},Dygraph.Interaction.moveZoom=function(n,t,i){i.zoomMoved=!0,i.dragEndX=t.dragGetX_(n,i),i.dragEndY=t.dragGetY_(n,i);var u=Math.abs(i.dragStartX-i.dragEndX),r=Math.abs(i.dragStartY-i.dragEndY);i.dragDirection=u<r/2?Dygraph.VERTICAL:Dygraph.HORIZONTAL,t.drawZoomRect_(i.dragDirection,i.dragStartX,i.dragEndX,i.dragStartY,i.dragEndY,i.prevDragDirection,i.prevEndX,i.prevEndY),i.prevEndX=i.dragEndX,i.prevEndY=i.dragEndY,i.prevDragDirection=i.dragDirection},Dygraph.Interaction.treatMouseOpAsClick=function(n,t,i){var c=n.attr_("clickCallback"),l=n.attr_("pointClickCallback"),h=null,e,f,r,s,u,o;if(l){for(e=-1,f=Number.MAX_VALUE,r=0;r<n.selPoints_.length;r++)s=n.selPoints_[r],u=Math.pow(s.canvasx-i.dragEndX,2)+Math.pow(s.canvasy-i.dragEndY,2),!isNaN(u)&&(e==-1||u<f)&&(f=u,e=r);o=n.attr_("highlightCircleSize")+2,f<=o*o&&(h=n.selPoints_[e])}h&&l(t,h),c&&c(t,n.lastx_,n.selPoints_)},Dygraph.Interaction.endZoom=function(n,t,i){var h,s,r,e,f,u,o;i.isZooming=!1,i.dragEndX=t.dragGetX_(n,i),i.dragEndY=t.dragGetY_(n,i),h=Math.abs(i.dragEndX-i.dragStartX),s=Math.abs(i.dragEndY-i.dragStartY),h<2&&s<2&&t.lastx_!==undefined&&t.lastx_!=-1&&Dygraph.Interaction.treatMouseOpAsClick(t,n,i),r=t.getArea(),h>=10&&i.dragDirection==Dygraph.HORIZONTAL?(e=Math.min(i.dragStartX,i.dragEndX),f=Math.max(i.dragStartX,i.dragEndX),e=Math.max(e,r.x),f=Math.min(f,r.x+r.w),e<f&&t.doZoomX_(e,f),i.cancelNextDblclick=!0):s>=10&&i.dragDirection==Dygraph.VERTICAL?(u=Math.min(i.dragStartY,i.dragEndY),o=Math.max(i.dragStartY,i.dragEndY),u=Math.max(u,r.y),o=Math.min(o,r.y+r.h),u<o&&t.doZoomY_(u,o),i.cancelNextDblclick=!0):i.zoomMoved&&t.clearZoomRect_(),i.dragStartX=null,i.dragStartY=null},Dygraph.Interaction.startTouch=function(n,t,i){var r,e,f,u;for(n.preventDefault(),n.touches.length>1&&(i.startTimeForDoubleTapMs=null),r=[],e=0;e<n.touches.length;e++)f=n.touches[e],r.push({pageX:f.pageX,pageY:f.pageY,dataX:t.toDataXCoord(f.pageX),dataY:t.toDataYCoord(f.pageY)});i.initialTouches=r,r.length==1?(i.initialPinchCenter=r[0],i.touchDirections={x:!0,y:!0}):r.length>=2&&(i.initialPinchCenter={pageX:.5*(r[0].pageX+r[1].pageX),pageY:.5*(r[0].pageY+r[1].pageY),dataX:.5*(r[0].dataX+r[1].dataX),dataY:.5*(r[0].dataY+r[1].dataY)},u=180/Math.PI*Math.atan2(i.initialPinchCenter.pageY-r[0].pageY,r[0].pageX-i.initialPinchCenter.pageX),u=Math.abs(u),u>90&&(u=90-u),i.touchDirections={x:u<90-45/2,y:u>45/2}),i.initialRange={x:t.xAxisRange(),y:t.yAxisRange()}},Dygraph.Interaction.moveTouch=function(n,t,i){var f,r,v,a,h,u,o,s,w,b,c,y,p,l;for(i.startTimeForDoubleTapMs=null,r=[],f=0;f<n.touches.length;f++)v=n.touches[f],r.push({pageX:v.pageX,pageY:v.pageY});a=i.initialTouches,u=i.initialPinchCenter,h=r.length==1?r[0]:{pageX:.5*(r[0].pageX+r[1].pageX),pageY:.5*(r[0].pageY+r[1].pageY)};var e={pageX:h.pageX-u.pageX,pageY:h.pageY-u.pageY},d=i.initialRange.x[1]-i.initialRange.x[0],k=i.initialRange.y[0]-i.initialRange.y[1];if(e.dataX=e.pageX/t.plotter_.area.w*d,e.dataY=e.pageY/t.plotter_.area.h*k,r.length==1?(o=1,s=1):r.length>=2&&(w=a[1].pageX-u.pageX,o=(r[1].pageX-h.pageX)/w,b=a[1].pageY-u.pageY,s=(r[1].pageY-h.pageY)/b),o=Math.min(8,Math.max(.125,o)),s=Math.min(8,Math.max(.125,s)),c=!1,i.touchDirections.x&&(t.dateWindow_=[u.dataX-e.dataX+(i.initialRange.x[0]-u.dataX)/o,u.dataX-e.dataX+(i.initialRange.x[1]-u.dataX)/o],c=!0),i.touchDirections.y)for(f=0;f<1;f++)y=t.axes_[f],p=t.attributes_.getForAxis("logscale",f),p||(y.valueWindow=[u.dataY-e.dataY+(i.initialRange.y[0]-u.dataY)/s,u.dataY-e.dataY+(i.initialRange.y[1]-u.dataY)/s],c=!0);t.drawGraph_(!1),c&&r.length>1&&t.attr_("zoomCallback")&&(l=t.xAxisRange(),t.attr_("zoomCallback")(l[0],l[1],t.yAxisRanges()))},Dygraph.Interaction.endTouch=function(n,t,i){if(n.touches.length!==0)Dygraph.Interaction.startTouch(n,t,i);else if(n.changedTouches.length==1){var u=+new Date,r=n.changedTouches[0];i.startTimeForDoubleTapMs&&u-i.startTimeForDoubleTapMs<500&&i.doubleTapX&&Math.abs(i.doubleTapX-r.screenX)<50&&i.doubleTapY&&Math.abs(i.doubleTapY-r.screenY)<50?t.resetZoom():(i.startTimeForDoubleTapMs=u,i.doubleTapX=r.screenX,i.doubleTapY=r.screenY)}},Dygraph.Interaction.defaultModel={mousedown:function(n,t,i){n.button&&n.button==2||(i.initializeMouseDown(n,t,i),n.altKey||n.shiftKey?Dygraph.startPan(n,t,i):Dygraph.startZoom(n,t,i))},mousemove:function(n,t,i){i.isZooming?Dygraph.moveZoom(n,t,i):i.isPanning&&Dygraph.movePan(n,t,i)},mouseup:function(n,t,i){i.isZooming?Dygraph.endZoom(n,t,i):i.isPanning&&Dygraph.endPan(n,t,i)},touchstart:function(n,t,i){Dygraph.Interaction.startTouch(n,t,i)},touchmove:function(n,t,i){Dygraph.Interaction.moveTouch(n,t,i)},touchend:function(n,t,i){Dygraph.Interaction.endTouch(n,t,i)},mouseout:function(n,t,i){i.isZooming&&(i.dragEndX=null,i.dragEndY=null,t.clearZoomRect_())},dblclick:function(n,t,i){if(i.cancelNextDblclick){i.cancelNextDblclick=!1;return}n.altKey||n.shiftKey||t.resetZoom()}},Dygraph.DEFAULT_ATTRS.interactionModel=Dygraph.Interaction.defaultModel,Dygraph.defaultInteractionModel=Dygraph.Interaction.defaultModel,Dygraph.endZoom=Dygraph.Interaction.endZoom,Dygraph.moveZoom=Dygraph.Interaction.moveZoom,Dygraph.startZoom=Dygraph.Interaction.startZoom,Dygraph.endPan=Dygraph.Interaction.endPan,Dygraph.movePan=Dygraph.Interaction.movePan,Dygraph.startPan=Dygraph.Interaction.startPan,Dygraph.Interaction.nonInteractiveModel_={mousedown:function(n,t,i){i.initializeMouseDown(n,t,i)},mouseup:function(n,t,i){i.dragEndX=t.dragGetX_(n,i),i.dragEndY=t.dragGetY_(n,i);var u=Math.abs(i.dragEndX-i.dragStartX),r=Math.abs(i.dragEndY-i.dragStartY);u<2&&r<2&&t.lastx_!==undefined&&t.lastx_!=-1&&Dygraph.Interaction.treatMouseOpAsClick(t,n,i)}},Dygraph.Interaction.dragIsPanInteractionModel={mousedown:function(n,t,i){i.initializeMouseDown(n,t,i),Dygraph.startPan(n,t,i)},mousemove:function(n,t,i){i.isPanning&&Dygraph.movePan(n,t,i)},mouseup:function(n,t,i){i.isPanning&&Dygraph.endPan(n,t,i)}},Dygraph.TickList=undefined,Dygraph.Ticker=undefined,Dygraph.numericLinearTicks=function(n,t,i,r,u,f){var e=function(n){return n==="logscale"?!1:r(n)};return Dygraph.numericTicks(n,t,i,e,u,f)},Dygraph.numericTicks=function(n,t,i,r,u,f){var b=r("pixelsPerLabel"),o=[],e,d,ft,l,c,a,h,k,ut,v,y,it;if(f)for(e=0;e<f.length;e++)o.push({v:f[e]});else{if(r("logscale")&&(l=Math.floor(i/b),c=Dygraph.binarySearch(n,Dygraph.PREFERRED_LOG_TICK_VALUES,1),a=Dygraph.binarySearch(t,Dygraph.PREFERRED_LOG_TICK_VALUES,-1),c==-1&&(c=0),a==-1&&(a=Dygraph.PREFERRED_LOG_TICK_VALUES.length-1),h=null,a-c>=l/4)){for(k=a;k>=c;k--){var w=Dygraph.PREFERRED_LOG_TICK_VALUES[k],g=Math.log(w/n)/Math.log(t/n)*i,rt={v:w};h===null?h={tickValue:w,pixel_coord:g}:Math.abs(g-h.pixel_coord)>=b?h={tickValue:w,pixel_coord:g}:rt.label="",o.push(rt)}o.reverse()}if(o.length===0){ut=r("labelsKMG2"),ut?(v=[1,2,4,8,16,32,64,128,256],y=16):(v=[1,2,5,10,20,50,100],y=10);var st=Math.ceil(i/b),et=Math.abs(t-n)/st,ht=Math.floor(Math.log(et)/Math.log(y)),ot=Math.pow(y,ht),s,p,nt,tt;for(d=0;d<v.length;d++)if(s=ot*v[d],p=Math.floor(n/s)*s,nt=Math.ceil(t/s)*s,l=Math.abs(nt-p)/s,tt=i/l,tt>b)break;for(p>nt&&(s*=-1),e=0;e<l;e++)ft=p+e*s,o.push({v:ft})}}for(it=r("axisLabelFormatter"),e=0;e<o.length;e++)o[e].label===undefined&&(o[e].label=it(o[e].v,0,r,u));return o},Dygraph.dateTicker=function(n,t,i,r,u){var e=Dygraph.pickDateTickGranularity(n,t,i,r);return e>=0?Dygraph.getDateAxis(n,t,e,r,u):[]},Dygraph.SECONDLY=0,Dygraph.TWO_SECONDLY=1,Dygraph.FIVE_SECONDLY=2,Dygraph.TEN_SECONDLY=3,Dygraph.THIRTY_SECONDLY=4,Dygraph.MINUTELY=5,Dygraph.TWO_MINUTELY=6,Dygraph.FIVE_MINUTELY=7,Dygraph.TEN_MINUTELY=8,Dygraph.THIRTY_MINUTELY=9,Dygraph.HOURLY=10,Dygraph.TWO_HOURLY=11,Dygraph.SIX_HOURLY=12,Dygraph.DAILY=13,Dygraph.WEEKLY=14,Dygraph.MONTHLY=15,Dygraph.QUARTERLY=16,Dygraph.BIANNUAL=17,Dygraph.ANNUAL=18,Dygraph.DECADAL=19,Dygraph.CENTENNIAL=20,Dygraph.NUM_GRANULARITIES=21,Dygraph.SHORT_SPACINGS=[],Dygraph.SHORT_SPACINGS[Dygraph.SECONDLY]=1e3,Dygraph.SHORT_SPACINGS[Dygraph.TWO_SECONDLY]=2e3,Dygraph.SHORT_SPACINGS[Dygraph.FIVE_SECONDLY]=5e3,Dygraph.SHORT_SPACINGS[Dygraph.TEN_SECONDLY]=1e4,Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_SECONDLY]=3e4,Dygraph.SHORT_SPACINGS[Dygraph.MINUTELY]=6e4,Dygraph.SHORT_SPACINGS[Dygraph.TWO_MINUTELY]=12e4,Dygraph.SHORT_SPACINGS[Dygraph.FIVE_MINUTELY]=3e5,Dygraph.SHORT_SPACINGS[Dygraph.TEN_MINUTELY]=6e5,Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_MINUTELY]=18e5,Dygraph.SHORT_SPACINGS[Dygraph.HOURLY]=36e5,Dygraph.SHORT_SPACINGS[Dygraph.TWO_HOURLY]=72e5,Dygraph.SHORT_SPACINGS[Dygraph.SIX_HOURLY]=216e5,Dygraph.SHORT_SPACINGS[Dygraph.DAILY]=864e5,Dygraph.SHORT_SPACINGS[Dygraph.WEEKLY]=6048e5,Dygraph.LONG_TICK_PLACEMENTS=[],Dygraph.LONG_TICK_PLACEMENTS[Dygraph.MONTHLY]={months:[0,1,2,3,4,5,6,7,8,9,10,11],year_mod:1},Dygraph.LONG_TICK_PLACEMENTS[Dygraph.QUARTERLY]={months:[0,3,6,9],year_mod:1},Dygraph.LONG_TICK_PLACEMENTS[Dygraph.BIANNUAL]={months:[0,6],year_mod:1},Dygraph.LONG_TICK_PLACEMENTS[Dygraph.ANNUAL]={months:[0],year_mod:1},Dygraph.LONG_TICK_PLACEMENTS[Dygraph.DECADAL]={months:[0],year_mod:10},Dygraph.LONG_TICK_PLACEMENTS[Dygraph.CENTENNIAL]={months:[0],year_mod:100},Dygraph.PREFERRED_LOG_TICK_VALUES=function(){for(var r=[],u,n,i,t=-39;t<=39;t++)for(u=Math.pow(10,t),n=1;n<=9;n++)i=u*n,r.push(i);return r}(),Dygraph.pickDateTickGranularity=function(n,t,i,r){for(var e=r("pixelsPerLabel"),f,u=0;u<Dygraph.NUM_GRANULARITIES;u++)if(f=Dygraph.numDateTicks(n,t,u),i/f>=e)return u;return-1},Dygraph.numDateTicks=function(n,t,i){var u;if(i<Dygraph.MONTHLY)return u=Dygraph.SHORT_SPACINGS[i],Math.floor(.5+1*(t-n)/u);var r=Dygraph.LONG_TICK_PLACEMENTS[i],e=365.2524*864e5,f=1*(t-n)/e;return Math.floor(.5+1*f*r.months.length/r.year_mod)},Dygraph.getDateAxis=function(n,t,i,r,u){var b=r("axisLabelFormatter"),p=[],e,s,h,d,k,v,y,c,a,w;if(i<Dygraph.MONTHLY){var l=Dygraph.SHORT_SPACINGS[i],o=l/1e3,f=new Date(n);for(Dygraph.setDateSameTZ(f,{ms:0}),o<=60?(s=f.getSeconds(),Dygraph.setDateSameTZ(f,{s:s-s%o})):(Dygraph.setDateSameTZ(f,{s:0}),o/=60,o<=60?(s=f.getMinutes(),Dygraph.setDateSameTZ(f,{m:s-s%o})):(Dygraph.setDateSameTZ(f,{m:0}),o/=60,o<=24?(s=f.getHours(),f.setHours(s-s%o)):(f.setHours(0),o/=24,o==7&&f.setDate(f.getDate()-f.getDay())))),n=f.getTime(),h=new Date(n).getTimezoneOffset(),d=l>=Dygraph.SHORT_SPACINGS[Dygraph.TWO_HOURLY],e=n;e<=t;e+=l)f=new Date(e),d&&f.getTimezoneOffset()!=h&&(k=f.getTimezoneOffset()-h,e+=k*6e4,f=new Date(e),h=f.getTimezoneOffset(),new Date(e+l).getTimezoneOffset()!=h&&(e+=l,f=new Date(e),h=f.getTimezoneOffset())),p.push({v:e,label:b(f,i,r,u)})}else{y=1,i<Dygraph.NUM_GRANULARITIES?(v=Dygraph.LONG_TICK_PLACEMENTS[i].months,y=Dygraph.LONG_TICK_PLACEMENTS[i].year_mod):Dygraph.warn("Span of dates is too long");var tt=new Date(n).getFullYear(),g=new Date(t).getFullYear(),nt=Dygraph.zeropad;for(c=tt;c<=g;c++)if(c%y==0)for(a=0;a<v.length;a++)(w=c+"/"+nt(1+v[a])+"/01",e=Dygraph.dateStrToMillis(w),e<n||e>t)||p.push({v:e,label:b(new Date(e),i,r,u)})}return p},Dygraph&&Dygraph.DEFAULT_ATTRS&&Dygraph.DEFAULT_ATTRS.axes&&Dygraph.DEFAULT_ATTRS.axes.x&&Dygraph.DEFAULT_ATTRS.axes.y&&Dygraph.DEFAULT_ATTRS.axes.y2&&(Dygraph.DEFAULT_ATTRS.axes.x.ticker=Dygraph.dateTicker,Dygraph.DEFAULT_ATTRS.axes.y.ticker=Dygraph.numericTicks,Dygraph.DEFAULT_ATTRS.axes.y2.ticker=Dygraph.numericTicks),Dygraph.Plugins={},Dygraph.Plugins.Annotations=function(){var n=function(){this.annotations_=[]};return n.prototype.toString=function(){return"Annotations Plugin"},n.prototype.activate=function(){return{clearChart:this.clearChart,didDrawChart:this.didDrawChart}},n.prototype.detachLabels=function(){for(var t,n=0;n<this.annotations_.length;n++)t=this.annotations_[n],t.parentNode&&t.parentNode.removeChild(t),this.annotations_[n]=null;this.annotations_=[]},n.prototype.clearChart=function(){this.detachLabels()},n.prototype.didDrawChart=function(n){var u=n.dygraph,w=u.layout_.annotated_points,p,t,r,o,i,b,v,s,a,h,l,f,c;if(w&&w.length!==0){var g=n.canvas.parentNode,d={position:"absolute",fontSize:u.getOption("axisLabelFontSize")+"px",zIndex:10,overflow:"hidden"},k=function(n,t,i){return function(r){var f=i.annotation;f.hasOwnProperty(n)?f[n](f,i,u,r):u.getOption(t)&&u.getOption(t)(f,i,u,r)}},e=n.dygraph.plotter_.area,y={};for(p=0;p<w.length;p++)if(t=w[p],!(t.canvasx<e.x)&&!(t.canvasx>e.x+e.w)&&!(t.canvasy<e.y)&&!(t.canvasy>e.y+e.h)){r=t.annotation,o=6,r.hasOwnProperty("tickHeight")&&(o=r.tickHeight),i=document.createElement("div");for(b in d)d.hasOwnProperty(b)&&(i.style[b]=d[b]);r.hasOwnProperty("icon")||(i.className="dygraphDefaultAnnotation"),r.hasOwnProperty("cssClass")&&(i.className+=" "+r.cssClass),v=r.hasOwnProperty("width")?r.width:16,s=r.hasOwnProperty("height")?r.height:16,r.hasOwnProperty("icon")?(a=document.createElement("img"),a.src=r.icon,a.width=v,a.height=s,i.appendChild(a)):t.annotation.hasOwnProperty("shortText")&&i.appendChild(document.createTextNode(t.annotation.shortText)),h=t.canvasx-v/2,i.style.left=h+"px",l=0,r.attachAtBottom?(c=e.y+e.h-s-o,y[h]?c-=y[h]:y[h]=0,y[h]+=o+s,l=c):l=t.canvasy-s-o,i.style.top=l+"px",i.style.width=v+"px",i.style.height=s+"px",i.title=t.annotation.text,i.style.color=u.colorsMap_[t.name],i.style.borderColor=u.colorsMap_[t.name],r.div=i,u.addAndTrackEvent(i,"click",k("clickHandler","annotationClickHandler",t,this)),u.addAndTrackEvent(i,"mouseover",k("mouseOverHandler","annotationMouseOverHandler",t,this)),u.addAndTrackEvent(i,"mouseout",k("mouseOutHandler","annotationMouseOutHandler",t,this)),u.addAndTrackEvent(i,"dblclick",k("dblClickHandler","annotationDblClickHandler",t,this)),g.appendChild(i),this.annotations_.push(i),f=n.drawingContext,f.save(),f.strokeStyle=u.colorsMap_[t.name],f.beginPath(),r.attachAtBottom?(c=l+s,f.moveTo(t.canvasx,c),f.lineTo(t.canvasx,c+o)):(f.moveTo(t.canvasx,t.canvasy),f.lineTo(t.canvasx,t.canvasy-2-o)),f.closePath(),f.stroke(),f.restore()}}},n.prototype.destroy=function(){this.detachLabels()},n}(),Dygraph.Plugins.Axes=function(){var n=function(){this.xlabels_=[],this.ylabels_=[]};return n.prototype.toString=function(){return"Axes Plugin"},n.prototype.activate=function(){return{layout:this.layout,clearChart:this.clearChart,willDrawChart:this.willDrawChart}},n.prototype.layout=function(n){var t=n.dygraph,r,i;t.getOption("drawYAxis")&&(i=t.getOption("yAxisLabelWidth")+2*t.getOption("axisTickSize"),n.reserveSpaceLeft(i)),t.getOption("drawXAxis")&&(r=t.getOption("xAxisHeight")?t.getOption("xAxisHeight"):t.getOptionForAxis("axisLabelFontSize","x")+2*t.getOption("axisTickSize"),n.reserveSpaceBottom(r)),t.numAxes()==2?t.getOption("drawYAxis")&&(i=t.getOption("yAxisLabelWidth")+2*t.getOption("axisTickSize"),n.reserveSpaceRight(i)):t.numAxes()>2&&t.error("Only two y-axes are supported at this time. (Trying to use "+t.numAxes()+")")},n.prototype.detachLabels=function(){function n(n){for(var t,i=0;i<n.length;i++)t=n[i],t.parentNode&&t.parentNode.removeChild(t)}n(this.xlabels_),n(this.ylabels_),this.xlabels_=[],this.ylabels_=[]},n.prototype.clearChart=function(){this.detachLabels()},n.prototype.willDrawChart=function(n){function p(n){return Math.round(n)+.5}function s(n){return Math.round(n)-.5}var i=n.dygraph,h,t,rt,it,y,c,a,v,l,b,f;if(i.getOption("drawXAxis")||i.getOption("drawYAxis")){var r=n.drawingContext,nt=n.canvas.parentNode,tt=n.canvas.width,ft=n.canvas.height,u,k,w,e,o,g=function(n){return{position:"absolute",fontSize:i.getOptionForAxis("axisLabelFontSize",n)+"px",zIndex:10,color:i.getOptionForAxis("axisLabelColor",n),width:i.getOption("axisLabelWidth")+"px",lineHeight:"normal",overflow:"hidden"}},et={x:g("x"),y:g("y"),y2:g("y2")},ut=function(n,t,i){var f=document.createElement("div"),e=et[i=="y2"?"y2":t],r,u;for(r in e)e.hasOwnProperty(r)&&(f.style[r]=e[r]);return u=document.createElement("div"),u.className="dygraph-axis-label dygraph-axis-label-"+t+(i?" dygraph-axis-label-"+i:""),u.innerHTML=n,f.appendChild(u),f};if(r.save(),h=i.layout_,t=n.dygraph.plotter_.area,i.getOption("drawYAxis")){if(h.yticks&&h.yticks.length>0){for(rt=i.numAxes(),o=0;o<h.yticks.length;o++){if(e=h.yticks[o],typeof e=="function")return;k=t.x,it=1,y="y1",e[0]==1&&(k=t.x+t.w,it=-1,y="y2"),c=i.getOptionForAxis("axisLabelFontSize",y),w=t.y+e[1]*t.h,u=ut(e[2],"y",rt==2?y:null),a=w-c/2,a<0&&(a=0),a+c+3>ft?u.style.bottom="0px":u.style.top=a+"px",e[0]===0?(u.style.left=t.x-i.getOption("yAxisLabelWidth")-i.getOption("axisTickSize")+"px",u.style.textAlign="right"):e[0]==1&&(u.style.left=t.x+t.w+i.getOption("axisTickSize")+"px",u.style.textAlign="left"),u.style.width=i.getOption("yAxisLabelWidth")+"px",nt.appendChild(u),this.ylabels_.push(u)}var d=this.ylabels_[0],c=i.getOptionForAxis("axisLabelFontSize","y"),ot=parseInt(d.style.top,10)+c;ot>ft-c&&(d.style.top=parseInt(d.style.top,10)-c/2+"px")}i.getOption("drawAxesAtZero")?(f=i.toPercentXCoord(0),(f>1||f<0||isNaN(f))&&(f=0),v=p(t.x+f*t.w)):v=p(t.x),r.strokeStyle=i.getOptionForAxis("axisLineColor","y"),r.lineWidth=i.getOptionForAxis("axisLineWidth","y"),r.beginPath(),r.moveTo(v,s(t.y)),r.lineTo(v,s(t.y+t.h)),r.closePath(),r.stroke(),i.numAxes()==2&&(r.strokeStyle=i.getOptionForAxis("axisLineColor","y2"),r.lineWidth=i.getOptionForAxis("axisLineWidth","y2"),r.beginPath(),r.moveTo(s(t.x+t.w),s(t.y)),r.lineTo(s(t.x+t.w),s(t.y+t.h)),r.closePath(),r.stroke())}if(i.getOption("drawXAxis")){if(h.xticks)for(o=0;o<h.xticks.length;o++)e=h.xticks[o],k=t.x+e[0]*t.w,w=t.y+t.h,u=ut(e[1],"x"),u.style.textAlign="center",u.style.top=w+i.getOption("axisTickSize")+"px",l=k-i.getOption("axisLabelWidth")/2,l+i.getOption("axisLabelWidth")>tt&&(l=tt-i.getOption("xAxisLabelWidth"),u.style.textAlign="right"),l<0&&(l=0,u.style.textAlign="left"),u.style.left=l+"px",u.style.width=i.getOption("xAxisLabelWidth")+"px",nt.appendChild(u),this.xlabels_.push(u);r.strokeStyle=i.getOptionForAxis("axisLineColor","x"),r.lineWidth=i.getOptionForAxis("axisLineWidth","x"),r.beginPath(),i.getOption("drawAxesAtZero")?(f=i.toPercentYCoord(0,0),(f>1||f<0)&&(f=1),b=s(t.y+f*t.h)):b=s(t.y+t.h),r.moveTo(p(t.x),b),r.lineTo(p(t.x+t.w),b),r.closePath(),r.stroke()}r.restore()}},n}(),Dygraph.Plugins.ChartLabels=function(){var n=function(){this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null},i,t;return n.prototype.toString=function(){return"ChartLabels Plugin"},n.prototype.activate=function(){return{layout:this.layout,didDrawChart:this.didDrawChart}},i=function(n){var t=document.createElement("div");return t.style.position="absolute",t.style.left=n.x+"px",t.style.top=n.y+"px",t.style.width=n.w+"px",t.style.height=n.h+"px",t},n.prototype.detachLabels_=function(){for(var i=[this.title_div_,this.xlabel_div_,this.ylabel_div_,this.y2label_div_],n,t=0;t<i.length;t++)(n=i[t],n)&&n.parentNode&&n.parentNode.removeChild(n);this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null},t=function(n,t,i,r,u){var e=document.createElement("div"),f,o,s;return e.style.position="absolute",e.style.left=i==1?"0px":t.x+"px",e.style.top=t.y+"px",e.style.width=t.w+"px",e.style.height=t.h+"px",e.style.fontSize=n.getOption("yLabelWidth")-2+"px",f=document.createElement("div"),f.style.position="absolute",f.style.width=t.h+"px",f.style.height=t.w+"px",f.style.top=t.h/2-t.w/2+"px",f.style.left=t.w/2-t.h/2+"px",f.style.textAlign="center",o="rotate("+(i==1?"-":"")+"90deg)",f.style.transform=o,f.style.WebkitTransform=o,f.style.MozTransform=o,f.style.OTransform=o,f.style.msTransform=o,typeof document.documentMode!="undefined"&&document.documentMode<9&&(f.style.filter="progid:DXImageTransform.Microsoft.BasicImage(rotation="+(i==1?"3":"1")+")",f.style.left="0px",f.style.top="0px"),s=document.createElement("div"),s.className=r,s.innerHTML=u,f.appendChild(s),e.appendChild(f),e},n.prototype.layout=function(n){var r,f,s,h,u,e,o;this.detachLabels_(),r=n.dygraph,f=n.chart_div,r.getOption("title")&&(s=n.reserveSpaceTop(r.getOption("titleHeight")),this.title_div_=i(s),this.title_div_.style.textAlign="center",this.title_div_.style.fontSize=r.getOption("titleHeight")-8+"px",this.title_div_.style.fontWeight="bold",this.title_div_.style.zIndex=10,u=document.createElement("div"),u.className="dygraph-label dygraph-title",u.innerHTML=r.getOption("title"),this.title_div_.appendChild(u),f.appendChild(this.title_div_)),r.getOption("xlabel")&&(h=n.reserveSpaceBottom(r.getOption("xLabelHeight")),this.xlabel_div_=i(h),this.xlabel_div_.style.textAlign="center",this.xlabel_div_.style.fontSize=r.getOption("xLabelHeight")-2+"px",u=document.createElement("div"),u.className="dygraph-label dygraph-xlabel",u.innerHTML=r.getOption("xlabel"),this.xlabel_div_.appendChild(u),f.appendChild(this.xlabel_div_)),r.getOption("ylabel")&&(e=n.reserveSpaceLeft(0),this.ylabel_div_=t(r,e,1,"dygraph-label dygraph-ylabel",r.getOption("ylabel")),f.appendChild(this.ylabel_div_)),r.getOption("y2label")&&r.numAxes()==2&&(o=n.reserveSpaceRight(0),this.y2label_div_=t(r,o,2,"dygraph-label dygraph-y2label",r.getOption("y2label")),f.appendChild(this.y2label_div_))},n.prototype.didDrawChart=function(n){var t=n.dygraph;this.title_div_&&(this.title_div_.children[0].innerHTML=t.getOption("title")),this.xlabel_div_&&(this.xlabel_div_.children[0].innerHTML=t.getOption("xlabel")),this.ylabel_div_&&(this.ylabel_div_.children[0].children[0].innerHTML=t.getOption("ylabel")),this.y2label_div_&&(this.y2label_div_.children[0].children[0].innerHTML=t.getOption("y2label"))},n.prototype.clearChart=function(){},n.prototype.destroy=function(){this.detachLabels_()},n}(),Dygraph.Plugins.Grid=function(){var n=function(){};return n.prototype.toString=function(){return"Gridline Plugin"},n.prototype.activate=function(){return{willDrawChart:this.willDrawChart}},n.prototype.willDrawChart=function(n){function b(n){return Math.round(n)+.5}function p(n){return Math.round(n)-.5}var r=n.dygraph,i=n.drawingContext,v=r.layout_,u=n.dygraph.plotter_.area,h,c,o,t,e,f,s;if(r.getOption("drawYGrid")){var l=["y","y2"],y=[],w=[],a=[],s=[],f=[];for(t=0;t<l.length;t++)a[t]=r.getOptionForAxis("drawGrid",l[t]),a[t]&&(y[t]=r.getOptionForAxis("gridLineColor",l[t]),w[t]=r.getOptionForAxis("gridLineWidth",l[t]),f[t]=r.getOptionForAxis("gridLinePattern",l[t]),s[t]=f[t]&&f[t].length>=2);for(o=v.yticks,i.save(),t=0;t<o.length;t++)e=o[t][0],a[e]&&(s[e]&&i.installPattern(f[e]),i.strokeStyle=y[e],i.lineWidth=w[e],h=b(u.x),c=p(u.y+o[t][1]*u.h),i.beginPath(),i.moveTo(h,c),i.lineTo(h+u.w,c),i.closePath(),i.stroke(),s[e]&&i.uninstallPattern());i.restore()}if(r.getOption("drawXGrid")&&r.getOptionForAxis("drawGrid","x")){for(o=v.xticks,i.save(),f=r.getOptionForAxis("gridLinePattern","x"),s=f&&f.length>=2,s&&i.installPattern(f),i.strokeStyle=r.getOptionForAxis("gridLineColor","x"),i.lineWidth=r.getOptionForAxis("gridLineWidth","x"),t=0;t<o.length;t++)h=b(u.x+o[t][0]*u.w),c=p(u.y+u.h),i.beginPath(),i.moveTo(h,c),i.lineTo(h,u.y),i.closePath(),i.stroke();s&&i.uninstallPattern(),i.restore()}},n.prototype.destroy=function(){},n}(),Dygraph.Plugins.Legend=function(){var n=function(){this.legend_div_=null,this.is_generated_div_=!1},t,r,i;return n.prototype.toString=function(){return"Legend Plugin"},n.prototype.activate=function(n){var t,f=n.getOption("labelsDivWidth"),i=n.getOption("labelsDiv"),r,u;if(i&&null!==i)t=typeof i=="string"||i instanceof String?document.getElementById(i):i;else{r={position:"absolute",fontSize:"14px",zIndex:10,width:f+"px",top:"0px",left:n.size().width-f-2+"px",background:"white",lineHeight:"normal",textAlign:"left",overflow:"hidden"},Dygraph.update(r,n.getOption("labelsDivStyles")),t=document.createElement("div"),t.className="dygraph-legend";for(u in r)if(r.hasOwnProperty(u))try{t.style[u]=r[u]}catch(e){this.warn("You are using unsupported css properties for your browser in labelsDivStyles")}n.graphDiv.appendChild(t),this.is_generated_div_=!0}return this.legend_div_=t,this.one_em_width_=10,{select:this.select,deselect:this.deselect,predraw:this.predraw,didDrawChart:this.didDrawChart}},i=function(n){var t=document.createElement("span"),i;return t.setAttribute("style","margin: 0; padding: 0 0 0 1em; border: 0;"),n.appendChild(t),i=t.offsetWidth,n.removeChild(t),i},n.prototype.select=function(n){var u=n.selectedX,r=n.selectedPoints,i=t(n.dygraph,u,r,this.one_em_width_);this.legend_div_.innerHTML=i},n.prototype.deselect=function(n){var u=i(this.legend_div_),r;this.one_em_width_=u,r=t(n.dygraph,undefined,undefined,u),this.legend_div_.innerHTML=r},n.prototype.didDrawChart=function(n){this.deselect(n)},n.prototype.predraw=function(n){if(this.is_generated_div_){n.dygraph.graphDiv.appendChild(this.legend_div_);var t=n.dygraph.plotter_.area,i=n.dygraph.getOption("labelsDivWidth");this.legend_div_.style.left=t.x+t.w-i-1+"px",this.legend_div_.style.top=t.y+"px",this.legend_div_.style.width=i+"px"}},n.prototype.destroy=function(){this.legend_div_=null},t=function(n,t,i,u){var e,c,f,w,b,s,h,a,d,l,k,v,p,o;if(n.getOption("showLabelsOnHighlight")!==!0)return"";if(s=n.getLabels(),typeof t=="undefined"){if(n.getOption("legend")!="always")return"";for(c=n.getOption("labelsSeparateLines"),e="",f=1;f<s.length;f++)(h=n.getPropertiesForSeries(s[f]),h.visible)&&(e!==""&&(e+=c?"<br/>":" "),b=n.getOption("strokePattern",s[f]),w=r(b,h.color,u),e+="<span style='font-weight: bold; color: "+h.color+";'>"+w+" "+s[f]+"</span>");return e}for(a=n.optionsViewForAxis_("x"),d=a("valueFormatter"),e=d(t,a,s[0],n),e!==""&&(e+=":"),l=[],k=n.numAxes(),f=0;f<k;f++)l[f]=n.optionsViewForAxis_("y"+(f?1+f:""));for(v=n.getOption("labelsShowZeroValues"),c=n.getOption("labelsSeparateLines"),p=n.getHighlightSeries(),f=0;f<i.length;f++)if((o=i[f],o.yval!==0||v)&&Dygraph.isOK(o.canvasy)){c&&(e+="<br/>");var h=n.getPropertiesForSeries(o.name),y=l[h.axis-1],tt=y("valueFormatter"),nt=tt(o.yval,y,o.name,n),g=o.name==p?" class='highlight'":"";e+="<span"+g+"> <b><span style='color: "+h.color+";'>"+o.name+"</span></b>:&nbsp;"+nt+"</span>"}return e},r=function(n,t,i){var a=/MSIE/.test(navigator.userAgent)&&!window.opera,h;if(a)return"&mdash;";if(!n||n.length<=1)return'<div style="display: inline-block; position: relative; bottom: .5ex; padding-left: 1em; height: 1px; border-bottom: 2px solid '+t+';"></div>';for(var s,l,c,e=0,o=0,u=[],f,r=0;r<=n.length;r++)e+=n[r%n.length];if(f=Math.floor(i/(e-n[0])),f>1){for(r=0;r<n.length;r++)u[r]=n[r]/i;o=u.length}else{for(f=1,r=0;r<n.length;r++)u[r]=n[r]/e;o=u.length+1}for(h="",s=0;s<f;s++)for(r=0;r<o;r+=2)l=u[r%u.length],c=r<n.length?u[(r+1)%u.length]:0,h+='<div style="display: inline-block; position: relative; bottom: .5ex; margin-right: '+c+"em; padding-left: "+l+"em; height: 1px; border-bottom: 2px solid "+t+';"></div>';return h},n}(),Dygraph.Plugins.RangeSelector=function(){var n=function(){this.isIE_=/MSIE/.test(navigator.userAgent)&&!window.opera,this.hasTouchInterface_=typeof TouchEvent!="undefined",this.isMobileDevice_=/mobile|android/gi.test(navigator.appVersion),this.interfaceCreated_=!1};return n.prototype.toString=function(){return"RangeSelector Plugin"},n.prototype.activate=function(n){return this.dygraph_=n,this.isUsingExcanvas_=n.isUsingExcanvas_,this.getOption_("showRangeSelector")&&this.createInterface_(),{layout:this.reserveSpace_,predraw:this.renderStaticLayer_,didDrawChart:this.renderInteractiveLayer_}},n.prototype.destroy=function(){this.bgcanvas_=null,this.fgcanvas_=null,this.leftZoomHandle_=null,this.rightZoomHandle_=null,this.iePanOverlay_=null},n.prototype.getOption_=function(n){return this.dygraph_.getOption(n)},n.prototype.setDefaultOption_=function(n,t){return this.dygraph_.attrs_[n]=t},n.prototype.createInterface_=function(){this.createCanvases_(),this.isUsingExcanvas_&&this.createIEPanOverlay_(),this.createZoomHandles_(),this.initInteraction_(),this.getOption_("animatedZooms")&&(this.dygraph_.warn("Animated zooms and range selector are not compatible; disabling animatedZooms."),this.dygraph_.updateOptions({animatedZooms:!1},!0)),this.interfaceCreated_=!0,this.addToGraph_()},n.prototype.addToGraph_=function(){var n=this.graphDiv_=this.dygraph_.graphDiv;n.appendChild(this.bgcanvas_),n.appendChild(this.fgcanvas_),n.appendChild(this.leftZoomHandle_),n.appendChild(this.rightZoomHandle_)},n.prototype.removeFromGraph_=function(){var n=this.graphDiv_;n.removeChild(this.bgcanvas_),n.removeChild(this.fgcanvas_),n.removeChild(this.leftZoomHandle_),n.removeChild(this.rightZoomHandle_),this.graphDiv_=null},n.prototype.reserveSpace_=function(n){this.getOption_("showRangeSelector")&&n.reserveSpaceBottom(this.getOption_("rangeSelectorHeight")+4)},n.prototype.renderStaticLayer_=function(){this.updateVisibility_()&&(this.resize_(),this.drawStaticLayer_())},n.prototype.renderInteractiveLayer_=function(){this.updateVisibility_()&&!this.isChangingRange_&&(this.placeZoomHandles_(),this.drawInteractiveLayer_())},n.prototype.updateVisibility_=function(){var t=this.getOption_("showRangeSelector"),n;return t?this.interfaceCreated_?this.graphDiv_&&this.graphDiv_.parentNode||this.addToGraph_():this.createInterface_():this.graphDiv_&&(this.removeFromGraph_(),n=this.dygraph_,setTimeout(function(){n.width_=0,n.resize()},1)),t},n.prototype.resize_=function(){function i(n,t){n.style.top=t.y+"px",n.style.left=t.x+"px",n.width=t.w,n.height=t.h,n.style.width=n.width+"px",n.style.height=n.height+"px"}var n=this.dygraph_.layout_.getPlotArea(),t=0;this.getOption_("drawXAxis")&&(t=this.getOption_("xAxisHeight")||this.getOption_("axisLabelFontSize")+2*this.getOption_("axisTickSize")),this.canvasRect_={x:n.x,y:n.y+n.h+t+4,w:n.w,h:this.getOption_("rangeSelectorHeight")},i(this.bgcanvas_,this.canvasRect_),i(this.fgcanvas_,this.canvasRect_)},n.prototype.createCanvases_=function(){this.bgcanvas_=Dygraph.createCanvas(),this.bgcanvas_.className="dygraph-rangesel-bgcanvas",this.bgcanvas_.style.position="absolute",this.bgcanvas_.style.zIndex=9,this.bgcanvas_ctx_=Dygraph.getContext(this.bgcanvas_),this.fgcanvas_=Dygraph.createCanvas(),this.fgcanvas_.className="dygraph-rangesel-fgcanvas",this.fgcanvas_.style.position="absolute",this.fgcanvas_.style.zIndex=9,this.fgcanvas_.style.cursor="default",this.fgcanvas_ctx_=Dygraph.getContext(this.fgcanvas_)},n.prototype.createIEPanOverlay_=function(){this.iePanOverlay_=document.createElement("div"),this.iePanOverlay_.style.position="absolute",this.iePanOverlay_.style.backgroundColor="white",this.iePanOverlay_.style.filter="alpha(opacity=0)",this.iePanOverlay_.style.display="none",this.iePanOverlay_.style.cursor="move",this.fgcanvas_.appendChild(this.iePanOverlay_)},n.prototype.createZoomHandles_=function(){var n=new Image;n.className="dygraph-rangesel-zoomhandle",n.style.position="absolute",n.style.zIndex=10,n.style.visibility="hidden",n.style.cursor="col-resize",/MSIE 7/.test(navigator.userAgent)?(n.width=7,n.height=14,n.style.backgroundColor="white",n.style.border="1px solid #333333"):(n.width=9,n.height=16,n.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII="),this.isMobileDevice_&&(n.width*=2,n.height*=2),this.leftZoomHandle_=n,this.rightZoomHandle_=n.cloneNode(!1)},n.prototype.initInteraction_=function(){var n=this,t=this.isIE_?document:window,u=0,r=null,f=!1,i=!1,a=!this.isMobileDevice_&&!this.isUsingExcanvas_,g=new Dygraph.IFrameTarp,d,l,v,o,k,b,e,s,c,y,nt,p,tt,h,w;d=function(t){var i=n.dygraph_.xAxisExtremes(),r=(i[1]-i[0])/n.canvasRect_.w,f=i[0]+(t.leftHandlePos-n.canvasRect_.x)*r,u=i[0]+(t.rightHandlePos-n.canvasRect_.x)*r;return[f,u]},l=function(i){return Dygraph.cancelEvent(i),f=!0,u=i.clientX,r=i.target?i.target:i.srcElement,(i.type==="mousedown"||i.type==="dragstart")&&(Dygraph.addEvent(t,"mousemove",v),Dygraph.addEvent(t,"mouseup",o)),n.fgcanvas_.style.cursor="col-resize",g.cover(),!0},v=function(t){var o,e,i,s;return f?(Dygraph.cancelEvent(t),o=t.clientX-u,Math.abs(o)<4)?!0:(u=t.clientX,e=n.getZoomHandleStatus_(),r==n.leftZoomHandle_?(i=e.leftHandlePos+o,i=Math.min(i,e.rightHandlePos-r.width-3),i=Math.max(i,n.canvasRect_.x)):(i=e.rightHandlePos+o,i=Math.min(i,n.canvasRect_.x+n.canvasRect_.w),i=Math.max(i,e.leftHandlePos+r.width+3)),s=r.width/2,r.style.left=i-s+"px",n.drawInteractiveLayer_(),a&&k(),!0):!1},o=function(){return f?(f=!1,g.uncover(),Dygraph.removeEvent(t,"mousemove",v),Dygraph.removeEvent(t,"mouseup",o),n.fgcanvas_.style.cursor="default",a||k(),!0):!1},k=function(){var i,t;try{i=n.getZoomHandleStatus_(),n.isChangingRange_=!0,i.isZoomed?(t=d(i),n.dygraph_.doZoomXDates_(t[0],t[1])):n.dygraph_.resetZoom()}finally{n.isChangingRange_=!1}},b=function(t){var i,u,r;return n.isUsingExcanvas_?t.srcElement==n.iePanOverlay_:(i=n.leftZoomHandle_.getBoundingClientRect(),u=i.left+i.width/2,i=n.rightZoomHandle_.getBoundingClientRect(),r=i.left+i.width/2,t.clientX>u&&t.clientX<r)},e=function(r){return!i&&b(r)&&n.getZoomHandleStatus_().isZoomed?(Dygraph.cancelEvent(r),i=!0,u=r.clientX,r.type==="mousedown"&&(Dygraph.addEvent(t,"mousemove",s),Dygraph.addEvent(t,"mouseup",c)),!0):!1},s=function(t){var e,o;if(!i)return!1;if(Dygraph.cancelEvent(t),e=t.clientX-u,Math.abs(e)<4)return!0;u=t.clientX;var s=n.getZoomHandleStatus_(),r=s.leftHandlePos,f=s.rightHandlePos,h=f-r;return r+e<=n.canvasRect_.x?(r=n.canvasRect_.x,f=r+h):f+e>=n.canvasRect_.x+n.canvasRect_.w?(f=n.canvasRect_.x+n.canvasRect_.w,r=f-h):(r+=e,f+=e),o=n.leftZoomHandle_.width/2,n.leftZoomHandle_.style.left=r-o+"px",n.rightZoomHandle_.style.left=f-o+"px",n.drawInteractiveLayer_(),a&&y(),!0},c=function(){return i?(i=!1,Dygraph.removeEvent(t,"mousemove",s),Dygraph.removeEvent(t,"mouseup",c),a||y(),!0):!1},y=function(){try{n.isChangingRange_=!0,n.dygraph_.dateWindow_=d(n.getZoomHandleStatus_()),n.dygraph_.drawGraph_(!1)}finally{n.isChangingRange_=!1}},nt=function(t){if(!f&&!i){var r=b(t)?"move":"default";r!=n.fgcanvas_.style.cursor&&(n.fgcanvas_.style.cursor=r)}},p=function(n){n.type=="touchstart"&&n.targetTouches.length==1?l(n.targetTouches[0])&&Dygraph.cancelEvent(n):n.type=="touchmove"&&n.targetTouches.length==1?v(n.targetTouches[0])&&Dygraph.cancelEvent(n):o(n)},tt=function(n){n.type=="touchstart"&&n.targetTouches.length==1?e(n.targetTouches[0])&&Dygraph.cancelEvent(n):n.type=="touchmove"&&n.targetTouches.length==1?s(n.targetTouches[0])&&Dygraph.cancelEvent(n):c(n)},h=function(t,i){for(var u=["touchstart","touchend","touchmove","touchcancel"],r=0;r<u.length;r++)n.dygraph_.addAndTrackEvent(t,u[r],i)},this.setDefaultOption_("interactionModel",Dygraph.Interaction.dragIsPanInteractionModel),this.setDefaultOption_("panEdgeFraction",.0001),w=window.opera?"mousedown":"dragstart",this.dygraph_.addAndTrackEvent(this.leftZoomHandle_,w,l),this.dygraph_.addAndTrackEvent(this.rightZoomHandle_,w,l),this.isUsingExcanvas_?this.dygraph_.addAndTrackEvent(this.iePanOverlay_,"mousedown",e):(this.dygraph_.addAndTrackEvent(this.fgcanvas_,"mousedown",e),this.dygraph_.addAndTrackEvent(this.fgcanvas_,"mousemove",nt)),this.hasTouchInterface_&&(h(this.leftZoomHandle_,p),h(this.rightZoomHandle_,p),h(this.fgcanvas_,tt))},n.prototype.drawStaticLayer_=function(){var t=this.bgcanvas_ctx_,n;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);try{this.drawMiniPlot_()}catch(i){Dygraph.warn(i)}n=.5,this.bgcanvas_ctx_.lineWidth=1,t.strokeStyle="gray",t.beginPath(),t.moveTo(n,n),t.lineTo(n,this.canvasRect_.h-n),t.lineTo(this.canvasRect_.w-n,this.canvasRect_.h-n),t.lineTo(this.canvasRect_.w-n,n),t.stroke()},n.prototype.drawMiniPlot_=function(){var l=this.getOption_("rangeSelectorPlotFillColor"),a=this.getOption_("rangeSelectorPlotStrokeColor"),s,o;if(l||a){var y=this.getOption_("stepPlot"),f=this.computeCombinedSeriesAndLimits_(),w=f.yMax-f.yMin,n=this.bgcanvas_ctx_,r=.5,v=this.dygraph_.xAxisExtremes(),k=Math.max(v[1]-v[0],1e-30),p=(this.canvasRect_.w-r)/k,b=(this.canvasRect_.h-r)/w,d=this.canvasRect_.w-r,t=this.canvasRect_.h-r,u=null,e=null;for(n.beginPath(),n.moveTo(r,t),s=0;s<f.data.length;s++){var h=f.data[s],i=h[0]!==null?(h[0]-v[0])*p:NaN,c=h[1]!==null?t-(h[1]-f.yMin)*b:NaN;isFinite(i)&&isFinite(c)?(u===null?n.lineTo(i,t):y&&n.lineTo(i,e),n.lineTo(i,c),u=i,e=c):(u!==null&&(y?(n.lineTo(i,e),n.lineTo(i,t)):n.lineTo(u,t)),u=e=null)}n.lineTo(d,t),n.closePath(),l&&(o=this.bgcanvas_ctx_.createLinearGradient(0,0,0,t),o.addColorStop(0,"white"),o.addColorStop(1,l),this.bgcanvas_ctx_.fillStyle=o,n.fill()),a&&(this.bgcanvas_ctx_.strokeStyle=a,this.bgcanvas_ctx_.lineWidth=1.5,n.stroke())}},n.prototype.computeCombinedSeriesAndLimits_=function(){for(var h=this.dygraph_.rawData_,b=this.getOption_("logscale"),i=[],r,e,a,c,t,w,u,l,o,s,f,v,y,p,n=0;n<h.length;n++)if(h[n].length>1&&h[n][1]!==null){if(a=typeof h[n][1]!="number",a)for(r=[],e=[],t=0;t<h[n][1].length;t++)r.push(0),e.push(0);break}for(n=0;n<h.length;n++){if(l=h[n],w=l[0],a)for(t=0;t<r.length;t++)r[t]=e[t]=0;else r=e=0;for(c=1;c<l.length;c++)if(this.dygraph_.visibility()[c-1])if(a)for(t=0;t<r.length;t++)(o=l[c][t],o===null||isNaN(o))||(r[t]+=o,e[t]++);else{if(o=l[c],o===null||isNaN(o))continue;r+=o,e++}if(a){for(t=0;t<r.length;t++)r[t]/=e[t];u=r.slice(0)}else u=r/e;i.push([w,u])}if(i=this.dygraph_.rollingAverage(i,this.dygraph_.rollPeriod_),typeof i[0][1]!="number")for(n=0;n<i.length;n++)u=i[n][1],i[n][1]=u[0];for(s=Number.MAX_VALUE,f=-Number.MAX_VALUE,n=0;n<i.length;n++)u=i[n][1],u!==null&&isFinite(u)&&(!b||u>0)&&(s=Math.min(s,u),f=Math.max(f,u));if(v=.25,b)for(f=Dygraph.log10(f),f+=f*v,s=Dygraph.log10(s),n=0;n<i.length;n++)i[n][1]=Dygraph.log10(i[n][1]);else p=f-s,y=p<=Number.MIN_VALUE?f*v:p*v,f+=y,s-=y;return{data:i,yMin:s,yMax:f}},n.prototype.placeZoomHandles_=function(){var n=this.dygraph_.xAxisExtremes(),r=this.dygraph_.xAxisRange(),i=n[1]-n[0],o=Math.max(0,(r[0]-n[0])/i),f=Math.max(0,(n[1]-r[1])/i),s=this.canvasRect_.x+this.canvasRect_.w*o,e=this.canvasRect_.x+this.canvasRect_.w*(1-f),u=Math.max(this.canvasRect_.y,this.canvasRect_.y+(this.canvasRect_.h-this.leftZoomHandle_.height)/2),t=this.leftZoomHandle_.width/2;this.leftZoomHandle_.style.left=s-t+"px",this.leftZoomHandle_.style.top=u+"px",this.rightZoomHandle_.style.left=e-t+"px",this.rightZoomHandle_.style.top=this.leftZoomHandle_.style.top,this.leftZoomHandle_.style.visibility="visible",this.rightZoomHandle_.style.visibility="visible"},n.prototype.drawInteractiveLayer_=function(){var n=this.fgcanvas_ctx_,i,r;n.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);var t=1,f=this.canvasRect_.w-t,u=this.canvasRect_.h-t,e=this.getZoomHandleStatus_();n.strokeStyle="black",e.isZoomed?(i=Math.max(t,e.leftHandlePos-this.canvasRect_.x),r=Math.min(f,e.rightHandlePos-this.canvasRect_.x),n.fillStyle="rgba(240, 240, 240, 0.6)",n.fillRect(0,0,i,this.canvasRect_.h),n.fillRect(r,0,this.canvasRect_.w-r,this.canvasRect_.h),n.beginPath(),n.moveTo(t,t),n.lineTo(i,t),n.lineTo(i,u),n.lineTo(r,u),n.lineTo(r,t),n.lineTo(f,t),n.stroke(),this.isUsingExcanvas_&&(this.iePanOverlay_.style.width=r-i+"px",this.iePanOverlay_.style.left=i+"px",this.iePanOverlay_.style.height=u+"px",this.iePanOverlay_.style.display="inline")):(n.beginPath(),n.moveTo(t,t),n.lineTo(t,u),n.lineTo(f,u),n.lineTo(f,t),n.stroke(),this.iePanOverlay_&&(this.iePanOverlay_.style.display="none"))},n.prototype.getZoomHandleStatus_=function(){var i=this.leftZoomHandle_.width/2,t=parseFloat(this.leftZoomHandle_.style.left)+i,n=parseFloat(this.rightZoomHandle_.style.left)+i;return{leftHandlePos:t,rightHandlePos:n,isZoomed:t-1>this.canvasRect_.x||n+1<this.canvasRect_.x+this.canvasRect_.w}},n}(),Dygraph.PLUGINS.push(Dygraph.Plugins.Legend,Dygraph.Plugins.Axes,Dygraph.Plugins.RangeSelector,Dygraph.Plugins.ChartLabels,Dygraph.Plugins.Annotations,Dygraph.Plugins.Grid)