{"version":3,"sources":["../../../dev/j/lib/d3.js"],"names":["d3_documentElement","node","ownerDocument","document","documentElement","d3_window","defaultView","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","length","mid","right","d3_transposeLength","d","d3_range_integerScale","k","d3_class","ctor","properties","key","Object","defineProperty","prototype","value","enumerable","d3_Map","this","_","create","d3_map_escape","d3_map_proto","d3_map_zero","d3_map_unescape","slice","d3_map_has","d3_map_remove","d3_map_keys","keys","push","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","apply","d3_vendorSymbol","object","name","charAt","toUpperCase","i","n","d3_vendorPrefixes","prefixName","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","event","l","z","listeners","on","listenerByName","listener","get","indexOf","concat","remove","set","d3_eventPreventDefault","d3","preventDefault","d3_eventSource","s","e","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","d3_selection","groups","d3_subclass","d3_selectionPrototype","d3_selection_selector","selector","d3_select","d3_selection_selectorAll","d3_selectAll","d3_selection_attr","attrNull","removeAttribute","attrNullNS","removeAttributeNS","space","local","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","ns","qualify","d3_collapse","trim","replace","d3_selection_classedRe","RegExp","requote","d3_selection_classes","split","d3_selection_classed","classedConstant","classedFunction","map","d3_selection_classedName","re","c","classList","add","getAttribute","lastIndex","test","d3_selection_style","priority","styleNull","style","removeProperty","styleConstant","setProperty","styleFunction","d3_selection_property","propertyNull","propertyConstant","propertyFunction","d3_selection_creator","namespace","namespaceURI","d3_nsXhtml","createElement","createElementNS","createNS","d3_selectionRemove","parent","parentNode","removeChild","d3_selection_dataNode","data","__data__","d3_selection_filter","d3_selectMatches","d3_selection_sortComparator","comparator","d3_selection_each","callback","j","m","group","d3_selection_enter","selection","d3_selection_enterPrototype","d3_selection_enterInsertBefore","enter","i0","j0","update","d3_selection_on","capture","onRemove","removeEventListener","$","onAdd","wrap","d3_array","call","addEventListener","removeAll","match","d3_selection_onListener","filter","d3_selection_onFilters","d3_selection_onFilter","o","related","relatedTarget","compareDocumentPosition","d3_event_dragSuppress","d3_event_dragId","click","w","select","d3_event_dragSelect","suppressClick","off","setTimeout","d3_mousePoint","container","changedTouches","svg","ownerSVGElement","createSVGPoint","point","d3_mouse_bug44083","window","scrollX","scrollY","append","position","top","margin","padding","border","ctm","getScreenCTM","f","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","d3_sgn","d3_cross2d","d3_acos","Ï€","Math","acos","d3_asin","halfÏ€","asin","d3_sinh","exp","d3_cosh","d3_tanh","d3_haversin","sin","d3_color","d3_hsl","h","d3_rgb_parse","d3_rgb_hsl","d3_hsl_rgb","v","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab","d3_lab_hcl","d3_rgb_lab","rgb","r","g","d3_hcl_lab","cos","d3_radians","d3_lab_rgb","d3_lab_xyz","d3_lab_X","d3_lab_Y","d3_lab_Z","d3_xyz_rgb","atan2","d3_degrees","sqrt","d3_xyz_lab","pow","d3_rgbNumber","d3_rgbString","d3_rgb_hex","max","toString","min","format","hsl","color","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","respond","result","status","request","d3_xhrHasResponse","xhr","error","load","headers","XMLHttpRequest","responseType","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","forEach","send","open","setRequestHeader","overrideMimeType","beforesend","abort","rebind","d3_xhr_fixCallback","responseText","d3_timer","delay","then","Date","now","time","timer","t","d3_timer_queueTail","d3_timer_queueHead","d3_timer_interval","d3_timer_timeout","clearTimeout","d3_timer_frame","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","Infinity","d3_format_precision","p","ceil","log","LN10","d3_formatPrefix","abs","scale","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","join","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","prefix","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","before","after","lastIndexOf","Array","d3_date_utc","UTC","d3_time_interval","step","number","date","d0","d1","offset","d3_date","range","dt","times","range_utc","utc","floor","d3_time_interval_utc","d3_locale_timeFormat","d3_time_format","template","string","charCodeAt","d3_time_formatPads","d3_time_formats","parse","H","M","S","L","Z","d3_time_parse","localZ","setFullYear","W","getDay","U","setHours","d3_time_parsers","d3_time_parseWeekdayAbbrev","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_parseWeekday","d3_time_dayRe","d3_time_dayLookup","d3_time_parseMonthAbbrev","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","d3_time_parseMonth","d3_time_monthRe","d3_time_monthLookup","d3_time_parseLocaleFull","d3_time_parseLocaleDate","d3_time_parseLocaleTime","X","d3_time_parseAmPm","d3_time_periodLookup","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","multi","d3_time_formatMulti","d3_time_formatRe","d3_time_formatLookup","A","getMonth","B","d3_time_formatPad","getDate","getHours","I","d3_time","dayOfYear","getMilliseconds","getMinutes","getSeconds","sundayOfYear","mondayOfYear","getFullYear","Y","d3_time_zone","%","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","names","d3_time_numberRe","d3_time_expandYear","getTimezoneOffset","zs","zh","zm","d3_time_percentRe","formats","d3_adder","d3_adderSum","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","hasOwnProperty","d3_geo_streamLine","coordinates","closed","coordinate","lineStart","lineEnd","d3_geo_streamPolygon","polygonStart","polygonEnd","d3_geo_areaRingStart","nextPoint","λ","φ","dλ","λ0","sdλ","adλ","cosφ","sinφ","sinφ0","u","cosφ0","d3_geo_areaRingSum","λ00","φ00","d3_geo_area","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","ε","d3_geo_centroidPoint","d3_geo_centroidPointXYZ","d3_geo_centroidW0","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidLineStart","y0","z0","x0","d3_geo_centroidW1","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroid","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","cx","cy","cz","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_compose","compose","invert","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","subject","clip","segment","p0","p1","d3_geo_clipPolygonIntersection","sort","d3_geo_clipPolygonLinkCircular","entry","points","start","current","isSubject","array","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","pointLine","line","pointRing","ring","ringListener","ringStart","ringEnd","clean","ringSegments","buffer","pop","polygon","polygonStarted","shift","d3_geo_clipSegmentLength1","rotatedClipStart","merge","d3_geo_pointInPolygon","d3_geo_clipSort","sphere","d3_geo_clipBufferListener","lines","rejoin","d3_geo_clipAntimeridianLine","φ0","sλ0","λ1","φ1","sλ1","d3_geo_clipAntimeridianIntersect","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianInterpolate","from","to","direction","meridian","parallel","meridianNormal","polarAngle","winding","reset","point0","antimeridian","Ï„","arc","intersection","φarc","d3_geo_clipCircle","radius","visible","cr","c0","v0","v00","point2","point1","smallRadius","code","intersect","notHemisphere","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","q","δλ","polar","q1","d3_geo_circleInterpolate","d3_geom_clipLine","x1","y1","ax","ay","bx","by","dx","dy","d3_geo_clipExtent","corner","comparePoints","ca","cb","insidePolygon","wn","a1","linePoint","first","v_","x_","y_","x__","y__","v__","bufferListener","d3_geo_clipExtentMAX","listener_","inside","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","forward","Ï","C","Ï0","Ï0_y","d3_geo_pathAreaRingStart","d3_geo_pathAreaPolygon","x00","y00","d3_geo_pathArea","d3_geo_pathBoundsPoint","d3_geo_pathBoundsX0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY0","d3_geo_pathBoundsY1","d3_geo_pathBuffer","pointCircle","pointLineStart","stream","lineEndPolygon","d3_geo_pathBufferCircle","pointRadius","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroid","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","resample","maxDepth","resampleRecursive","resampleNone","d3_geo_transformPoint","resampleLineTo","a0","b0","ringPoint","a00","b00","c00","b1","depth","d2","δ2","φ2","λ2","x2","y2","dx2","dy2","dz","cosMinDistance","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projection","projectRotate","δx","δy","d3_geo_rotation","δφ","δγ","center","invalidate","valid","projectResample","preclip","d3_geo_clipAntimeridian","postclip","clipAngle","clipExtent","output","translate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","angle","PI","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","d3_geo_interpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","distance","d3_geo_lengthLineStart","cosΔλ","d3_geo_lengthSum","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_conicConformal","F","tan","d3_geo_mercator","d3_geo_conicEquidistant","G","d3_geo_mercatorProjection","clipAuto","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","circle","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiBeachPool","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiBeaches","d3_geom_voronoiRemoveBeach","vertex","previous","P","next","N","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","insert","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiCloseCells","extent","cell","iHalfEdge","halfEdges","nHalfEdges","end","cells","d3_geom_voronoiCells","iCell","prepare","splice","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ε2","ha","d3_geom_voronoiCirclePool","d3_geom_voronoiCircles","d3_geom_voronoiFirstCircle","d3_geom_voronoiClipEdges","d3_geom_voronoiEdges","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","fx","fy","d3_geom_voronoiEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","diagram","d3_geom_voronoiTriangleArea","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeNode","leaf","nodes","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","below","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","interpolators","d3_interpolateArray","na","nb","n0","d3_ease_clamp","d3_ease_reverse","d3_ease_reflect","d3_ease_quad","d3_ease_cubic","d3_ease_cubicInOut","t3","d3_ease_poly","d3_ease_sin","d3_ease_exp","d3_ease_circle","d3_ease_elastic","d3_ease_back","d3_ease_bounce","d3_interpolateHcl","hcl","ah","ac","al","bh","bc","bl","d3_interpolateHsl","as","d3_interpolateLab","lab","aa","ba","d3_interpolateRound","d3_transform","r0","r1","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","d3_interpolateTransformPop","d3_interpolateTranslate","ta","tb","d3_interpolateRotate","ra","rb","d3_interpolateSkew","wa","wb","d3_interpolateScale","ka","kb","d3_interpolateTransform","transform","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","d3_layout_bundleLeastCommonAncestor","d3_layout_bundleAncestors","ancestors","aNodes","bNodes","aNode","bNode","sharedNode","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","quad","alpha","charges","charge","random","pointCharge","d3_layout_hierarchyRebind","hierarchy","links","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","d3_layout_stackMaxIndex","d3_layout_stackReduceSum","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","values","d3_layout_histogramBinFixed","LN2","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","bound","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","s1","s2","d3_layout_packUnlink","d3_layout_packTransform","db","da","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeShift","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterY","d3_layout_clusterX","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","domain","stop","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","i1","d3_scale_niceStep","d3_scale_niceIdentity","d3_scale_polylinear","bisect","d3_scale_linear","clamp","rescale","linear","input","Number","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","copy","d3_scale_linearRebind","d3_scale_linearTickRange","span","err","d3_scale_linearPrecision","d3_scale_linearFormatPrecision","d3_scale_linearFormatSignificant","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_pow","powp","d3_scale_powPow","powb","d3_scale_ordinal","ranger","steps","rangeBand","xi","has","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","d3_scale_quantile","thresholds","quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","d3_svg_arcInnerRadius","innerRadius","d3_svg_arcOuterRadius","outerRadius","d3_svg_arcStartAngle","startAngle","d3_svg_arcEndAngle","endAngle","d3_svg_arcPadAngle","padAngle","d3_svg_arcSweep","d3_svg_arcCornerTangents","rc","cw","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","tension","defined","d3_svg_lineLinear","interpolateKey","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStep","path","d3_svg_lineStepBefore","d3_svg_lineStepAfter","d3_svg_lineCardinalOpen","d3_svg_lineHermite","d3_svg_lineCardinalTangents","d3_svg_lineCardinalClosed","d3_svg_lineCardinal","tangents","pi","lp","p2","d3_svg_lineBasis","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","d3_svg_lineBasisOpen","d3_svg_lineBasisClosed","d3_svg_lineBundle","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","d3_svg_lineMonotone","d3_svg_lineRadial","d3_svg_area","area","points1","interpolateReverse","points0","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","d3_selection_interruptNS","lock","activeId","active","count","interrupt","d3_transition","id","d3_transitionPrototype","d3_transition_tween","tween","d3_transition_text","textContent","d3_transitionNamespace","d3_transitionNode","inherit","schedule","elapsed","transition","cancelId","cancel","tick","tweens","ease","duration","d3_svg_axisX","attr","d3_svg_axisY","d3_time_formatIsoNative","toISOString","d3_time_scale","methods","tickMethod","d3_time_scaleSteps","year","d3_time_scaleMilliseconds","d3_time_scaleDate","interval","skip","skipped","d3_json","JSON","d3_html","d3_document","createRange","selectNode","body","createContextualFragment","version","d3_arraySlice","list","childNodes","nodeType","d3_element_prototype","Element","d3_element_setAttribute","d3_element_setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","ascending","descending","sum","mean","median","numbers","variance","deviation","d3_bisect","bisectLeft","bisectRight","bisector","shuffle","permute","indexes","permutes","pairs","transpose","matrix","row","zip","entries","arrays","merged","Error","isArray","empty","nest","mapType","rollup","sortValues","keyValue","setter","valuesByKey","sortKey","sortKeys","keyMap","order","behavior","d3_requote_re","__proto__","property","querySelector","querySelectorAll","d3_selectMatcher","matches","Sizzle","matchesSelector","subgroup","subnode","subgroups","selectAll","d3_nsPrefix","xhtml","xlink","xml","xmlns","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","html","innerHTML","appendChild","insertBefore","bind","groupData","nodeData","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","exit","datum","nextSibling","args","upgroup","mouseenter","mouseleave","mouse","navigator","userAgent","touch","touches","drag","mousedown","touchstart","dragstart","move","moved","position1","dragId","position0","dragged","dragOffset","ended","dragSubject","dragName","dragRestore","that","correspondingElement","origin","τε","SQRT2","interpolateZoom","ux0","uy0","w0","ux1","uy1","w1","coshr0","zoom","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","view","scaleTo","scaleExtent","translateTo","zoomTo","__chart__","center0","zoomstarted","zooming","zoomed","zoomended","location0","mousemove","mouseup","d3_selection_interrupt","relocate","scale0","locations0","started","touchmove","touchend","targets","changed","touchtime","distance0","l0","l1","distance1","scale1","zoomName","mousewheelTimer","translate0","d3_behavior_zoomDelta","shiftKey","d3_behavior_zoomInfinity","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","d3_hslPrototype","brighter","darker","d3_hclPrototype","d3_lab_K","d3_labPrototype","d3_rgbPrototype","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","functor","dsv","delimiter","typedResponse","formatRow","formatValue","reFormat","delimiterCode","parseRows","Function","stringify","token","EOF","eol","EOL","rows","formatRows","fieldSet","fields","field","csv","tsv","flush","d3_formatPrefixes","String","fromCharCode","toPrecision","toExponential","toFixed","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getTime","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setUTCFullYear","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","day","years","week","sunday","weeks","weekOfYear","-","0","numberFormat","timeFormat","d3_locale_enUS","geo","d3_adderTemp","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","d3_geo_areaSum","bounds","ranges","normal","equatorial","inflection","λ_","λi","φi","dλSum","λ__","φ__","compareRanges","withinRange","best","centroid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathBounds","contextStream","cacheStream","projectStream","projectionMutator","equirectangular","Δλ","sinΔλ","sinφ1","graticule","X0","DX","X1","Y0","DY","Y1","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","stereographic","transverseMercator","geom","vertices","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","grandpa","uncle","sibling","voronoi","polygons","d3_geom_voronoiClipExtent","triangles","s0","delaunay","quadtree","nx","ny","insertChild","nPoint","xs","ys","x1_","y1_","x2_","y2_","compat","visit","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolateArray","d3_ease_default","d3_ease","poly","cubic","elastic","back","bounce","d3_ease_mode","in","out","in-out","out-in","interpolateHcl","interpolateHsl","interpolateLab","interpolateRound","baseVal","consolidate","d3_transformIdentity","interpolateTransform","layout","bundle","paths","chord","relayout","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","di","dj","subindex","sortChords","resort","force","repulse","dw","dn","theta2","chargeDistance2","dragmove","resume","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","d3_layout_forceChargeDistance2","gravity","weight","chargeDistance","theta","dimension","neighbors","candidates","stack","childs","revalue","partition","pie","arcs","d3_layout_pieSortByValue","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","inside-out","sums","bottom","tops","bottoms","default","silhouette","wiggle","s3","o0","expand","zero","histogram","bin","bins","valuer","binner","frequency","pack","root0","root1","wrapTree","firstWalk","secondWalk","nodeSize","sizeNode","tx","separation","node1","queue","siblings","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","cluster","previousNode","treemap","squarify","score","pad","remaining","mode","worst","stickify","rmax","rmin","ratio","stickies","sticky","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","quantize","threshold","circleSegment","rp","ap","padRadius","d3_svg_arcAuto","h1","h0","cornerRadius","rc1","rc0","oc","kc","lc","t30","t12","t03","t21","linear-closed","step-before","step-after","basis","basis-open","basis-closed","cardinal","cardinal-open","cardinal-closed","monotone","radial","equals","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","triangle-down","d3_svg_symbolSqrt3","triangle-up","symbolTypes","d3_transitionId","d3_transitionInherit","subnodes","nameNS","attrTween","attrTweenNS","styleString","styleTween","inheritId","id0","id1","axis","tickTransform","tickValues","tickArguments_","tickFormat_","tickEnter","tickExit","tickUpdate","tickSpacing","innerTickSize","tickPadding","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","orient","outerTickSize","d3_svg_axisDefaultOrient","d3_svg_axisOrients","tickSize","tickSubdivide","brush","brushstart","background","resize","resizes","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","xExtent","yExtent","keydown","keyCode","dragging","keyup","brushmove","altKey","resizingX","move1","resizingY","event_","yClamp","xClamp","yExtentDomain","xExtentDomain","brushend","eventTarget","resizing","ex","ey","d3_svg_brushResizes","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","json","responseXML","define","amd","module","exports"],"mappings":"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","file":"d3.js","sourcesContent":["!function() {\n var d3 = {\n version: \"3.5.17\"\n };\n var d3_arraySlice = [].slice, d3_array = function(list) {\n return d3_arraySlice.call(list);\n };\n var d3_document = this.document;\n function d3_documentElement(node) {\n return node && (node.ownerDocument || node.document || node).documentElement;\n }\n function d3_window(node) {\n return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n }\n if (d3_document) {\n try {\n d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n } catch (e) {\n d3_array = function(list) {\n var i = list.length, array = new Array(i);\n while (i--) array[i] = list[i];\n return array;\n };\n }\n }\n if (!Date.now) Date.now = function() {\n return +new Date();\n };\n if (d3_document) {\n try {\n d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n } catch (error) {\n var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n d3_element_prototype.setAttribute = function(name, value) {\n d3_element_setAttribute.call(this, name, value + \"\");\n };\n d3_element_prototype.setAttributeNS = function(space, local, value) {\n d3_element_setAttributeNS.call(this, space, local, value + \"\");\n };\n d3_style_prototype.setProperty = function(name, value, priority) {\n d3_style_setProperty.call(this, name, value + \"\", priority);\n };\n }\n }\n d3.ascending = d3_ascending;\n function d3_ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n d3.descending = function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n d3.min = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n }\n return a;\n };\n d3.max = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n }\n return a;\n };\n d3.extent = function(array, f) {\n var i = -1, n = array.length, a, b, c;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n return [ a, c ];\n };\n function d3_number(x) {\n return x === null ? NaN : +x;\n }\n function d3_numeric(x) {\n return !isNaN(x);\n }\n d3.sum = function(array, f) {\n var s = 0, n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n } else {\n while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n d3.mean = function(array, f) {\n var s = 0, n = array.length, a, i = -1, j = n;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n }\n if (j) return s / j;\n };\n d3.quantile = function(values, p) {\n var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n return e ? v + e * (values[h] - v) : v;\n };\n d3.median = function(array, f) {\n var numbers = [], n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n }\n if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n };\n d3.variance = function(array, f) {\n var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n if (arguments.length === 1) {\n while (++i < n) {\n if (d3_numeric(a = d3_number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n if (j > 1) return s / (j - 1);\n };\n d3.deviation = function() {\n var v = d3.variance.apply(this, arguments);\n return v ? Math.sqrt(v) : v;\n };\n function d3_bisector(compare) {\n return {\n left: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n var d3_bisect = d3_bisector(d3_ascending);\n d3.bisectLeft = d3_bisect.left;\n d3.bisect = d3.bisectRight = d3_bisect.right;\n d3.bisector = function(f) {\n return d3_bisector(f.length === 1 ? function(d, x) {\n return d3_ascending(f(d), x);\n } : f);\n };\n d3.shuffle = function(array, i0, i1) {\n if ((m = arguments.length) < 3) {\n i1 = array.length;\n if (m < 2) i0 = 0;\n }\n var m = i1 - i0, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n }\n return array;\n };\n d3.permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n };\n d3.pairs = function(array) {\n var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n return pairs;\n };\n d3.transpose = function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n };\n function d3_transposeLength(d) {\n return d.length;\n }\n d3.zip = function() {\n return d3.transpose(arguments);\n };\n d3.keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n };\n d3.values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n };\n d3.entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({\n key: key,\n value: map[key]\n });\n return entries;\n };\n d3.merge = function(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n };\n var abs = Math.abs;\n d3.range = function(start, stop, step) {\n if (arguments.length < 3) {\n step = 1;\n if (arguments.length < 2) {\n stop = start;\n start = 0;\n }\n }\n if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n start *= k, stop *= k, step *= k;\n if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n return range;\n };\n function d3_range_integerScale(x) {\n var k = 1;\n while (x * k % 1) k *= 10;\n return k;\n }\n function d3_class(ctor, properties) {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n }\n d3.map = function(object, f) {\n var map = new d3_Map();\n if (object instanceof d3_Map) {\n object.forEach(function(key, value) {\n map.set(key, value);\n });\n } else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n } else {\n for (var key in object) map.set(key, object[key]);\n }\n return map;\n };\n function d3_Map() {\n this._ = Object.create(null);\n }\n var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this._[d3_map_escape(key)];\n },\n set: function(key, value) {\n return this._[d3_map_escape(key)] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n for (var key in this._) values.push(this._[key]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var key in this._) entries.push({\n key: d3_map_unescape(key),\n value: this._[key]\n });\n return entries;\n },\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n }\n });\n function d3_map_escape(key) {\n return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n }\n function d3_map_unescape(key) {\n return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n }\n function d3_map_has(key) {\n return d3_map_escape(key) in this._;\n }\n function d3_map_remove(key) {\n return (key = d3_map_escape(key)) in this._ && delete this._[key];\n }\n function d3_map_keys() {\n var keys = [];\n for (var key in this._) keys.push(d3_map_unescape(key));\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this._) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this._) return false;\n return true;\n }\n d3.nest = function() {\n var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n function map(mapType, array, depth) {\n if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n values.push(object);\n } else {\n valuesByKey.set(keyValue, [ object ]);\n }\n }\n if (mapType) {\n object = mapType();\n setter = function(keyValue, values) {\n object.set(keyValue, map(mapType, values, depth));\n };\n } else {\n object = {};\n setter = function(keyValue, values) {\n object[keyValue] = map(mapType, values, depth);\n };\n }\n valuesByKey.forEach(setter);\n return object;\n }\n function entries(map, depth) {\n if (depth >= keys.length) return map;\n var array = [], sortKey = sortKeys[depth++];\n map.forEach(function(key, keyMap) {\n array.push({\n key: key,\n values: entries(keyMap, depth)\n });\n });\n return sortKey ? array.sort(function(a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n nest.map = function(array, mapType) {\n return map(mapType, array, 0);\n };\n nest.entries = function(array) {\n return entries(map(d3.map, array, 0), 0);\n };\n nest.key = function(d) {\n keys.push(d);\n return nest;\n };\n nest.sortKeys = function(order) {\n sortKeys[keys.length - 1] = order;\n return nest;\n };\n nest.sortValues = function(order) {\n sortValues = order;\n return nest;\n };\n nest.rollup = function(f) {\n rollup = f;\n return nest;\n };\n return nest;\n };\n d3.set = function(array) {\n var set = new d3_Set();\n if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n return set;\n };\n function d3_Set() {\n this._ = Object.create(null);\n }\n d3_class(d3_Set, {\n has: d3_map_has,\n add: function(key) {\n this._[d3_map_escape(key += \"\")] = true;\n return key;\n },\n remove: d3_map_remove,\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key));\n }\n });\n d3.behavior = {};\n function d3_identity(d) {\n return d;\n }\n d3.rebind = function(target, source) {\n var i = 1, n = arguments.length, method;\n while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n return target;\n };\n function d3_rebind(target, source, method) {\n return function() {\n var value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n }\n function d3_vendorSymbol(object, name) {\n if (name in object) return name;\n name = name.charAt(0).toUpperCase() + name.slice(1);\n for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n var prefixName = d3_vendorPrefixes[i] + name;\n if (prefixName in object) return prefixName;\n }\n }\n var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n function d3_noop() {}\n d3.dispatch = function() {\n var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n return dispatch;\n };\n function d3_dispatch() {}\n d3_dispatch.prototype.on = function(type, listener) {\n var i = type.indexOf(\".\"), name = \"\";\n if (i >= 0) {\n name = type.slice(i + 1);\n type = type.slice(0, i);\n }\n if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n if (arguments.length === 2) {\n if (listener == null) for (type in this) {\n if (this.hasOwnProperty(type)) this[type].on(name, null);\n }\n return this;\n }\n };\n function d3_dispatch_event(dispatch) {\n var listeners = [], listenerByName = new d3_Map();\n function event() {\n var z = listeners, i = -1, n = z.length, l;\n while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n return dispatch;\n }\n event.on = function(name, listener) {\n var l = listenerByName.get(name), i;\n if (arguments.length < 2) return l && l.on;\n if (l) {\n l.on = null;\n listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n listenerByName.remove(name);\n }\n if (listener) listeners.push(listenerByName.set(name, {\n on: listener\n }));\n return dispatch;\n };\n return event;\n }\n d3.event = null;\n function d3_eventPreventDefault() {\n d3.event.preventDefault();\n }\n function d3_eventSource() {\n var e = d3.event, s;\n while (s = e.sourceEvent) e = s;\n return e;\n }\n function d3_eventDispatch(target) {\n var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n dispatch.of = function(thiz, argumentz) {\n return function(e1) {\n try {\n var e0 = e1.sourceEvent = d3.event;\n e1.target = target;\n d3.event = e1;\n dispatch[e1.type].apply(thiz, argumentz);\n } finally {\n d3.event = e0;\n }\n };\n };\n return dispatch;\n }\n d3.requote = function(s) {\n return s.replace(d3_requote_re, \"\\\\$&\");\n };\n var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n var d3_subclass = {}.__proto__ ? function(object, prototype) {\n object.__proto__ = prototype;\n } : function(object, prototype) {\n for (var property in prototype) object[property] = prototype[property];\n };\n function d3_selection(groups) {\n d3_subclass(groups, d3_selectionPrototype);\n return groups;\n }\n var d3_select = function(s, n) {\n return n.querySelector(s);\n }, d3_selectAll = function(s, n) {\n return n.querySelectorAll(s);\n }, d3_selectMatches = function(n, s) {\n var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(n, s);\n };\n return d3_selectMatches(n, s);\n };\n if (typeof Sizzle === \"function\") {\n d3_select = function(s, n) {\n return Sizzle(s, n)[0] || null;\n };\n d3_selectAll = Sizzle;\n d3_selectMatches = Sizzle.matchesSelector;\n }\n d3.selection = function() {\n return d3.select(d3_document.documentElement);\n };\n var d3_selectionPrototype = d3.selection.prototype = [];\n d3_selectionPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, group, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selector(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_select(selector, this);\n };\n }\n d3_selectionPrototype.selectAll = function(selector) {\n var subgroups = [], subgroup, node;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n subgroup.parentNode = node;\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selectorAll(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_selectAll(selector, this);\n };\n }\n var d3_nsXhtml = \"http://www.w3.org/1999/xhtml\";\n var d3_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: d3_nsXhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return d3_nsPrefix.hasOwnProperty(prefix) ? {\n space: d3_nsPrefix[prefix],\n local: name\n } : name;\n }\n };\n d3_selectionPrototype.attr = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node();\n name = d3.ns.qualify(name);\n return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n }\n for (value in name) this.each(d3_selection_attr(value, name[value]));\n return this;\n }\n return this.each(d3_selection_attr(name, value));\n };\n function d3_selection_attr(name, value) {\n name = d3.ns.qualify(name);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrConstant() {\n this.setAttribute(name, value);\n }\n function attrConstantNS() {\n this.setAttributeNS(name.space, name.local, value);\n }\n function attrFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n }\n function attrFunctionNS() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n }\n return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n }\n function d3_collapse(s) {\n return s.trim().replace(/\\s+/g, \" \");\n }\n d3_selectionPrototype.classed = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n if (value = node.classList) {\n while (++i < n) if (!value.contains(name[i])) return false;\n } else {\n value = node.getAttribute(\"class\");\n while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n }\n return true;\n }\n for (value in name) this.each(d3_selection_classed(value, name[value]));\n return this;\n }\n return this.each(d3_selection_classed(name, value));\n };\n function d3_selection_classedRe(name) {\n return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n }\n function d3_selection_classes(name) {\n return (name + \"\").trim().split(/^|\\s+/);\n }\n function d3_selection_classed(name, value) {\n name = d3_selection_classes(name).map(d3_selection_classedName);\n var n = name.length;\n function classedConstant() {\n var i = -1;\n while (++i < n) name[i](this, value);\n }\n function classedFunction() {\n var i = -1, x = value.apply(this, arguments);\n while (++i < n) name[i](this, x);\n }\n return typeof value === \"function\" ? classedFunction : classedConstant;\n }\n function d3_selection_classedName(name) {\n var re = d3_selection_classedRe(name);\n return function(node, value) {\n if (c = node.classList) return value ? c.add(name) : c.remove(name);\n var c = node.getAttribute(\"class\") || \"\";\n if (value) {\n re.lastIndex = 0;\n if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n } else {\n node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n }\n };\n }\n d3_selectionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n return this;\n }\n if (n < 2) {\n var node = this.node();\n return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n priority = \"\";\n }\n return this.each(d3_selection_style(name, value, priority));\n };\n function d3_selection_style(name, value, priority) {\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleConstant() {\n this.style.setProperty(name, value, priority);\n }\n function styleFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n }\n return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n }\n d3_selectionPrototype.property = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") return this.node()[name];\n for (value in name) this.each(d3_selection_property(value, name[value]));\n return this;\n }\n return this.each(d3_selection_property(name, value));\n };\n function d3_selection_property(name, value) {\n function propertyNull() {\n delete this[name];\n }\n function propertyConstant() {\n this[name] = value;\n }\n function propertyFunction() {\n var x = value.apply(this, arguments);\n if (x == null) delete this[name]; else this[name] = x;\n }\n return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n }\n d3_selectionPrototype.text = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n } : value == null ? function() {\n this.textContent = \"\";\n } : function() {\n this.textContent = value;\n }) : this.node().textContent;\n };\n d3_selectionPrototype.html = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n } : value == null ? function() {\n this.innerHTML = \"\";\n } : function() {\n this.innerHTML = value;\n }) : this.node().innerHTML;\n };\n d3_selectionPrototype.append = function(name) {\n name = d3_selection_creator(name);\n return this.select(function() {\n return this.appendChild(name.apply(this, arguments));\n });\n };\n function d3_selection_creator(name) {\n function create() {\n var document = this.ownerDocument, namespace = this.namespaceURI;\n return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);\n }\n function createNS() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n }\n return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n }\n d3_selectionPrototype.insert = function(name, before) {\n name = d3_selection_creator(name);\n before = d3_selection_selector(before);\n return this.select(function() {\n return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n });\n };\n d3_selectionPrototype.remove = function() {\n return this.each(d3_selectionRemove);\n };\n function d3_selectionRemove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n d3_selectionPrototype.data = function(value, key) {\n var i = -1, n = this.length, group, node;\n if (!arguments.length) {\n value = new Array(n = (group = this[0]).length);\n while (++i < n) {\n if (node = group[i]) {\n value[i] = node.__data__;\n }\n }\n return value;\n }\n function bind(group, groupData) {\n var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n if (key) {\n var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n for (i = -1; ++i < n; ) {\n if (node = group[i]) {\n if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues[i] = keyValue;\n }\n }\n for (i = -1; ++i < m; ) {\n if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n } else if (node !== true) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n }\n nodeByKeyValue.set(keyValue, true);\n }\n for (i = -1; ++i < n; ) {\n if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {\n exitNodes[i] = group[i];\n }\n }\n } else {\n for (i = -1; ++i < n0; ) {\n node = group[i];\n nodeData = groupData[i];\n if (node) {\n node.__data__ = nodeData;\n updateNodes[i] = node;\n } else {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n }\n for (;i < m; ++i) {\n enterNodes[i] = d3_selection_dataNode(groupData[i]);\n }\n for (;i < n; ++i) {\n exitNodes[i] = group[i];\n }\n }\n enterNodes.update = updateNodes;\n enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n enter.push(enterNodes);\n update.push(updateNodes);\n exit.push(exitNodes);\n }\n var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n if (typeof value === \"function\") {\n while (++i < n) {\n bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n }\n } else {\n while (++i < n) {\n bind(group = this[i], value);\n }\n }\n update.enter = function() {\n return enter;\n };\n update.exit = function() {\n return exit;\n };\n return update;\n };\n function d3_selection_dataNode(data) {\n return {\n __data__: data\n };\n }\n d3_selectionPrototype.datum = function(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n };\n d3_selectionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_filter(selector) {\n return function() {\n return d3_selectMatches(this, selector);\n };\n }\n d3_selectionPrototype.order = function() {\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n };\n d3_selectionPrototype.sort = function(comparator) {\n comparator = d3_selection_sortComparator.apply(this, arguments);\n for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n return this.order();\n };\n function d3_selection_sortComparator(comparator) {\n if (!arguments.length) comparator = d3_ascending;\n return function(a, b) {\n return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n };\n }\n d3_selectionPrototype.each = function(callback) {\n return d3_selection_each(this, function(node, i, j) {\n callback.call(node, node.__data__, i, j);\n });\n };\n function d3_selection_each(groups, callback) {\n for (var j = 0, m = groups.length; j < m; j++) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n if (node = group[i]) callback(node, i, j);\n }\n }\n return groups;\n }\n d3_selectionPrototype.call = function(callback) {\n var args = d3_array(arguments);\n callback.apply(args[0] = this, args);\n return this;\n };\n d3_selectionPrototype.empty = function() {\n return !this.node();\n };\n d3_selectionPrototype.node = function() {\n for (var j = 0, m = this.length; j < m; j++) {\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n };\n d3_selectionPrototype.size = function() {\n var n = 0;\n d3_selection_each(this, function() {\n ++n;\n });\n return n;\n };\n function d3_selection_enter(selection) {\n d3_subclass(selection, d3_selection_enterPrototype);\n return selection;\n }\n var d3_selection_enterPrototype = [];\n d3.selection.enter = d3_selection_enter;\n d3.selection.enter.prototype = d3_selection_enterPrototype;\n d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n d3_selection_enterPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, upgroup, group, node;\n for (var j = -1, m = this.length; ++j < m; ) {\n upgroup = (group = this[j]).update;\n subgroups.push(subgroup = []);\n subgroup.parentNode = group.parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n d3_selection_enterPrototype.insert = function(name, before) {\n if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n return d3_selectionPrototype.insert.call(this, name, before);\n };\n function d3_selection_enterInsertBefore(enter) {\n var i0, j0;\n return function(d, i, j) {\n var group = enter[j].update, n = group.length, node;\n if (j != j0) j0 = j, i0 = 0;\n if (i >= i0) i0 = i + 1;\n while (!(node = group[i0]) && ++i0 < n) ;\n return node;\n };\n }\n d3.select = function(node) {\n var group;\n if (typeof node === \"string\") {\n group = [ d3_select(node, d3_document) ];\n group.parentNode = d3_document.documentElement;\n } else {\n group = [ node ];\n group.parentNode = d3_documentElement(node);\n }\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group;\n if (typeof nodes === \"string\") {\n group = d3_array(d3_selectAll(nodes, d3_document));\n group.parentNode = d3_document.documentElement;\n } else {\n group = d3_array(nodes);\n group.parentNode = null;\n }\n return d3_selection([ group ]);\n };\n d3_selectionPrototype.on = function(type, listener, capture) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof type !== \"string\") {\n if (n < 2) listener = false;\n for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n return this;\n }\n if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n capture = false;\n }\n return this.each(d3_selection_on(type, listener, capture));\n };\n function d3_selection_on(type, listener, capture) {\n var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n if (i > 0) type = type.slice(0, i);\n var filter = d3_selection_onFilters.get(type);\n if (filter) type = filter, wrap = d3_selection_onFilter;\n function onRemove() {\n var l = this[name];\n if (l) {\n this.removeEventListener(type, l, l.$);\n delete this[name];\n }\n }\n function onAdd() {\n var l = wrap(listener, d3_array(arguments));\n onRemove.call(this);\n this.addEventListener(type, this[name] = l, l.$ = capture);\n l._ = listener;\n }\n function removeAll() {\n var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n for (var name in this) {\n if (match = name.match(re)) {\n var l = this[name];\n this.removeEventListener(match[1], l, l.$);\n delete this[name];\n }\n }\n }\n return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n }\n var d3_selection_onFilters = d3.map({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n });\n if (d3_document) {\n d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n });\n }\n function d3_selection_onListener(listener, argumentz) {\n return function(e) {\n var o = d3.event;\n d3.event = e;\n argumentz[0] = this.__data__;\n try {\n listener.apply(this, argumentz);\n } finally {\n d3.event = o;\n }\n };\n }\n function d3_selection_onFilter(listener, argumentz) {\n var l = d3_selection_onListener(listener, argumentz);\n return function(e) {\n var target = this, related = e.relatedTarget;\n if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n l.call(target, e);\n }\n };\n }\n var d3_event_dragSelect, d3_event_dragId = 0;\n function d3_event_dragSuppress(node) {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect == null) {\n d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n }\n if (d3_event_dragSelect) {\n var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n style[d3_event_dragSelect] = \"none\";\n }\n return function(suppressClick) {\n w.on(name, null);\n if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n if (suppressClick) {\n var off = function() {\n w.on(click, null);\n };\n w.on(click, function() {\n d3_eventPreventDefault();\n off();\n }, true);\n setTimeout(off, 0);\n }\n };\n }\n d3.mouse = function(container) {\n return d3_mousePoint(container, d3_eventSource());\n };\n var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n function d3_mousePoint(container, e) {\n if (e.changedTouches) e = e.changedTouches[0];\n var svg = container.ownerSVGElement || container;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n if (d3_mouse_bug44083 < 0) {\n var window = d3_window(container);\n if (window.scrollX || window.scrollY) {\n svg = d3.select(\"body\").append(\"svg\").style({\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n border: \"none\"\n }, \"important\");\n var ctm = svg[0][0].getScreenCTM();\n d3_mouse_bug44083 = !(ctm.f || ctm.e);\n svg.remove();\n }\n }\n if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n point.y = e.clientY;\n point = point.matrixTransform(container.getScreenCTM().inverse());\n return [ point.x, point.y ];\n }\n var rect = container.getBoundingClientRect();\n return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n }\n d3.touch = function(container, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return d3_mousePoint(container, touch);\n }\n }\n };\n d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n function drag() {\n this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n }\n function dragstart(id, position, subject, move, end) {\n return function() {\n var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n if (origin) {\n dragOffset = origin.apply(that, arguments);\n dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n } else {\n dragOffset = [ 0, 0 ];\n }\n dispatch({\n type: \"dragstart\"\n });\n function moved() {\n var position1 = position(parent, dragId), dx, dy;\n if (!position1) return;\n dx = position1[0] - position0[0];\n dy = position1[1] - position0[1];\n dragged |= dx | dy;\n position0 = position1;\n dispatch({\n type: \"drag\",\n x: position1[0] + dragOffset[0],\n y: position1[1] + dragOffset[1],\n dx: dx,\n dy: dy\n });\n }\n function ended() {\n if (!position(parent, dragId)) return;\n dragSubject.on(move + dragName, null).on(end + dragName, null);\n dragRestore(dragged);\n dispatch({\n type: \"dragend\"\n });\n }\n };\n }\n drag.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return drag;\n };\n return d3.rebind(drag, event, \"on\");\n };\n function d3_behavior_dragTouchId() {\n return d3.event.changedTouches[0].identifier;\n }\n d3.touches = function(container, touches) {\n if (arguments.length < 2) touches = d3_eventSource().touches;\n return touches ? d3_array(touches).map(function(touch) {\n var point = d3_mousePoint(container, touch);\n point.identifier = touch.identifier;\n return point;\n }) : [];\n };\n var ε = 1e-6, ε2 = ε * ε, Ï€ = Math.PI, Ï„ = 2 * Ï€, τε = Ï„ - ε, halfÏ€ = Ï€ / 2, d3_radians = Ï€ / 180, d3_degrees = 180 / Ï€;\n function d3_sgn(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n }\n function d3_cross2d(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n }\n function d3_acos(x) {\n return x > 1 ? 0 : x < -1 ? Ï€ : Math.acos(x);\n }\n function d3_asin(x) {\n return x > 1 ? halfÏ€ : x < -1 ? -halfÏ€ : Math.asin(x);\n }\n function d3_sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n function d3_cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n function d3_tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n function d3_haversin(x) {\n return (x = Math.sin(x / 2)) * x;\n }\n var Ï = Math.SQRT2, Ï2 = 2, Ï4 = 4;\n d3.interpolateZoom = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;\n if (d2 < ε2) {\n S = Math.log(w1 / w0) / Ï;\n i = function(t) {\n return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(Ï * t * S) ];\n };\n } else {\n var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + Ï4 * d2) / (2 * w0 * Ï2 * d1), b1 = (w1 * w1 - w0 * w0 - Ï4 * d2) / (2 * w1 * Ï2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / Ï;\n i = function(t) {\n var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (Ï2 * d1) * (coshr0 * d3_tanh(Ï * s + r0) - d3_sinh(r0));\n return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(Ï * s + r0) ];\n };\n }\n i.duration = S * 1e3;\n return i;\n };\n d3.behavior.zoom = function() {\n var view = {\n x: 0,\n y: 0,\n k: 1\n }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n if (!d3_behavior_zoomWheel) {\n d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return d3.event.wheelDelta;\n }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n return -d3.event.detail;\n }, \"MozMousePixelScroll\");\n }\n function zoom(g) {\n g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n }\n zoom.event = function(g) {\n g.each(function() {\n var dispatch = event.of(this, arguments), view1 = view;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.zoom\", function() {\n view = this.__chart__ || {\n x: 0,\n y: 0,\n k: 1\n };\n zoomstarted(dispatch);\n }).tween(\"zoom:zoom\", function() {\n var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n return function(t) {\n var l = i(t), k = dx / l[2];\n this.__chart__ = view = {\n x: cx - l[0] * k,\n y: cy - l[1] * k,\n k: k\n };\n zoomed(dispatch);\n };\n }).each(\"interrupt.zoom\", function() {\n zoomended(dispatch);\n }).each(\"end.zoom\", function() {\n zoomended(dispatch);\n });\n } else {\n this.__chart__ = view;\n zoomstarted(dispatch);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n });\n };\n zoom.translate = function(_) {\n if (!arguments.length) return [ view.x, view.y ];\n view = {\n x: +_[0],\n y: +_[1],\n k: view.k\n };\n rescale();\n return zoom;\n };\n zoom.scale = function(_) {\n if (!arguments.length) return view.k;\n view = {\n x: view.x,\n y: view.y,\n k: null\n };\n scaleTo(+_);\n rescale();\n return zoom;\n };\n zoom.scaleExtent = function(_) {\n if (!arguments.length) return scaleExtent;\n scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.center = function(_) {\n if (!arguments.length) return center;\n center = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.size = function(_) {\n if (!arguments.length) return size;\n size = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.duration = function(_) {\n if (!arguments.length) return duration;\n duration = +_;\n return zoom;\n };\n zoom.x = function(z) {\n if (!arguments.length) return x1;\n x1 = z;\n x0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n zoom.y = function(z) {\n if (!arguments.length) return y1;\n y1 = z;\n y0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n function location(p) {\n return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n }\n function point(l) {\n return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n }\n function scaleTo(s) {\n view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n }\n function translateTo(p, l) {\n l = point(l);\n view.x += p[0] - l[0];\n view.y += p[1] - l[1];\n }\n function zoomTo(that, p, l, k) {\n that.__chart__ = {\n x: view.x,\n y: view.y,\n k: view.k\n };\n scaleTo(Math.pow(2, k));\n translateTo(center0 = p, l);\n that = d3.select(that);\n if (duration > 0) that = that.transition().duration(duration);\n that.call(zoom.event);\n }\n function rescale() {\n if (x1) x1.domain(x0.range().map(function(x) {\n return (x - view.x) / view.k;\n }).map(x0.invert));\n if (y1) y1.domain(y0.range().map(function(y) {\n return (y - view.y) / view.k;\n }).map(y0.invert));\n }\n function zoomstarted(dispatch) {\n if (!zooming++) dispatch({\n type: \"zoomstart\"\n });\n }\n function zoomed(dispatch) {\n rescale();\n dispatch({\n type: \"zoom\",\n scale: view.k,\n translate: [ view.x, view.y ]\n });\n }\n function zoomended(dispatch) {\n if (!--zooming) dispatch({\n type: \"zoomend\"\n }), center0 = null;\n }\n function mousedowned() {\n var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n d3_selection_interrupt.call(that);\n zoomstarted(dispatch);\n function moved() {\n dragged = 1;\n translateTo(d3.mouse(that), location0);\n zoomed(dispatch);\n }\n function ended() {\n subject.on(mousemove, null).on(mouseup, null);\n dragRestore(dragged);\n zoomended(dispatch);\n }\n }\n function touchstarted() {\n var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n started();\n zoomstarted(dispatch);\n subject.on(mousedown, null).on(touchstart, started);\n function relocate() {\n var touches = d3.touches(that);\n scale0 = view.k;\n touches.forEach(function(t) {\n if (t.identifier in locations0) locations0[t.identifier] = location(t);\n });\n return touches;\n }\n function started() {\n var target = d3.event.target;\n d3.select(target).on(touchmove, moved).on(touchend, ended);\n targets.push(target);\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n locations0[changed[i].identifier] = null;\n }\n var touches = relocate(), now = Date.now();\n if (touches.length === 1) {\n if (now - touchtime < 500) {\n var p = touches[0];\n zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n d3_eventPreventDefault();\n }\n touchtime = now;\n } else if (touches.length > 1) {\n var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n distance0 = dx * dx + dy * dy;\n }\n }\n function moved() {\n var touches = d3.touches(that), p0, l0, p1, l1;\n d3_selection_interrupt.call(that);\n for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n p1 = touches[i];\n if (l1 = locations0[p1.identifier]) {\n if (l0) break;\n p0 = p1, l0 = l1;\n }\n }\n if (l1) {\n var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n scaleTo(scale1 * scale0);\n }\n touchtime = null;\n translateTo(p0, l0);\n zoomed(dispatch);\n }\n function ended() {\n if (d3.event.touches.length) {\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n delete locations0[changed[i].identifier];\n }\n for (var identifier in locations0) {\n return void relocate();\n }\n }\n d3.selectAll(targets).on(zoomName, null);\n subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n dragRestore();\n zoomended(dispatch);\n }\n }\n function mousewheeled() {\n var dispatch = event.of(this, arguments);\n if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), \n translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);\n mousewheelTimer = setTimeout(function() {\n mousewheelTimer = null;\n zoomended(dispatch);\n }, 50);\n d3_eventPreventDefault();\n scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n translateTo(center0, translate0);\n zoomed(dispatch);\n }\n function dblclicked() {\n var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n d3.color = d3_color;\n function d3_color() {}\n d3_color.prototype.toString = function() {\n return this.rgb() + \"\";\n };\n d3.hsl = d3_hsl;\n function d3_hsl(h, s, l) {\n return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n }\n var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n d3_hslPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, this.l / k);\n };\n d3_hslPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, k * this.l);\n };\n d3_hslPrototype.rgb = function() {\n return d3_hsl_rgb(this.h, this.s, this.l);\n };\n function d3_hsl_rgb(h, s, l) {\n var m1, m2;\n h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n l = l < 0 ? 0 : l > 1 ? 1 : l;\n m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n m1 = 2 * l - m2;\n function v(h) {\n if (h > 360) h -= 360; else if (h < 0) h += 360;\n if (h < 60) return m1 + (m2 - m1) * h / 60;\n if (h < 180) return m2;\n if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n return m1;\n }\n function vv(h) {\n return Math.round(v(h) * 255);\n }\n return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n }\n d3.hcl = d3_hcl;\n function d3_hcl(h, c, l) {\n return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n }\n var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n d3_hclPrototype.brighter = function(k) {\n return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.darker = function(k) {\n return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.rgb = function() {\n return d3_hcl_lab(this.h, this.c, this.l).rgb();\n };\n function d3_hcl_lab(h, c, l) {\n if (isNaN(h)) h = 0;\n if (isNaN(c)) c = 0;\n return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n }\n d3.lab = d3_lab;\n function d3_lab(l, a, b) {\n return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n }\n var d3_lab_K = 18;\n var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n var d3_labPrototype = d3_lab.prototype = new d3_color();\n d3_labPrototype.brighter = function(k) {\n return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.darker = function(k) {\n return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.rgb = function() {\n return d3_lab_rgb(this.l, this.a, this.b);\n };\n function d3_lab_rgb(l, a, b) {\n var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n x = d3_lab_xyz(x) * d3_lab_X;\n y = d3_lab_xyz(y) * d3_lab_Y;\n z = d3_lab_xyz(z) * d3_lab_Z;\n return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n }\n function d3_lab_hcl(l, a, b) {\n return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n }\n function d3_lab_xyz(x) {\n return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n }\n function d3_xyz_lab(x) {\n return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n }\n function d3_xyz_rgb(r) {\n return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n }\n d3.rgb = d3_rgb;\n function d3_rgb(r, g, b) {\n return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n }\n function d3_rgbNumber(value) {\n return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n }\n function d3_rgbString(value) {\n return d3_rgbNumber(value) + \"\";\n }\n var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n d3_rgbPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n var r = this.r, g = this.g, b = this.b, i = 30;\n if (!r && !g && !b) return new d3_rgb(i, i, i);\n if (r && r < i) r = i;\n if (g && g < i) g = i;\n if (b && b < i) b = i;\n return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n };\n d3_rgbPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_rgb(k * this.r, k * this.g, k * this.b);\n };\n d3_rgbPrototype.hsl = function() {\n return d3_rgb_hsl(this.r, this.g, this.b);\n };\n d3_rgbPrototype.toString = function() {\n return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n };\n function d3_rgb_hex(v) {\n return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n }\n function d3_rgb_parse(format, rgb, hsl) {\n var r = 0, g = 0, b = 0, m1, m2, color;\n m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());\n if (m1) {\n m2 = m1[2].split(\",\");\n switch (m1[1]) {\n case \"hsl\":\n {\n return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n }\n\n case \"rgb\":\n {\n return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n }\n }\n }\n if (color = d3_rgb_names.get(format)) {\n return rgb(color.r, color.g, color.b);\n }\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n if (format.length === 4) {\n r = (color & 3840) >> 4;\n r = r >> 4 | r;\n g = color & 240;\n g = g >> 4 | g;\n b = color & 15;\n b = b << 4 | b;\n } else if (format.length === 7) {\n r = (color & 16711680) >> 16;\n g = (color & 65280) >> 8;\n b = color & 255;\n }\n }\n return rgb(r, g, b);\n }\n function d3_rgb_hsl(r, g, b) {\n var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n if (d) {\n s = l < .5 ? d / (max + min) : d / (2 - max - min);\n if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new d3_hsl(h, s, l);\n }\n function d3_rgb_lab(r, g, b) {\n r = d3_rgb_xyz(r);\n g = d3_rgb_xyz(g);\n b = d3_rgb_xyz(b);\n var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n }\n function d3_rgb_xyz(r) {\n return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n }\n function d3_rgb_parseNumber(c) {\n var f = parseFloat(c);\n return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n }\n var d3_rgb_names = d3.map({\n aliceblue: 15792383,\n antiquewhite: 16444375,\n aqua: 65535,\n aquamarine: 8388564,\n azure: 15794175,\n beige: 16119260,\n bisque: 16770244,\n black: 0,\n blanchedalmond: 16772045,\n blue: 255,\n blueviolet: 9055202,\n brown: 10824234,\n burlywood: 14596231,\n cadetblue: 6266528,\n chartreuse: 8388352,\n chocolate: 13789470,\n coral: 16744272,\n cornflowerblue: 6591981,\n cornsilk: 16775388,\n crimson: 14423100,\n cyan: 65535,\n darkblue: 139,\n darkcyan: 35723,\n darkgoldenrod: 12092939,\n darkgray: 11119017,\n darkgreen: 25600,\n darkgrey: 11119017,\n darkkhaki: 12433259,\n darkmagenta: 9109643,\n darkolivegreen: 5597999,\n darkorange: 16747520,\n darkorchid: 10040012,\n darkred: 9109504,\n darksalmon: 15308410,\n darkseagreen: 9419919,\n darkslateblue: 4734347,\n darkslategray: 3100495,\n darkslategrey: 3100495,\n darkturquoise: 52945,\n darkviolet: 9699539,\n deeppink: 16716947,\n deepskyblue: 49151,\n dimgray: 6908265,\n dimgrey: 6908265,\n dodgerblue: 2003199,\n firebrick: 11674146,\n floralwhite: 16775920,\n forestgreen: 2263842,\n fuchsia: 16711935,\n gainsboro: 14474460,\n ghostwhite: 16316671,\n gold: 16766720,\n goldenrod: 14329120,\n gray: 8421504,\n green: 32768,\n greenyellow: 11403055,\n grey: 8421504,\n honeydew: 15794160,\n hotpink: 16738740,\n indianred: 13458524,\n indigo: 4915330,\n ivory: 16777200,\n khaki: 15787660,\n lavender: 15132410,\n lavenderblush: 16773365,\n lawngreen: 8190976,\n lemonchiffon: 16775885,\n lightblue: 11393254,\n lightcoral: 15761536,\n lightcyan: 14745599,\n lightgoldenrodyellow: 16448210,\n lightgray: 13882323,\n lightgreen: 9498256,\n lightgrey: 13882323,\n lightpink: 16758465,\n lightsalmon: 16752762,\n lightseagreen: 2142890,\n lightskyblue: 8900346,\n lightslategray: 7833753,\n lightslategrey: 7833753,\n lightsteelblue: 11584734,\n lightyellow: 16777184,\n lime: 65280,\n limegreen: 3329330,\n linen: 16445670,\n magenta: 16711935,\n maroon: 8388608,\n mediumaquamarine: 6737322,\n mediumblue: 205,\n mediumorchid: 12211667,\n mediumpurple: 9662683,\n mediumseagreen: 3978097,\n mediumslateblue: 8087790,\n mediumspringgreen: 64154,\n mediumturquoise: 4772300,\n mediumvioletred: 13047173,\n midnightblue: 1644912,\n mintcream: 16121850,\n mistyrose: 16770273,\n moccasin: 16770229,\n navajowhite: 16768685,\n navy: 128,\n oldlace: 16643558,\n olive: 8421376,\n olivedrab: 7048739,\n orange: 16753920,\n orangered: 16729344,\n orchid: 14315734,\n palegoldenrod: 15657130,\n palegreen: 10025880,\n paleturquoise: 11529966,\n palevioletred: 14381203,\n papayawhip: 16773077,\n peachpuff: 16767673,\n peru: 13468991,\n pink: 16761035,\n plum: 14524637,\n powderblue: 11591910,\n purple: 8388736,\n rebeccapurple: 6697881,\n red: 16711680,\n rosybrown: 12357519,\n royalblue: 4286945,\n saddlebrown: 9127187,\n salmon: 16416882,\n sandybrown: 16032864,\n seagreen: 3050327,\n seashell: 16774638,\n sienna: 10506797,\n silver: 12632256,\n skyblue: 8900331,\n slateblue: 6970061,\n slategray: 7372944,\n slategrey: 7372944,\n snow: 16775930,\n springgreen: 65407,\n steelblue: 4620980,\n tan: 13808780,\n teal: 32896,\n thistle: 14204888,\n tomato: 16737095,\n turquoise: 4251856,\n violet: 15631086,\n wheat: 16113331,\n white: 16777215,\n whitesmoke: 16119285,\n yellow: 16776960,\n yellowgreen: 10145074\n });\n d3_rgb_names.forEach(function(key, value) {\n d3_rgb_names.set(key, d3_rgbNumber(value));\n });\n function d3_functor(v) {\n return typeof v === \"function\" ? v : function() {\n return v;\n };\n }\n d3.functor = d3_functor;\n d3.xhr = d3_xhrType(d3_identity);\n function d3_xhrType(response) {\n return function(url, mimeType, callback) {\n if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n mimeType = null;\n return d3_xhr(url, mimeType, response, callback);\n };\n }\n function d3_xhr(url, mimeType, response, callback) {\n var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n request.readyState > 3 && respond();\n };\n function respond() {\n var status = request.status, result;\n if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n try {\n result = response.call(xhr, request);\n } catch (e) {\n dispatch.error.call(xhr, e);\n return;\n }\n dispatch.load.call(xhr, result);\n } else {\n dispatch.error.call(xhr, request);\n }\n }\n request.onprogress = function(event) {\n var o = d3.event;\n d3.event = event;\n try {\n dispatch.progress.call(xhr, request);\n } finally {\n d3.event = o;\n }\n };\n xhr.header = function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers[name];\n if (value == null) delete headers[name]; else headers[name] = value + \"\";\n return xhr;\n };\n xhr.mimeType = function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return xhr;\n };\n xhr.responseType = function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return xhr;\n };\n xhr.response = function(value) {\n response = value;\n return xhr;\n };\n [ \"get\", \"post\" ].forEach(function(method) {\n xhr[method] = function() {\n return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n };\n });\n xhr.send = function(method, data, callback) {\n if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n request.open(method, url, true);\n if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n if (responseType != null) request.responseType = responseType;\n if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n callback(null, request);\n });\n dispatch.beforesend.call(xhr, request);\n request.send(data == null ? null : data);\n return xhr;\n };\n xhr.abort = function() {\n request.abort();\n return xhr;\n };\n d3.rebind(xhr, dispatch, \"on\");\n return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n }\n function d3_xhr_fixCallback(callback) {\n return callback.length === 1 ? function(error, request) {\n callback(error == null ? request : null);\n } : callback;\n }\n function d3_xhrHasResponse(request) {\n var type = request.responseType;\n return type && type !== \"text\" ? request.response : request.responseText;\n }\n d3.dsv = function(delimiter, mimeType) {\n var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n function dsv(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n xhr.row = function(_) {\n return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n };\n return xhr;\n }\n function response(request) {\n return dsv.parse(request.responseText);\n }\n function typedResponse(f) {\n return function(request) {\n return dsv.parse(request.responseText, f);\n };\n }\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n o = f ? function(row, i) {\n return f(a(row), i);\n } : a;\n });\n };\n dsv.parseRows = function(text, f) {\n var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n function token() {\n if (I >= N) return EOF;\n if (eol) return eol = false, EOL;\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n }\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; else if (c === 13) {\n eol = true;\n if (text.charCodeAt(I) === 10) ++I, ++k;\n } else if (c !== delimiterCode) continue;\n return text.slice(j, I - k);\n }\n return text.slice(j);\n }\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && (a = f(a, n++)) == null) continue;\n rows.push(a);\n }\n return rows;\n };\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n var fieldSet = new d3_Set(), fields = [];\n rows.forEach(function(row) {\n for (var field in row) {\n if (!fieldSet.has(field)) {\n fields.push(fieldSet.add(field));\n }\n }\n });\n return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(text) {\n return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n }\n return dsv;\n };\n d3.csv = d3.dsv(\",\", \"text/csv\");\n d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function() {\n d3_timer.apply(this, arguments);\n };\n function d3_timer(callback, delay, then) {\n var n = arguments.length;\n if (n < 2) delay = 0;\n if (n < 3) then = Date.now();\n var time = then + delay, timer = {\n c: callback,\n t: time,\n n: null\n };\n if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n d3_timer_queueTail = timer;\n if (!d3_timer_interval) {\n d3_timer_timeout = clearTimeout(d3_timer_timeout);\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n return timer;\n }\n function d3_timer_step() {\n var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n if (delay > 24) {\n if (isFinite(delay)) {\n clearTimeout(d3_timer_timeout);\n d3_timer_timeout = setTimeout(d3_timer_step, delay);\n }\n d3_timer_interval = 0;\n } else {\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n }\n d3.timer.flush = function() {\n d3_timer_mark();\n d3_timer_sweep();\n };\n function d3_timer_mark() {\n var now = Date.now(), timer = d3_timer_queueHead;\n while (timer) {\n if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n timer = timer.n;\n }\n return now;\n }\n function d3_timer_sweep() {\n var t0, t1 = d3_timer_queueHead, time = Infinity;\n while (t1) {\n if (t1.c) {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = t1).n;\n } else {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n }\n }\n d3_timer_queueTail = t0;\n return time;\n }\n function d3_format_precision(x, p) {\n return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n }\n d3.round = function(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n };\n var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n d3.formatPrefix = function(value, precision) {\n var i = 0;\n if (value = +value) {\n if (value < 0) value *= -1;\n if (precision) value = d3.round(value, d3_format_precision(value, precision));\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n return d3_formatPrefixes[8 + i / 3];\n };\n function d3_formatPrefix(d, i) {\n var k = Math.pow(10, abs(8 - i) * 3);\n return {\n scale: i > 8 ? function(d) {\n return d / k;\n } : function(d) {\n return d * k;\n },\n symbol: d\n };\n }\n function d3_locale_numberFormat(locale) {\n var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = locale_grouping[j = (j + 1) % locale_grouping.length];\n }\n return t.reverse().join(locale_thousands);\n } : d3_identity;\n return function(specifier) {\n var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n if (precision) precision = +precision.substring(1);\n if (zfill || fill === \"0\" && align === \"=\") {\n zfill = fill = \"0\";\n align = \"=\";\n }\n switch (type) {\n case \"n\":\n comma = true;\n type = \"g\";\n break;\n\n case \"%\":\n scale = 100;\n suffix = \"%\";\n type = \"f\";\n break;\n\n case \"p\":\n scale = 100;\n suffix = \"%\";\n type = \"r\";\n break;\n\n case \"b\":\n case \"o\":\n case \"x\":\n case \"X\":\n if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n case \"c\":\n exponent = false;\n\n case \"d\":\n integer = true;\n precision = 0;\n break;\n\n case \"s\":\n scale = -1;\n type = \"r\";\n break;\n }\n if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n if (type == \"r\" && !precision) type = \"g\";\n if (precision != null) {\n if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n }\n type = d3_format_types.get(type) || d3_format_typeDefault;\n var zcomma = zfill && comma;\n return function(value) {\n var fullSuffix = suffix;\n if (integer && value % 1) return \"\";\n var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n if (scale < 0) {\n var unit = d3.formatPrefix(value, precision);\n value = unit.scale(value);\n fullSuffix = unit.symbol + suffix;\n } else {\n value *= scale;\n }\n value = type(value, precision);\n var i = value.lastIndexOf(\".\"), before, after;\n if (i < 0) {\n var j = exponent ? value.lastIndexOf(\"e\") : -1;\n if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n } else {\n before = value.substring(0, i);\n after = locale_decimal + value.substring(i + 1);\n }\n if (!zfill && comma) before = formatGroup(before, Infinity);\n var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n negative += prefix;\n value = before + after;\n return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n };\n };\n }\n var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n var d3_format_types = d3.map({\n b: function(x) {\n return x.toString(2);\n },\n c: function(x) {\n return String.fromCharCode(x);\n },\n o: function(x) {\n return x.toString(8);\n },\n x: function(x) {\n return x.toString(16);\n },\n X: function(x) {\n return x.toString(16).toUpperCase();\n },\n g: function(x, p) {\n return x.toPrecision(p);\n },\n e: function(x, p) {\n return x.toExponential(p);\n },\n f: function(x, p) {\n return x.toFixed(p);\n },\n r: function(x, p) {\n return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n }\n });\n function d3_format_typeDefault(x) {\n return x + \"\";\n }\n var d3_time = d3.time = {}, d3_date = Date;\n function d3_date_utc() {\n this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n }\n d3_date_utc.prototype = {\n getDate: function() {\n return this._.getUTCDate();\n },\n getDay: function() {\n return this._.getUTCDay();\n },\n getFullYear: function() {\n return this._.getUTCFullYear();\n },\n getHours: function() {\n return this._.getUTCHours();\n },\n getMilliseconds: function() {\n return this._.getUTCMilliseconds();\n },\n getMinutes: function() {\n return this._.getUTCMinutes();\n },\n getMonth: function() {\n return this._.getUTCMonth();\n },\n getSeconds: function() {\n return this._.getUTCSeconds();\n },\n getTime: function() {\n return this._.getTime();\n },\n getTimezoneOffset: function() {\n return 0;\n },\n valueOf: function() {\n return this._.valueOf();\n },\n setDate: function() {\n d3_time_prototype.setUTCDate.apply(this._, arguments);\n },\n setDay: function() {\n d3_time_prototype.setUTCDay.apply(this._, arguments);\n },\n setFullYear: function() {\n d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n },\n setHours: function() {\n d3_time_prototype.setUTCHours.apply(this._, arguments);\n },\n setMilliseconds: function() {\n d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n },\n setMinutes: function() {\n d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n },\n setMonth: function() {\n d3_time_prototype.setUTCMonth.apply(this._, arguments);\n },\n setSeconds: function() {\n d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n },\n setTime: function() {\n d3_time_prototype.setTime.apply(this._, arguments);\n }\n };\n var d3_time_prototype = Date.prototype;\n function d3_time_interval(local, step, number) {\n function round(date) {\n var d0 = local(date), d1 = offset(d0, 1);\n return date - d0 < d1 - date ? d0 : d1;\n }\n function ceil(date) {\n step(date = local(new d3_date(date - 1)), 1);\n return date;\n }\n function offset(date, k) {\n step(date = new d3_date(+date), k);\n return date;\n }\n function range(t0, t1, dt) {\n var time = ceil(t0), times = [];\n if (dt > 1) {\n while (time < t1) {\n if (!(number(time) % dt)) times.push(new Date(+time));\n step(time, 1);\n }\n } else {\n while (time < t1) times.push(new Date(+time)), step(time, 1);\n }\n return times;\n }\n function range_utc(t0, t1, dt) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = t0;\n return range(utc, t1, dt);\n } finally {\n d3_date = Date;\n }\n }\n local.floor = local;\n local.round = round;\n local.ceil = ceil;\n local.offset = offset;\n local.range = range;\n var utc = local.utc = d3_time_interval_utc(local);\n utc.floor = utc;\n utc.round = d3_time_interval_utc(round);\n utc.ceil = d3_time_interval_utc(ceil);\n utc.offset = d3_time_interval_utc(offset);\n utc.range = range_utc;\n return local;\n }\n function d3_time_interval_utc(method) {\n return function(date, k) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = date;\n return method(utc, k)._;\n } finally {\n d3_date = Date;\n }\n };\n }\n d3_time.year = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setMonth(0, 1);\n return date;\n }, function(date, offset) {\n date.setFullYear(date.getFullYear() + offset);\n }, function(date) {\n return date.getFullYear();\n });\n d3_time.years = d3_time.year.range;\n d3_time.years.utc = d3_time.year.utc.range;\n d3_time.day = d3_time_interval(function(date) {\n var day = new d3_date(2e3, 0);\n day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n return day;\n }, function(date, offset) {\n date.setDate(date.getDate() + offset);\n }, function(date) {\n return date.getDate() - 1;\n });\n d3_time.days = d3_time.day.range;\n d3_time.days.utc = d3_time.day.utc.range;\n d3_time.dayOfYear = function(date) {\n var year = d3_time.year(date);\n return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n };\n [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n i = 7 - i;\n var interval = d3_time[day] = d3_time_interval(function(date) {\n (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n return date;\n }, function(date, offset) {\n date.setDate(date.getDate() + Math.floor(offset) * 7);\n }, function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n });\n d3_time[day + \"s\"] = interval.range;\n d3_time[day + \"s\"].utc = interval.utc.range;\n d3_time[day + \"OfYear\"] = function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n };\n });\n d3_time.week = d3_time.sunday;\n d3_time.weeks = d3_time.sunday.range;\n d3_time.weeks.utc = d3_time.sunday.utc.range;\n d3_time.weekOfYear = d3_time.sundayOfYear;\n function d3_locale_timeFormat(locale) {\n var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n function d3_time_format(template) {\n var n = template.length;\n function format(date) {\n var string = [], i = -1, j = 0, c, p, f;\n while (++i < n) {\n if (template.charCodeAt(i) === 37) {\n string.push(template.slice(j, i));\n if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n string.push(c);\n j = i + 1;\n }\n }\n string.push(template.slice(j, i));\n return string.join(\"\");\n }\n format.parse = function(string) {\n var d = {\n y: 1900,\n m: 0,\n d: 1,\n H: 0,\n M: 0,\n S: 0,\n L: 0,\n Z: null\n }, i = d3_time_parse(d, template, string, 0);\n if (i != string.length) return null;\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n date.setFullYear(d.y, 0, 1);\n date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n } else date.setFullYear(d.y, d.m, d.d);\n date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n return localZ ? date._ : date;\n };\n format.toString = function() {\n return template;\n };\n return format;\n }\n function d3_time_parse(date, template, string, j) {\n var c, p, t, i = 0, n = template.length, m = string.length;\n while (i < n) {\n if (j >= m) return -1;\n c = template.charCodeAt(i++);\n if (c === 37) {\n t = template.charAt(i++);\n p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n if (!p || (j = p(date, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n d3_time_format.utc = function(template) {\n var local = d3_time_format(template);\n function format(date) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date();\n utc._ = date;\n return local(utc);\n } finally {\n d3_date = Date;\n }\n }\n format.parse = function(string) {\n try {\n d3_date = d3_date_utc;\n var date = local.parse(string);\n return date && date._;\n } finally {\n d3_date = Date;\n }\n };\n format.toString = local.toString;\n return format;\n };\n d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n locale_periods.forEach(function(p, i) {\n d3_time_periodLookup.set(p.toLowerCase(), i);\n });\n var d3_time_formats = {\n a: function(d) {\n return locale_shortDays[d.getDay()];\n },\n A: function(d) {\n return locale_days[d.getDay()];\n },\n b: function(d) {\n return locale_shortMonths[d.getMonth()];\n },\n B: function(d) {\n return locale_months[d.getMonth()];\n },\n c: d3_time_format(locale_dateTime),\n d: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n e: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n H: function(d, p) {\n return d3_time_formatPad(d.getHours(), p, 2);\n },\n I: function(d, p) {\n return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n },\n j: function(d, p) {\n return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n },\n L: function(d, p) {\n return d3_time_formatPad(d.getMilliseconds(), p, 3);\n },\n m: function(d, p) {\n return d3_time_formatPad(d.getMonth() + 1, p, 2);\n },\n M: function(d, p) {\n return d3_time_formatPad(d.getMinutes(), p, 2);\n },\n p: function(d) {\n return locale_periods[+(d.getHours() >= 12)];\n },\n S: function(d, p) {\n return d3_time_formatPad(d.getSeconds(), p, 2);\n },\n U: function(d, p) {\n return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n },\n w: function(d) {\n return d.getDay();\n },\n W: function(d, p) {\n return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n },\n x: d3_time_format(locale_date),\n X: d3_time_format(locale_time),\n y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n },\n Y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n },\n Z: d3_time_zone,\n \"%\": function() {\n return \"%\";\n }\n };\n var d3_time_parsers = {\n a: d3_time_parseWeekdayAbbrev,\n A: d3_time_parseWeekday,\n b: d3_time_parseMonthAbbrev,\n B: d3_time_parseMonth,\n c: d3_time_parseLocaleFull,\n d: d3_time_parseDay,\n e: d3_time_parseDay,\n H: d3_time_parseHour24,\n I: d3_time_parseHour24,\n j: d3_time_parseDayOfYear,\n L: d3_time_parseMilliseconds,\n m: d3_time_parseMonthNumber,\n M: d3_time_parseMinutes,\n p: d3_time_parseAmPm,\n S: d3_time_parseSeconds,\n U: d3_time_parseWeekNumberSunday,\n w: d3_time_parseWeekdayNumber,\n W: d3_time_parseWeekNumberMonday,\n x: d3_time_parseLocaleDate,\n X: d3_time_parseLocaleTime,\n y: d3_time_parseYear,\n Y: d3_time_parseFullYear,\n Z: d3_time_parseZone,\n \"%\": d3_time_parseLiteralPercent\n };\n function d3_time_parseWeekdayAbbrev(date, string, i) {\n d3_time_dayAbbrevRe.lastIndex = 0;\n var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseWeekday(date, string, i) {\n d3_time_dayRe.lastIndex = 0;\n var n = d3_time_dayRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonthAbbrev(date, string, i) {\n d3_time_monthAbbrevRe.lastIndex = 0;\n var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonth(date, string, i) {\n d3_time_monthRe.lastIndex = 0;\n var n = d3_time_monthRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseLocaleFull(date, string, i) {\n return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n }\n function d3_time_parseLocaleDate(date, string, i) {\n return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n }\n function d3_time_parseLocaleTime(date, string, i) {\n return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n }\n function d3_time_parseAmPm(date, string, i) {\n var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (date.p = n, i);\n }\n return d3_time_format;\n }\n var d3_time_formatPads = {\n \"-\": \"\",\n _: \" \",\n \"0\": \"0\"\n }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n function d3_time_formatPad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n function d3_time_formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n }\n function d3_time_formatLookup(names) {\n var map = new d3_Map(), i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n function d3_time_parseWeekdayNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n return n ? (date.w = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberSunday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.U = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberMonday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.W = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseFullYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n return n ? (date.y = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n }\n function d3_time_parseZone(date, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n i + 5) : -1;\n }\n function d3_time_expandYear(d) {\n return d + (d > 68 ? 1900 : 2e3);\n }\n function d3_time_parseMonthNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n }\n function d3_time_parseDay(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.d = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseDayOfYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.j = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseHour24(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.H = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMinutes(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.M = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseSeconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.S = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMilliseconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.L = +n[0], i + n[0].length) : -1;\n }\n function d3_time_zone(d) {\n var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n }\n function d3_time_parseLiteralPercent(date, string, i) {\n d3_time_percentRe.lastIndex = 0;\n var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n function d3_time_formatMulti(formats) {\n var n = formats.length, i = -1;\n while (++i < n) formats[i][0] = this(formats[i][0]);\n return function(date) {\n var i = 0, f = formats[i];\n while (!f[1](date)) f = formats[++i];\n return f[0](date);\n };\n }\n d3.locale = function(locale) {\n return {\n numberFormat: d3_locale_numberFormat(locale),\n timeFormat: d3_locale_timeFormat(locale)\n };\n };\n var d3_locale_enUS = d3.locale({\n decimal: \".\",\n thousands: \",\",\n grouping: [ 3 ],\n currency: [ \"$\", \"\" ],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [ \"AM\", \"PM\" ],\n days: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n shortDays: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n months: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n shortMonths: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ]\n });\n d3.format = d3_locale_enUS.numberFormat;\n d3.geo = {};\n function d3_adder() {}\n d3_adder.prototype = {\n s: 0,\n t: 0,\n add: function(y) {\n d3_adderSum(y, this.t, d3_adderTemp);\n d3_adderSum(d3_adderTemp.s, this.s, this);\n if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n },\n reset: function() {\n this.s = this.t = 0;\n },\n valueOf: function() {\n return this.s;\n }\n };\n var d3_adderTemp = new d3_adder();\n function d3_adderSum(a, b, o) {\n var x = o.s = a + b, bv = x - a, av = x - bv;\n o.t = a - av + (b - bv);\n }\n d3.geo.stream = function(object, listener) {\n if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n d3_geo_streamObjectType[object.type](object, listener);\n } else {\n d3_geo_streamGeometry(object, listener);\n }\n };\n function d3_geo_streamGeometry(geometry, listener) {\n if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n d3_geo_streamGeometryType[geometry.type](geometry, listener);\n }\n }\n var d3_geo_streamObjectType = {\n Feature: function(feature, listener) {\n d3_geo_streamGeometry(feature.geometry, listener);\n },\n FeatureCollection: function(object, listener) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n }\n };\n var d3_geo_streamGeometryType = {\n Sphere: function(object, listener) {\n listener.sphere();\n },\n Point: function(object, listener) {\n object = object.coordinates;\n listener.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n },\n LineString: function(object, listener) {\n d3_geo_streamLine(object.coordinates, listener, 0);\n },\n MultiLineString: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n },\n Polygon: function(object, listener) {\n d3_geo_streamPolygon(object.coordinates, listener);\n },\n MultiPolygon: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n },\n GeometryCollection: function(object, listener) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n }\n };\n function d3_geo_streamLine(coordinates, listener, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n listener.lineStart();\n while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n listener.lineEnd();\n }\n function d3_geo_streamPolygon(coordinates, listener) {\n var i = -1, n = coordinates.length;\n listener.polygonStart();\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n listener.polygonEnd();\n }\n d3.geo.area = function(object) {\n d3_geo_areaSum = 0;\n d3.geo.stream(object, d3_geo_area);\n return d3_geo_areaSum;\n };\n var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n var d3_geo_area = {\n sphere: function() {\n d3_geo_areaSum += 4 * Ï€;\n },\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_areaRingSum.reset();\n d3_geo_area.lineStart = d3_geo_areaRingStart;\n },\n polygonEnd: function() {\n var area = 2 * d3_geo_areaRingSum;\n d3_geo_areaSum += area < 0 ? 4 * Ï€ + area : area;\n d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n }\n };\n function d3_geo_areaRingStart() {\n var λ00, φ00, λ0, cosφ0, sinφ0;\n d3_geo_area.point = function(λ, φ) {\n d3_geo_area.point = nextPoint;\n λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + Ï€ / 4), \n sinφ0 = Math.sin(φ);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n φ = φ * d3_radians / 2 + Ï€ / 4;\n var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n d3_geo_areaRingSum.add(Math.atan2(v, u));\n λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n }\n d3_geo_area.lineEnd = function() {\n nextPoint(λ00, φ00);\n };\n }\n function d3_geo_cartesian(spherical) {\n var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n }\n function d3_geo_cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function d3_geo_cartesianCross(a, b) {\n return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n }\n function d3_geo_cartesianAdd(a, b) {\n a[0] += b[0];\n a[1] += b[1];\n a[2] += b[2];\n }\n function d3_geo_cartesianScale(vector, k) {\n return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n }\n function d3_geo_cartesianNormalize(d) {\n var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l;\n d[1] /= l;\n d[2] /= l;\n }\n function d3_geo_spherical(cartesian) {\n return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n }\n function d3_geo_sphericalEqual(a, b) {\n return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n }\n d3.geo.bounds = function() {\n var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n var bound = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n bound.point = ringPoint;\n bound.lineStart = ringStart;\n bound.lineEnd = ringEnd;\n dλSum = 0;\n d3_geo_area.polygonStart();\n },\n polygonEnd: function() {\n d3_geo_area.polygonEnd();\n bound.point = point;\n bound.lineStart = lineStart;\n bound.lineEnd = lineEnd;\n if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n range[0] = λ0, range[1] = λ1;\n }\n };\n function point(λ, φ) {\n ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n function linePoint(λ, φ) {\n var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n if (p0) {\n var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n d3_geo_cartesianNormalize(inflection);\n inflection = d3_geo_spherical(inflection);\n var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = inflection[1] * d3_degrees;\n if (φi > φ1) φ1 = φi;\n } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = -inflection[1] * d3_degrees;\n if (φi < φ0) φ0 = φi;\n } else {\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n if (antimeridian) {\n if (λ < λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n } else {\n if (λ1 >= λ0) {\n if (λ < λ0) λ0 = λ;\n if (λ > λ1) λ1 = λ;\n } else {\n if (λ > λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n }\n }\n } else {\n point(λ, φ);\n }\n p0 = p, λ_ = λ;\n }\n function lineStart() {\n bound.point = linePoint;\n }\n function lineEnd() {\n range[0] = λ0, range[1] = λ1;\n bound.point = point;\n p0 = null;\n }\n function ringPoint(λ, φ) {\n if (p0) {\n var dλ = λ - λ_;\n dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n } else λ__ = λ, φ__ = φ;\n d3_geo_area.point(λ, φ);\n linePoint(λ, φ);\n }\n function ringStart() {\n d3_geo_area.lineStart();\n }\n function ringEnd() {\n ringPoint(λ__, φ__);\n d3_geo_area.lineEnd();\n if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n range[0] = λ0, range[1] = λ1;\n p0 = null;\n }\n function angle(λ0, λ1) {\n return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n }\n function compareRanges(a, b) {\n return a[0] - b[0];\n }\n function withinRange(x, range) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n }\n return function(feature) {\n φ1 = λ1 = -(λ0 = φ0 = Infinity);\n ranges = [];\n d3.geo.stream(feature, bound);\n var n = ranges.length;\n if (n) {\n ranges.sort(compareRanges);\n for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n b = ranges[i];\n if (withinRange(b[0], a) || withinRange(b[1], a)) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n var best = -Infinity, dλ;\n for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n b = merged[i];\n if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n }\n }\n ranges = range = null;\n return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n };\n }();\n d3.geo.centroid = function(object) {\n d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, d3_geo_centroid);\n var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n if (m < ε2) {\n x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n m = x * x + y * y + z * z;\n if (m < ε2) return [ NaN, NaN ];\n }\n return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n };\n var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n var d3_geo_centroid = {\n sphere: d3_noop,\n point: d3_geo_centroidPoint,\n lineStart: d3_geo_centroidLineStart,\n lineEnd: d3_geo_centroidLineEnd,\n polygonStart: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n }\n };\n function d3_geo_centroidPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n }\n function d3_geo_centroidPointXYZ(x, y, z) {\n ++d3_geo_centroidW0;\n d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n }\n function d3_geo_centroidLineStart() {\n var x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroid.point = nextPoint;\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_centroidLineEnd() {\n d3_geo_centroid.point = d3_geo_centroidPoint;\n }\n function d3_geo_centroidRingStart() {\n var λ00, φ00, x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ00 = λ, φ00 = φ;\n d3_geo_centroid.point = nextPoint;\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n d3_geo_centroid.lineEnd = function() {\n nextPoint(λ00, φ00);\n d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n d3_geo_centroid.point = d3_geo_centroidPoint;\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n d3_geo_centroidX2 += v * cx;\n d3_geo_centroidY2 += v * cy;\n d3_geo_centroidZ2 += v * cz;\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_compose(a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n }\n function d3_true() {\n return true;\n }\n function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n var subject = [], clip = [];\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n];\n if (d3_geo_sphericalEqual(p0, p1)) {\n listener.lineStart();\n for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n listener.lineEnd();\n return;\n }\n var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n a.o = b;\n subject.push(a);\n clip.push(b);\n a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n a.o = b;\n subject.push(a);\n clip.push(b);\n });\n clip.sort(compare);\n d3_geo_clipPolygonLinkCircular(subject);\n d3_geo_clipPolygonLinkCircular(clip);\n if (!subject.length) return;\n for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n clip[i].e = entry = !entry;\n }\n var start = subject[0], points, point;\n while (1) {\n var current = start, isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n listener.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, listener);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, listener);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n listener.lineEnd();\n }\n }\n function d3_geo_clipPolygonLinkCircular(array) {\n if (!(n = array.length)) return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other;\n this.e = entry;\n this.v = false;\n this.n = this.p = null;\n }\n function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n return function(rotate, listener) {\n var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3.merge(segments);\n var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n if (segments.length) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n } else if (clipStartInside) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n listener.polygonStart();\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n listener.polygonEnd();\n }\n };\n function point(λ, φ) {\n var point = rotate(λ, φ);\n if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n }\n function pointLine(λ, φ) {\n var point = rotate(λ, φ);\n line.point(point[0], point[1]);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n var segments;\n var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n function pointRing(λ, φ) {\n ring.push([ λ, φ ]);\n var point = rotate(λ, φ);\n ringListener.point(point[0], point[1]);\n }\n function ringStart() {\n ringListener.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringListener.lineEnd();\n var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n) return;\n if (clean & 1) {\n segment = ringSegments[0];\n var n = segment.length - 1, i = -1, point;\n if (n > 0) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n while (++i < n) listener.point((point = segment[i])[0], point[1]);\n listener.lineEnd();\n }\n return;\n }\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n }\n return clip;\n };\n }\n function d3_geo_clipSegmentLength1(segment) {\n return segment.length > 1;\n }\n function d3_geo_clipBufferListener() {\n var lines = [], line;\n return {\n lineStart: function() {\n lines.push(line = []);\n },\n point: function(λ, φ) {\n line.push([ λ, φ ]);\n },\n lineEnd: d3_noop,\n buffer: function() {\n var buffer = lines;\n lines = [];\n line = null;\n return buffer;\n },\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n }\n };\n }\n function d3_geo_clipSort(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfÏ€ - ε : halfÏ€ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfÏ€ - ε : halfÏ€ - b[1]);\n }\n var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -Ï€, -Ï€ / 2 ]);\n function d3_geo_clipAntimeridianLine(listener) {\n var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n return {\n lineStart: function() {\n listener.lineStart();\n clean = 1;\n },\n point: function(λ1, φ1) {\n var sλ1 = λ1 > 0 ? Ï€ : -Ï€, dλ = abs(λ1 - λ0);\n if (abs(dλ - Ï€) < ε) {\n listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfÏ€ : -halfÏ€);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n listener.point(λ1, φ0);\n clean = 0;\n } else if (sλ0 !== sλ1 && dλ >= Ï€) {\n if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n clean = 0;\n }\n listener.point(λ0 = λ1, φ0 = φ1);\n sλ0 = sλ1;\n },\n lineEnd: function() {\n listener.lineEnd();\n λ0 = φ0 = NaN;\n },\n clean: function() {\n return 2 - clean;\n }\n };\n }\n function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n }\n function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n var φ;\n if (from == null) {\n φ = direction * halfÏ€;\n listener.point(-Ï€, φ);\n listener.point(0, φ);\n listener.point(Ï€, φ);\n listener.point(Ï€, 0);\n listener.point(Ï€, -φ);\n listener.point(0, -φ);\n listener.point(-Ï€, -φ);\n listener.point(-Ï€, 0);\n listener.point(-Ï€, φ);\n } else if (abs(from[0] - to[0]) > ε) {\n var s = from[0] < to[0] ? Ï€ : -Ï€;\n φ = direction * s / 2;\n listener.point(-s, φ);\n listener.point(0, φ);\n listener.point(s, φ);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function d3_geo_pointInPolygon(point, polygon) {\n var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n d3_geo_areaRingSum.reset();\n for (var i = 0, n = polygon.length; i < n; ++i) {\n var ring = polygon[i], m = ring.length;\n if (!m) continue;\n var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + Ï€ / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n while (true) {\n if (j === m) j = 0;\n point = ring[j];\n var λ = point[0], φ = point[1] / 2 + Ï€ / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > Ï€, k = sinφ0 * sinφ;\n d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n polarAngle += antimeridian ? dλ + sdλ * Ï„ : dλ;\n if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n d3_geo_cartesianNormalize(arc);\n var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n d3_geo_cartesianNormalize(intersection);\n var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n }\n }\n if (!j++) break;\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n }\n }\n return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;\n }\n function d3_geo_clipCircle(radius) {\n var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -Ï€, radius - Ï€ ]);\n function visible(λ, φ) {\n return Math.cos(λ) * Math.cos(φ) > cr;\n }\n function clipLine(listener) {\n var point0, c0, v0, v00, clean;\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(λ, φ) {\n var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? Ï€ : -Ï€), φ) : 0;\n if (!point0 && (v00 = v0 = v)) listener.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n point1[0] += ε;\n point1[1] += ε;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n listener.lineStart();\n point2 = intersect(point1, point0);\n listener.point(point2[0], point2[1]);\n } else {\n point2 = intersect(point0, point1);\n listener.point(point2[0], point2[1]);\n listener.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n } else {\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n listener.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) listener.lineEnd();\n point0 = null;\n },\n clean: function() {\n return clean | (v00 && v0) << 1;\n }\n };\n }\n function intersect(a, b, two) {\n var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n if (!determinant) return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n d3_geo_cartesianAdd(A, B);\n var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n if (t2 < 0) return;\n var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n d3_geo_cartesianAdd(q, A);\n q = d3_geo_spherical(q);\n if (!two) return q;\n var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n var δλ = λ1 - λ0, polar = abs(δλ - Ï€) < ε, meridian = polar || δλ < ε;\n if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > Ï€ ^ (λ0 <= q[0] && q[0] <= λ1)) {\n var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n d3_geo_cartesianAdd(q1, A);\n return [ q, d3_geo_spherical(q1) ];\n }\n }\n function code(λ, φ) {\n var r = smallRadius ? radius : Ï€ - radius, code = 0;\n if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n return code;\n }\n }\n function d3_geom_clipLine(x0, y0, x1, y1) {\n return function(line) {\n var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n if (t0 > 0) line.a = {\n x: ax + t0 * dx,\n y: ay + t0 * dy\n };\n if (t1 < 1) line.b = {\n x: ax + t1 * dx,\n y: ay + t1 * dy\n };\n return line;\n };\n }\n var d3_geo_clipExtentMAX = 1e9;\n d3.geo.clipExtent = function() {\n var x0, y0, x1, y1, stream, clip, clipExtent = {\n stream: function(output) {\n if (stream) stream.valid = false;\n stream = clip(output);\n stream.valid = true;\n return stream;\n },\n extent: function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n if (stream) stream.valid = false, stream = null;\n return clipExtent;\n }\n };\n return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n };\n function d3_geo_clipExtent(x0, y0, x1, y1) {\n return function(listener) {\n var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n listener = bufferListener;\n segments = [];\n polygon = [];\n clean = true;\n },\n polygonEnd: function() {\n listener = listener_;\n segments = d3.merge(segments);\n var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n if (inside || visible) {\n listener.polygonStart();\n if (inside) {\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (visible) {\n d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n }\n listener.polygonEnd();\n }\n segments = polygon = ring = null;\n }\n };\n function insidePolygon(p) {\n var wn = 0, n = polygon.length, y = p[1];\n for (var i = 0; i < n; ++i) {\n for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n b = v[j];\n if (a[1] <= y) {\n if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n } else {\n if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n }\n a = b;\n }\n }\n return wn !== 0;\n }\n function interpolate(from, to, direction, listener) {\n var a = 0, a1 = 0;\n if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n do {\n listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n } while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function pointVisible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function point(x, y) {\n if (pointVisible(x, y)) listener.point(x, y);\n }\n var x__, y__, v__, x_, y_, v_, first, clean;\n function lineStart() {\n clip.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferListener.rejoin();\n segments.push(bufferListener.buffer());\n }\n clip.point = point;\n if (v_) listener.lineEnd();\n }\n function linePoint(x, y) {\n x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n var v = pointVisible(x, y);\n if (polygon) ring.push([ x, y ]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n listener.lineStart();\n listener.point(x, y);\n }\n } else {\n if (v && v_) listener.point(x, y); else {\n var l = {\n a: {\n x: x_,\n y: y_\n },\n b: {\n x: x,\n y: y\n }\n };\n if (clipLine(l)) {\n if (!v_) {\n listener.lineStart();\n listener.point(l.a.x, l.a.y);\n }\n listener.point(l.b.x, l.b.y);\n if (!v) listener.lineEnd();\n clean = false;\n } else if (v) {\n listener.lineStart();\n listener.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clip;\n };\n function corner(p, direction) {\n return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n }\n function compare(a, b) {\n return comparePoints(a.x, b.x);\n }\n function comparePoints(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n }\n }\n function d3_geo_conic(projectAt) {\n var φ0 = 0, φ1 = Ï€ / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n p.parallels = function(_) {\n if (!arguments.length) return [ φ0 / Ï€ * 180, φ1 / Ï€ * 180 ];\n return m(φ0 = _[0] * Ï€ / 180, φ1 = _[1] * Ï€ / 180);\n };\n return p;\n }\n function d3_geo_conicEqualArea(φ0, φ1) {\n var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), Ï0 = Math.sqrt(C) / n;\n function forward(λ, φ) {\n var Ï = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n return [ Ï * Math.sin(λ *= n), Ï0 - Ï * Math.cos(λ) ];\n }\n forward.invert = function(x, y) {\n var Ï0_y = Ï0 - y;\n return [ Math.atan2(x, Ï0_y) / n, d3_asin((C - (x * x + Ï0_y * Ï0_y) * n * n) / (2 * n)) ];\n };\n return forward;\n }\n (d3.geo.conicEqualArea = function() {\n return d3_geo_conic(d3_geo_conicEqualArea);\n }).raw = d3_geo_conicEqualArea;\n d3.geo.albers = function() {\n return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n };\n d3.geo.albersUsa = function() {\n var lower48 = d3.geo.albers();\n var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n var point, pointStream = {\n point: function(x, y) {\n point = [ x, y ];\n }\n }, lower48Point, alaskaPoint, hawaiiPoint;\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n point = null;\n (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n return point;\n }\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n };\n albersUsa.stream = function(stream) {\n var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n return {\n point: function(x, y) {\n lower48Stream.point(x, y);\n alaskaStream.point(x, y);\n hawaiiStream.point(x, y);\n },\n sphere: function() {\n lower48Stream.sphere();\n alaskaStream.sphere();\n hawaiiStream.sphere();\n },\n lineStart: function() {\n lower48Stream.lineStart();\n alaskaStream.lineStart();\n hawaiiStream.lineStart();\n },\n lineEnd: function() {\n lower48Stream.lineEnd();\n alaskaStream.lineEnd();\n hawaiiStream.lineEnd();\n },\n polygonStart: function() {\n lower48Stream.polygonStart();\n alaskaStream.polygonStart();\n hawaiiStream.polygonStart();\n },\n polygonEnd: function() {\n lower48Stream.polygonEnd();\n alaskaStream.polygonEnd();\n hawaiiStream.polygonEnd();\n }\n };\n };\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_);\n alaska.precision(_);\n hawaii.precision(_);\n return albersUsa;\n };\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_);\n alaska.scale(_ * .35);\n hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n return albersUsa;\n };\n return albersUsa.scale(1070);\n };\n var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_pathAreaPolygon = 0;\n d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n }\n };\n function d3_geo_pathAreaRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathArea.point = function(x, y) {\n d3_geo_pathArea.point = nextPoint;\n x00 = x0 = x, y00 = y0 = y;\n };\n function nextPoint(x, y) {\n d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n x0 = x, y0 = y;\n }\n d3_geo_pathArea.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n var d3_geo_pathBounds = {\n point: d3_geo_pathBoundsPoint,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_pathBoundsPoint(x, y) {\n if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n }\n function d3_geo_pathBuffer() {\n var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointCircle = d3_geo_pathBufferCircle(_);\n return stream;\n },\n result: function() {\n if (buffer.length) {\n var result = buffer.join(\"\");\n buffer = [];\n return result;\n }\n }\n };\n function point(x, y) {\n buffer.push(\"M\", x, \",\", y, pointCircle);\n }\n function pointLineStart(x, y) {\n buffer.push(\"M\", x, \",\", y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n buffer.push(\"L\", x, \",\", y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n buffer.push(\"Z\");\n }\n return stream;\n }\n function d3_geo_pathBufferCircle(radius) {\n return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n }\n var d3_geo_pathCentroid = {\n point: d3_geo_pathCentroidPoint,\n lineStart: d3_geo_pathCentroidLineStart,\n lineEnd: d3_geo_pathCentroidLineEnd,\n polygonStart: function() {\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n }\n };\n function d3_geo_pathCentroidPoint(x, y) {\n d3_geo_centroidX0 += x;\n d3_geo_centroidY0 += y;\n ++d3_geo_centroidZ0;\n }\n function d3_geo_pathCentroidLineStart() {\n var x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n }\n function d3_geo_pathCentroidLineEnd() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n }\n function d3_geo_pathCentroidRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n z = y0 * x - x0 * y;\n d3_geo_centroidX2 += z * (x0 + x);\n d3_geo_centroidY2 += z * (y0 + y);\n d3_geo_centroidZ2 += z * 3;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n d3_geo_pathCentroid.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n function d3_geo_pathContext(context) {\n var pointRadius = 4.5;\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointRadius = _;\n return stream;\n },\n result: d3_noop\n };\n function point(x, y) {\n context.moveTo(x + pointRadius, y);\n context.arc(x, y, pointRadius, 0, Ï„);\n }\n function pointLineStart(x, y) {\n context.moveTo(x, y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n context.lineTo(x, y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n context.closePath();\n }\n return stream;\n }\n function d3_geo_resample(project) {\n var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n function resample(stream) {\n return (maxDepth ? resampleRecursive : resampleNone)(stream);\n }\n function resampleNone(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n });\n }\n function resampleRecursive(stream) {\n var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n var resample = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.polygonStart();\n resample.lineStart = ringStart;\n },\n polygonEnd: function() {\n stream.polygonEnd();\n resample.lineStart = lineStart;\n }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resample.point = linePoint;\n stream.lineStart();\n }\n function linePoint(λ, φ) {\n var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resample.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resample.point = ringPoint;\n resample.lineEnd = ringEnd;\n }\n function ringPoint(λ, φ) {\n linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resample.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n resample.lineEnd = lineEnd;\n lineEnd();\n }\n return resample;\n }\n function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * δ2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n }\n }\n }\n resample.precision = function(_) {\n if (!arguments.length) return Math.sqrt(δ2);\n maxDepth = (δ2 = _ * _) > 0 && 16;\n return resample;\n };\n return resample;\n }\n d3.geo.path = function() {\n var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n d3.geo.stream(object, cacheStream);\n }\n return contextStream.result();\n }\n path.area = function(object) {\n d3_geo_pathAreaSum = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathArea));\n return d3_geo_pathAreaSum;\n };\n path.centroid = function(object) {\n d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n };\n path.bounds = function(object) {\n d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n };\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n return reset();\n };\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return reset();\n };\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n function reset() {\n cacheStream = null;\n return path;\n }\n return path.projection(d3.geo.albersUsa()).context(null);\n };\n function d3_geo_pathProjectStream(project) {\n var resample = d3_geo_resample(function(x, y) {\n return project([ x * d3_degrees, y * d3_degrees ]);\n });\n return function(stream) {\n return d3_geo_projectionRadians(resample(stream));\n };\n }\n d3.geo.transform = function(methods) {\n return {\n stream: function(stream) {\n var transform = new d3_geo_transform(stream);\n for (var k in methods) transform[k] = methods[k];\n return transform;\n }\n };\n };\n function d3_geo_transform(stream) {\n this.stream = stream;\n }\n d3_geo_transform.prototype = {\n point: function(x, y) {\n this.stream.point(x, y);\n },\n sphere: function() {\n this.stream.sphere();\n },\n lineStart: function() {\n this.stream.lineStart();\n },\n lineEnd: function() {\n this.stream.lineEnd();\n },\n polygonStart: function() {\n this.stream.polygonStart();\n },\n polygonEnd: function() {\n this.stream.polygonEnd();\n }\n };\n function d3_geo_transformPoint(stream, point) {\n return {\n point: point,\n sphere: function() {\n stream.sphere();\n },\n lineStart: function() {\n stream.lineStart();\n },\n lineEnd: function() {\n stream.lineEnd();\n },\n polygonStart: function() {\n stream.polygonStart();\n },\n polygonEnd: function() {\n stream.polygonEnd();\n }\n };\n }\n d3.geo.projection = d3_geo_projection;\n d3.geo.projectionMutator = d3_geo_projectionMutator;\n function d3_geo_projection(project) {\n return d3_geo_projectionMutator(function() {\n return project;\n })();\n }\n function d3_geo_projectionMutator(projectAt) {\n var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n x = project(x, y);\n return [ x[0] * k + δx, δy - x[1] * k ];\n }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n function projection(point) {\n point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n return [ point[0] * k + δx, δy - point[1] * k ];\n }\n function invert(point) {\n point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n }\n projection.stream = function(output) {\n if (stream) stream.valid = false;\n stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n stream.valid = true;\n return stream;\n };\n projection.clipAngle = function(_) {\n if (!arguments.length) return clipAngle;\n preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n return invalidate();\n };\n projection.clipExtent = function(_) {\n if (!arguments.length) return clipExtent;\n clipExtent = _;\n postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n return invalidate();\n };\n projection.scale = function(_) {\n if (!arguments.length) return k;\n k = +_;\n return reset();\n };\n projection.translate = function(_) {\n if (!arguments.length) return [ x, y ];\n x = +_[0];\n y = +_[1];\n return reset();\n };\n projection.center = function(_) {\n if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n λ = _[0] % 360 * d3_radians;\n φ = _[1] % 360 * d3_radians;\n return reset();\n };\n projection.rotate = function(_) {\n if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n δλ = _[0] % 360 * d3_radians;\n δφ = _[1] % 360 * d3_radians;\n δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n return reset();\n };\n d3.rebind(projection, projectResample, \"precision\");\n function reset() {\n projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n var center = project(λ, φ);\n δx = x - center[0] * k;\n δy = y + center[1] * k;\n return invalidate();\n }\n function invalidate() {\n if (stream) stream.valid = false, stream = null;\n return projection;\n }\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return reset();\n };\n }\n function d3_geo_projectionRadians(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n stream.point(x * d3_radians, y * d3_radians);\n });\n }\n function d3_geo_equirectangular(λ, φ) {\n return [ λ, φ ];\n }\n (d3.geo.equirectangular = function() {\n return d3_geo_projection(d3_geo_equirectangular);\n }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n d3.geo.rotation = function(rotate) {\n rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n }\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n };\n return forward;\n };\n function d3_geo_identityRotation(λ, φ) {\n return [ λ > Ï€ ? λ - Ï„ : λ < -Ï€ ? λ + Ï„ : λ, φ ];\n }\n d3_geo_identityRotation.invert = d3_geo_equirectangular;\n function d3_geo_rotation(δλ, δφ, δγ) {\n return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n }\n function d3_geo_forwardRotationλ(δλ) {\n return function(λ, φ) {\n return λ += δλ, [ λ > Ï€ ? λ - Ï„ : λ < -Ï€ ? λ + Ï„ : λ, φ ];\n };\n }\n function d3_geo_rotationλ(δλ) {\n var rotation = d3_geo_forwardRotationλ(δλ);\n rotation.invert = d3_geo_forwardRotationλ(-δλ);\n return rotation;\n }\n function d3_geo_rotationφγ(δφ, δγ) {\n var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n function rotation(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n }\n rotation.invert = function(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n };\n return rotation;\n }\n d3.geo.circle = function() {\n var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n function circle() {\n var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n interpolate(null, null, 1, {\n point: function(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= d3_degrees, x[1] *= d3_degrees;\n }\n });\n return {\n type: \"Polygon\",\n coordinates: [ ring ]\n };\n }\n circle.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return circle;\n };\n circle.angle = function(x) {\n if (!arguments.length) return angle;\n interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n return circle;\n };\n circle.precision = function(_) {\n if (!arguments.length) return precision;\n interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n return circle;\n };\n return circle.angle(90);\n };\n function d3_geo_circleInterpolate(radius, precision) {\n var cr = Math.cos(radius), sr = Math.sin(radius);\n return function(from, to, direction, listener) {\n var step = direction * precision;\n if (from != null) {\n from = d3_geo_circleAngle(cr, from);\n to = d3_geo_circleAngle(cr, to);\n if (direction > 0 ? from < to : from > to) from += direction * Ï„;\n } else {\n from = radius + direction * Ï„;\n to = radius - .5 * step;\n }\n for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n }\n };\n }\n function d3_geo_circleAngle(cr, point) {\n var a = d3_geo_cartesian(point);\n a[0] -= cr;\n d3_geo_cartesianNormalize(a);\n var angle = d3_acos(-a[1]);\n return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n }\n d3.geo.distance = function(a, b) {\n var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n };\n d3.geo.graticule = function() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return {\n type: \"MultiLineString\",\n coordinates: lines()\n };\n }\n function lines() {\n return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n return abs(x % DX) > ε;\n }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n return abs(y % DY) > ε;\n }).map(y));\n }\n graticule.lines = function() {\n return lines().map(function(coordinates) {\n return {\n type: \"LineString\",\n coordinates: coordinates\n };\n });\n };\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n };\n };\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.minorExtent();\n return graticule.majorExtent(_).minorExtent(_);\n };\n graticule.majorExtent = function(_) {\n if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.minorExtent = function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function(_) {\n if (!arguments.length) return graticule.minorStep();\n return graticule.majorStep(_).minorStep(_);\n };\n graticule.majorStep = function(_) {\n if (!arguments.length) return [ DX, DY ];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.minorStep = function(_) {\n if (!arguments.length) return [ dx, dy ];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = d3_geo_graticuleX(y0, y1, 90);\n y = d3_geo_graticuleY(x0, x1, precision);\n X = d3_geo_graticuleX(Y0, Y1, 90);\n Y = d3_geo_graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n };\n function d3_geo_graticuleX(y0, y1, dy) {\n var y = d3.range(y0, y1 - ε, dy).concat(y1);\n return function(x) {\n return y.map(function(y) {\n return [ x, y ];\n });\n };\n }\n function d3_geo_graticuleY(x0, x1, dx) {\n var x = d3.range(x0, x1 - ε, dx).concat(x1);\n return function(y) {\n return x.map(function(x) {\n return [ x, y ];\n });\n };\n }\n function d3_source(d) {\n return d.source;\n }\n function d3_target(d) {\n return d.target;\n }\n d3.geo.greatArc = function() {\n var source = d3_source, source_, target = d3_target, target_;\n function greatArc() {\n return {\n type: \"LineString\",\n coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n };\n }\n greatArc.distance = function() {\n return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n };\n greatArc.source = function(_) {\n if (!arguments.length) return source;\n source = _, source_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.target = function(_) {\n if (!arguments.length) return target;\n target = _, target_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.precision = function() {\n return arguments.length ? greatArc : 0;\n };\n return greatArc;\n };\n d3.geo.interpolate = function(source, target) {\n return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n };\n function d3_geo_interpolate(x0, y0, x1, y1) {\n var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n var interpolate = d ? function(t) {\n var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n } : function() {\n return [ x0 * d3_degrees, y0 * d3_degrees ];\n };\n interpolate.distance = d;\n return interpolate;\n }\n d3.geo.length = function(object) {\n d3_geo_lengthSum = 0;\n d3.geo.stream(object, d3_geo_length);\n return d3_geo_lengthSum;\n };\n var d3_geo_lengthSum;\n var d3_geo_length = {\n sphere: d3_noop,\n point: d3_noop,\n lineStart: d3_geo_lengthLineStart,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_lengthLineStart() {\n var λ0, sinφ0, cosφ0;\n d3_geo_length.point = function(λ, φ) {\n λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n d3_geo_length.point = nextPoint;\n };\n d3_geo_length.lineEnd = function() {\n d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n };\n function nextPoint(λ, φ) {\n var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n }\n }\n function d3_geo_azimuthal(scale, angle) {\n function azimuthal(λ, φ) {\n var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n }\n azimuthal.invert = function(x, y) {\n var Ï = Math.sqrt(x * x + y * y), c = angle(Ï), sinc = Math.sin(c), cosc = Math.cos(c);\n return [ Math.atan2(x * sinc, Ï * cosc), Math.asin(Ï && y * sinc / Ï) ];\n };\n return azimuthal;\n }\n var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n return Math.sqrt(2 / (1 + cosλcosφ));\n }, function(Ï) {\n return 2 * Math.asin(Ï / 2);\n });\n (d3.geo.azimuthalEqualArea = function() {\n return d3_geo_projection(d3_geo_azimuthalEqualArea);\n }).raw = d3_geo_azimuthalEqualArea;\n var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n var c = Math.acos(cosλcosφ);\n return c && c / Math.sin(c);\n }, d3_identity);\n (d3.geo.azimuthalEquidistant = function() {\n return d3_geo_projection(d3_geo_azimuthalEquidistant);\n }).raw = d3_geo_azimuthalEquidistant;\n function d3_geo_conicConformal(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), t = function(φ) {\n return Math.tan(Ï€ / 4 + φ / 2);\n }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n if (!n) return d3_geo_mercator;\n function forward(λ, φ) {\n if (F > 0) {\n if (φ < -halfÏ€ + ε) φ = -halfÏ€ + ε;\n } else {\n if (φ > halfÏ€ - ε) φ = halfÏ€ - ε;\n }\n var Ï = F / Math.pow(t(φ), n);\n return [ Ï * Math.sin(n * λ), F - Ï * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var Ï0_y = F - y, Ï = d3_sgn(n) * Math.sqrt(x * x + Ï0_y * Ï0_y);\n return [ Math.atan2(x, Ï0_y) / n, 2 * Math.atan(Math.pow(F / Ï, 1 / n)) - halfÏ€ ];\n };\n return forward;\n }\n (d3.geo.conicConformal = function() {\n return d3_geo_conic(d3_geo_conicConformal);\n }).raw = d3_geo_conicConformal;\n function d3_geo_conicEquidistant(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n if (abs(n) < ε) return d3_geo_equirectangular;\n function forward(λ, φ) {\n var Ï = G - φ;\n return [ Ï * Math.sin(n * λ), G - Ï * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var Ï0_y = G - y;\n return [ Math.atan2(x, Ï0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + Ï0_y * Ï0_y) ];\n };\n return forward;\n }\n (d3.geo.conicEquidistant = function() {\n return d3_geo_conic(d3_geo_conicEquidistant);\n }).raw = d3_geo_conicEquidistant;\n var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / cosλcosφ;\n }, Math.atan);\n (d3.geo.gnomonic = function() {\n return d3_geo_projection(d3_geo_gnomonic);\n }).raw = d3_geo_gnomonic;\n function d3_geo_mercator(λ, φ) {\n return [ λ, Math.log(Math.tan(Ï€ / 4 + φ / 2)) ];\n }\n d3_geo_mercator.invert = function(x, y) {\n return [ x, 2 * Math.atan(Math.exp(y)) - halfÏ€ ];\n };\n function d3_geo_mercatorProjection(project) {\n var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n m.scale = function() {\n var v = scale.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.translate = function() {\n var v = translate.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.clipExtent = function(_) {\n var v = clipExtent.apply(m, arguments);\n if (v === m) {\n if (clipAuto = _ == null) {\n var k = Ï€ * scale(), t = translate();\n clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n }\n } else if (clipAuto) {\n v = null;\n }\n return v;\n };\n return m.clipExtent(null);\n }\n (d3.geo.mercator = function() {\n return d3_geo_mercatorProjection(d3_geo_mercator);\n }).raw = d3_geo_mercator;\n var d3_geo_orthographic = d3_geo_azimuthal(function() {\n return 1;\n }, Math.asin);\n (d3.geo.orthographic = function() {\n return d3_geo_projection(d3_geo_orthographic);\n }).raw = d3_geo_orthographic;\n var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / (1 + cosλcosφ);\n }, function(Ï) {\n return 2 * Math.atan(Ï);\n });\n (d3.geo.stereographic = function() {\n return d3_geo_projection(d3_geo_stereographic);\n }).raw = d3_geo_stereographic;\n function d3_geo_transverseMercator(λ, φ) {\n return [ Math.log(Math.tan(Ï€ / 4 + φ / 2)), -λ ];\n }\n d3_geo_transverseMercator.invert = function(x, y) {\n return [ -y, 2 * Math.atan(Math.exp(x)) - halfÏ€ ];\n };\n (d3.geo.transverseMercator = function() {\n var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n projection.center = function(_) {\n return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n };\n projection.rotate = function(_) {\n return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n [ _[0], _[1], _[2] - 90 ]);\n };\n return rotate([ 0, 0, 90 ]);\n }).raw = d3_geo_transverseMercator;\n d3.geom = {};\n function d3_geom_pointX(d) {\n return d[0];\n }\n function d3_geom_pointY(d) {\n return d[1];\n }\n d3.geom.hull = function(vertices) {\n var x = d3_geom_pointX, y = d3_geom_pointY;\n if (arguments.length) return hull(vertices);\n function hull(data) {\n if (data.length < 3) return [];\n var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n for (i = 0; i < n; i++) {\n points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n }\n points.sort(d3_geom_hullOrder);\n for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n return polygon;\n }\n hull.x = function(_) {\n return arguments.length ? (x = _, hull) : x;\n };\n hull.y = function(_) {\n return arguments.length ? (y = _, hull) : y;\n };\n return hull;\n };\n function d3_geom_hullUpper(points) {\n var n = points.length, hull = [ 0, 1 ], hs = 2;\n for (var i = 2; i < n; i++) {\n while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n hull[hs++] = i;\n }\n return hull.slice(0, hs);\n }\n function d3_geom_hullOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n }\n d3.geom.polygon = function(coordinates) {\n d3_subclass(coordinates, d3_geom_polygonPrototype);\n return coordinates;\n };\n var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n d3_geom_polygonPrototype.area = function() {\n var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n while (++i < n) {\n a = b;\n b = this[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n return area * .5;\n };\n d3_geom_polygonPrototype.centroid = function(k) {\n var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n if (!arguments.length) k = -1 / (6 * this.area());\n while (++i < n) {\n a = b;\n b = this[i];\n c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n return [ x * k, y * k ];\n };\n d3_geom_polygonPrototype.clip = function(subject) {\n var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n while (++i < n) {\n input = subject.slice();\n subject.length = 0;\n b = this[i];\n c = input[(m = input.length - closed) - 1];\n j = -1;\n while (++j < m) {\n d = input[j];\n if (d3_geom_polygonInside(d, a, b)) {\n if (!d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n subject.push(d);\n } else if (d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n c = d;\n }\n if (closed) subject.push(subject[0]);\n a = b;\n }\n return subject;\n };\n function d3_geom_polygonInside(p, a, b) {\n return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n }\n function d3_geom_polygonIntersect(c, d, a, b) {\n var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n return [ x1 + ua * x21, y1 + ua * y21 ];\n }\n function d3_geom_polygonClosed(coordinates) {\n var a = coordinates[0], b = coordinates[coordinates.length - 1];\n return !(a[0] - b[0] || a[1] - b[1]);\n }\n var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n function d3_geom_voronoiBeach() {\n d3_geom_voronoiRedBlackNode(this);\n this.edge = this.site = this.circle = null;\n }\n function d3_geom_voronoiCreateBeach(site) {\n var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n beach.site = site;\n return beach;\n }\n function d3_geom_voronoiDetachBeach(beach) {\n d3_geom_voronoiDetachCircle(beach);\n d3_geom_voronoiBeaches.remove(beach);\n d3_geom_voronoiBeachPool.push(beach);\n d3_geom_voronoiRedBlackNode(beach);\n }\n function d3_geom_voronoiRemoveBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n x: x,\n y: y\n }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n d3_geom_voronoiDetachBeach(beach);\n var lArc = previous;\n while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachCircle(lArc);\n var rArc = next;\n while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n next = rArc.N;\n disappearing.push(rArc);\n d3_geom_voronoiDetachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n d3_geom_voronoiDetachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiAddBeach(site) {\n var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n while (node) {\n dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n if (dxl > ε) node = node.L; else {\n dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n if (dxr > ε) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -ε) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -ε) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n var newArc = d3_geom_voronoiCreateBeach(site);\n d3_geom_voronoiBeaches.insert(lArc, newArc);\n if (!lArc && !rArc) return;\n if (lArc === rArc) {\n d3_geom_voronoiDetachCircle(lArc);\n rArc = d3_geom_voronoiCreateBeach(lArc.site);\n d3_geom_voronoiBeaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n return;\n }\n if (!rArc) {\n newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n return;\n }\n d3_geom_voronoiDetachCircle(lArc);\n d3_geom_voronoiDetachCircle(rArc);\n var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n x: (cy * hb - by * hc) / d + ax,\n y: (bx * hc - cx * hb) / d + ay\n };\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n if (!pby2) return rfocx;\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n site = lArc.site;\n var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n if (!plby2) return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site.y === directrix ? site.x : Infinity;\n }\n function d3_geom_voronoiCell(site) {\n this.site = site;\n this.edges = [];\n }\n d3_geom_voronoiCell.prototype.prepare = function() {\n var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n while (iHalfEdge--) {\n edge = halfEdges[iHalfEdge].edge;\n if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n }\n halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n return halfEdges.length;\n };\n function d3_geom_voronoiCloseCells(extent) {\n var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n while (iCell--) {\n cell = cells[iCell];\n if (!cell || !cell.prepare()) continue;\n halfEdges = cell.edges;\n nHalfEdges = halfEdges.length;\n iHalfEdge = 0;\n while (iHalfEdge < nHalfEdges) {\n end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n x: x0,\n y: abs(x2 - x0) < ε ? y2 : y1\n } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n x: abs(y2 - y1) < ε ? x2 : x1,\n y: y1\n } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n x: x1,\n y: abs(x2 - x1) < ε ? y2 : y0\n } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n x: abs(y2 - y0) < ε ? x2 : x0,\n y: y0\n } : null), cell.site, null));\n ++nHalfEdges;\n }\n }\n }\n }\n function d3_geom_voronoiHalfEdgeOrder(a, b) {\n return b.angle - a.angle;\n }\n function d3_geom_voronoiCircle() {\n d3_geom_voronoiRedBlackNode(this);\n this.x = this.y = this.arc = this.site = this.cy = null;\n }\n function d3_geom_voronoiAttachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc) return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite) return;\n var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -ε2) return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = cy + Math.sqrt(x * x + y * y);\n circle.cy = cy;\n arc.circle = circle;\n var before = null, node = d3_geom_voronoiCircles._;\n while (node) {\n if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n if (node.L) node = node.L; else {\n before = node.P;\n break;\n }\n } else {\n if (node.R) node = node.R; else {\n before = node;\n break;\n }\n }\n }\n d3_geom_voronoiCircles.insert(before, circle);\n if (!before) d3_geom_voronoiFirstCircle = circle;\n }\n function d3_geom_voronoiDetachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n d3_geom_voronoiCircles.remove(circle);\n d3_geom_voronoiCirclePool.push(circle);\n d3_geom_voronoiRedBlackNode(circle);\n arc.circle = null;\n }\n }\n function d3_geom_voronoiClipEdges(extent) {\n var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n while (i--) {\n e = edges[i];\n if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n e.a = e.b = null;\n edges.splice(i, 1);\n }\n }\n }\n function d3_geom_voronoiConnectEdge(edge, extent) {\n var vb = edge.b;\n if (vb) return true;\n var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!va) va = {\n x: fx,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: fx,\n y: y1\n };\n } else {\n if (!va) va = {\n x: fx,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: fx,\n y: y0\n };\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!va) va = {\n x: (y0 - fb) / fm,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: (y1 - fb) / fm,\n y: y1\n };\n } else {\n if (!va) va = {\n x: (y1 - fb) / fm,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: (y0 - fb) / fm,\n y: y0\n };\n }\n } else {\n if (ly < ry) {\n if (!va) va = {\n x: x0,\n y: fm * x0 + fb\n }; else if (va.x >= x1) return;\n vb = {\n x: x1,\n y: fm * x1 + fb\n };\n } else {\n if (!va) va = {\n x: x1,\n y: fm * x1 + fb\n }; else if (va.x < x0) return;\n vb = {\n x: x0,\n y: fm * x0 + fb\n };\n }\n }\n }\n edge.a = va;\n edge.b = vb;\n return true;\n }\n function d3_geom_voronoiEdge(lSite, rSite) {\n this.l = lSite;\n this.r = rSite;\n this.a = this.b = null;\n }\n function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, rSite);\n d3_geom_voronoiEdges.push(edge);\n if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n return edge;\n }\n function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, null);\n edge.a = va;\n edge.b = vb;\n d3_geom_voronoiEdges.push(edge);\n return edge;\n }\n function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n if (!edge.a && !edge.b) {\n edge.a = vertex;\n edge.l = lSite;\n edge.r = rSite;\n } else if (edge.l === rSite) {\n edge.b = vertex;\n } else {\n edge.a = vertex;\n }\n }\n function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n var va = edge.a, vb = edge.b;\n this.edge = edge;\n this.site = lSite;\n this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n }\n d3_geom_voronoiHalfEdge.prototype = {\n start: function() {\n return this.edge.l === this.site ? this.edge.a : this.edge.b;\n },\n end: function() {\n return this.edge.l === this.site ? this.edge.b : this.edge.a;\n }\n };\n function d3_geom_voronoiRedBlackTree() {\n this._ = null;\n }\n function d3_geom_voronoiRedBlackNode(node) {\n node.U = node.C = node.L = node.R = node.P = node.N = null;\n }\n d3_geom_voronoiRedBlackTree.prototype = {\n insert: function(after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = d3_geom_voronoiRedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n if (parent) {\n if (parent.L === node) parent.L = next; else parent.R = next;\n } else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node) node.C = false;\n }\n };\n function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n }\n function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n }\n function d3_geom_voronoiRedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n }\n function d3_geom_voronoi(sites, bbox) {\n var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n d3_geom_voronoiEdges = [];\n d3_geom_voronoiCells = new Array(sites.length);\n d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n while (true) {\n circle = d3_geom_voronoiFirstCircle;\n if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n if (site.x !== x0 || site.y !== y0) {\n d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n d3_geom_voronoiAddBeach(site);\n x0 = site.x, y0 = site.y;\n }\n site = sites.pop();\n } else if (circle) {\n d3_geom_voronoiRemoveBeach(circle.arc);\n } else {\n break;\n }\n }\n if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n var diagram = {\n cells: d3_geom_voronoiCells,\n edges: d3_geom_voronoiEdges\n };\n d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n return diagram;\n }\n function d3_geom_voronoiVertexOrder(a, b) {\n return b.y - a.y || b.x - a.x;\n }\n d3.geom.voronoi = function(points) {\n var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n if (points) return voronoi(points);\n function voronoi(data) {\n var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n var s = e.start();\n return [ s.x, s.y ];\n }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n polygon.point = data[i];\n });\n return polygons;\n }\n function sites(data) {\n return data.map(function(d, i) {\n return {\n x: Math.round(fx(d, i) / ε) * ε,\n y: Math.round(fy(d, i) / ε) * ε,\n i: i\n };\n });\n }\n voronoi.links = function(data) {\n return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n return edge.l && edge.r;\n }).map(function(edge) {\n return {\n source: data[edge.l.i],\n target: data[edge.r.i]\n };\n });\n };\n voronoi.triangles = function(data) {\n var triangles = [];\n d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n while (++j < m) {\n e0 = e1;\n s0 = s1;\n e1 = edges[j].edge;\n s1 = e1.l === site ? e1.r : e1.l;\n if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n }\n }\n });\n return triangles;\n };\n voronoi.x = function(_) {\n return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n };\n voronoi.y = function(_) {\n return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n };\n voronoi.clipExtent = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n return voronoi;\n };\n voronoi.size = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n };\n return voronoi;\n };\n var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n function d3_geom_voronoiTriangleArea(a, b, c) {\n return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n }\n d3.geom.delaunay = function(vertices) {\n return d3.geom.voronoi().triangles(vertices);\n };\n d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n if (compat = arguments.length) {\n x = d3_geom_quadtreeCompatX;\n y = d3_geom_quadtreeCompatY;\n if (compat === 3) {\n y2 = y1;\n x2 = x1;\n y1 = x1 = 0;\n }\n return quadtree(points);\n }\n function quadtree(data) {\n var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n if (x1 != null) {\n x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n } else {\n x2_ = y2_ = -(x1_ = y1_ = Infinity);\n xs = [], ys = [];\n n = data.length;\n if (compat) for (i = 0; i < n; ++i) {\n d = data[i];\n if (d.x < x1_) x1_ = d.x;\n if (d.y < y1_) y1_ = d.y;\n if (d.x > x2_) x2_ = d.x;\n if (d.y > y2_) y2_ = d.y;\n xs.push(d.x);\n ys.push(d.y);\n } else for (i = 0; i < n; ++i) {\n var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n if (x_ < x1_) x1_ = x_;\n if (y_ < y1_) y1_ = y_;\n if (x_ > x2_) x2_ = x_;\n if (y_ > y2_) y2_ = y_;\n xs.push(x_);\n ys.push(y_);\n }\n }\n var dx = x2_ - x1_, dy = y2_ - y1_;\n if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n function insert(n, d, x, y, x1, y1, x2, y2) {\n if (isNaN(x) || isNaN(y)) return;\n if (n.leaf) {\n var nx = n.x, ny = n.y;\n if (nx != null) {\n if (abs(nx - x) + abs(ny - y) < .01) {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n } else {\n var nPoint = n.point;\n n.x = n.y = n.point = null;\n insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n } else {\n n.x = x, n.y = y, n.point = d;\n }\n } else {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n }\n function insertChild(n, d, x, y, x1, y1, x2, y2) {\n var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = xm; else x2 = xm;\n if (below) y1 = ym; else y2 = ym;\n insert(n, d, x, y, x1, y1, x2, y2);\n }\n var root = d3_geom_quadtreeNode();\n root.add = function(d) {\n insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n };\n root.visit = function(f) {\n d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n };\n root.find = function(point) {\n return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n };\n i = -1;\n if (x1 == null) {\n while (++i < n) {\n insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n }\n --i;\n } else data.forEach(root.add);\n xs = ys = data = d = null;\n return root;\n }\n quadtree.x = function(_) {\n return arguments.length ? (x = _, quadtree) : x;\n };\n quadtree.y = function(_) {\n return arguments.length ? (y = _, quadtree) : y;\n };\n quadtree.extent = function(_) {\n if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n y2 = +_[1][1];\n return quadtree;\n };\n quadtree.size = function(_) {\n if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n return quadtree;\n };\n return quadtree;\n };\n function d3_geom_quadtreeCompatX(d) {\n return d.x;\n }\n function d3_geom_quadtreeCompatY(d) {\n return d.y;\n }\n function d3_geom_quadtreeNode() {\n return {\n leaf: true,\n nodes: [],\n point: null,\n x: null,\n y: null\n };\n }\n function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n if (!f(node, x1, y1, x2, y2)) {\n var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n }\n }\n function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n var minDistance2 = Infinity, closestPoint;\n (function find(node, x1, y1, x2, y2) {\n if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n if (point = node.point) {\n var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n if (distance2 < minDistance2) {\n var distance = Math.sqrt(minDistance2 = distance2);\n x0 = x - distance, y0 = y - distance;\n x3 = x + distance, y3 = y + distance;\n closestPoint = point;\n }\n }\n var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n if (node = children[i & 3]) switch (i & 3) {\n case 0:\n find(node, x1, y1, xm, ym);\n break;\n\n case 1:\n find(node, xm, y1, x2, ym);\n break;\n\n case 2:\n find(node, x1, ym, xm, y2);\n break;\n\n case 3:\n find(node, xm, ym, x2, y2);\n break;\n }\n }\n })(root, x0, y0, x3, y3);\n return closestPoint;\n }\n d3.interpolateRgb = d3_interpolateRgb;\n function d3_interpolateRgb(a, b) {\n a = d3.rgb(a);\n b = d3.rgb(b);\n var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n return function(t) {\n return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n };\n }\n d3.interpolateObject = d3_interpolateObject;\n function d3_interpolateObject(a, b) {\n var i = {}, c = {}, k;\n for (k in a) {\n if (k in b) {\n i[k] = d3_interpolate(a[k], b[k]);\n } else {\n c[k] = a[k];\n }\n }\n for (k in b) {\n if (!(k in a)) {\n c[k] = b[k];\n }\n }\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n d3.interpolateNumber = d3_interpolateNumber;\n function d3_interpolateNumber(a, b) {\n a = +a, b = +b;\n return function(t) {\n return a * (1 - t) + b * t;\n };\n }\n d3.interpolateString = d3_interpolateString;\n function d3_interpolateString(a, b) {\n var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n a = a + \"\", b = b + \"\";\n while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n if ((bs = bm.index) > bi) {\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n if (s[i]) s[i] += bm; else s[++i] = bm;\n } else {\n s[++i] = null;\n q.push({\n i: i,\n x: d3_interpolateNumber(am, bm)\n });\n }\n bi = d3_interpolate_numberB.lastIndex;\n }\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n return b(t) + \"\";\n }) : function() {\n return b;\n } : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n d3.interpolate = d3_interpolate;\n function d3_interpolate(a, b) {\n var i = d3.interpolators.length, f;\n while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n return f;\n }\n d3.interpolators = [ function(a, b) {\n var t = typeof b;\n return (t === \"string\" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n } ];\n d3.interpolateArray = d3_interpolateArray;\n function d3_interpolateArray(a, b) {\n var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n for (;i < na; ++i) c[i] = a[i];\n for (;i < nb; ++i) c[i] = b[i];\n return function(t) {\n for (i = 0; i < n0; ++i) c[i] = x[i](t);\n return c;\n };\n }\n var d3_ease_default = function() {\n return d3_identity;\n };\n var d3_ease = d3.map({\n linear: d3_ease_default,\n poly: d3_ease_poly,\n quad: function() {\n return d3_ease_quad;\n },\n cubic: function() {\n return d3_ease_cubic;\n },\n sin: function() {\n return d3_ease_sin;\n },\n exp: function() {\n return d3_ease_exp;\n },\n circle: function() {\n return d3_ease_circle;\n },\n elastic: d3_ease_elastic,\n back: d3_ease_back,\n bounce: function() {\n return d3_ease_bounce;\n }\n });\n var d3_ease_mode = d3.map({\n \"in\": d3_identity,\n out: d3_ease_reverse,\n \"in-out\": d3_ease_reflect,\n \"out-in\": function(f) {\n return d3_ease_reflect(d3_ease_reverse(f));\n }\n });\n d3.ease = function(name) {\n var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n t = d3_ease.get(t) || d3_ease_default;\n m = d3_ease_mode.get(m) || d3_identity;\n return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n };\n function d3_ease_clamp(f) {\n return function(t) {\n return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n };\n }\n function d3_ease_reverse(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n }\n function d3_ease_reflect(f) {\n return function(t) {\n return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n };\n }\n function d3_ease_quad(t) {\n return t * t;\n }\n function d3_ease_cubic(t) {\n return t * t * t;\n }\n function d3_ease_cubicInOut(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n var t2 = t * t, t3 = t2 * t;\n return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n }\n function d3_ease_poly(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n function d3_ease_sin(t) {\n return 1 - Math.cos(t * halfÏ€);\n }\n function d3_ease_exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n function d3_ease_circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n function d3_ease_elastic(a, p) {\n var s;\n if (arguments.length < 2) p = .45;\n if (arguments.length) s = p / Ï„ * Math.asin(1 / a); else a = 1, s = p / 4;\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * Ï„ / p);\n };\n }\n function d3_ease_back(s) {\n if (!s) s = 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n function d3_ease_bounce(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n }\n d3.interpolateHcl = d3_interpolateHcl;\n function d3_interpolateHcl(a, b) {\n a = d3.hcl(a);\n b = d3.hcl(b);\n var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateHsl = d3_interpolateHsl;\n function d3_interpolateHsl(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateLab = d3_interpolateLab;\n function d3_interpolateLab(a, b) {\n a = d3.lab(a);\n b = d3.lab(b);\n var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n return function(t) {\n return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n };\n }\n d3.interpolateRound = d3_interpolateRound;\n function d3_interpolateRound(a, b) {\n b -= a;\n return function(t) {\n return Math.round(a + b * t);\n };\n }\n d3.transform = function(string) {\n var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n return (d3.transform = function(string) {\n if (string != null) {\n g.setAttribute(\"transform\", string);\n var t = g.transform.baseVal.consolidate();\n }\n return new d3_transform(t ? t.matrix : d3_transformIdentity);\n })(string);\n };\n function d3_transform(m) {\n var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n if (r0[0] * r1[1] < r1[0] * r0[1]) {\n r0[0] *= -1;\n r0[1] *= -1;\n kx *= -1;\n kz *= -1;\n }\n this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n this.translate = [ m.e, m.f ];\n this.scale = [ kx, ky ];\n this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n }\n d3_transform.prototype.toString = function() {\n return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n };\n function d3_transformDot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n function d3_transformNormalize(a) {\n var k = Math.sqrt(d3_transformDot(a, a));\n if (k) {\n a[0] /= k;\n a[1] /= k;\n }\n return k;\n }\n function d3_transformCombine(a, b, k) {\n a[0] += k * b[0];\n a[1] += k * b[1];\n return a;\n }\n var d3_transformIdentity = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0\n };\n d3.interpolateTransform = d3_interpolateTransform;\n function d3_interpolateTransformPop(s) {\n return s.length ? s.pop() + \",\" : \"\";\n }\n function d3_interpolateTranslate(ta, tb, s, q) {\n if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n var i = s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n }\n }\n function d3_interpolateRotate(ra, rb, s, q) {\n if (ra !== rb) {\n if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n }\n }\n function d3_interpolateSkew(wa, wb, s, q) {\n if (wa !== wb) {\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n }\n }\n function d3_interpolateScale(ka, kb, s, q) {\n if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] !== 1 || kb[1] !== 1) {\n s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n }\n }\n function d3_interpolateTransform(a, b) {\n var s = [], q = [];\n a = d3.transform(a), b = d3.transform(b);\n d3_interpolateTranslate(a.translate, b.translate, s, q);\n d3_interpolateRotate(a.rotate, b.rotate, s, q);\n d3_interpolateSkew(a.skew, b.skew, s, q);\n d3_interpolateScale(a.scale, b.scale, s, q);\n a = b = null;\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n }\n function d3_uninterpolateNumber(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return (x - a) / b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return Math.max(0, Math.min(1, (x - a) / b));\n };\n }\n d3.layout = {};\n d3.layout.bundle = function() {\n return function(links) {\n var paths = [], i = -1, n = links.length;\n while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n return paths;\n };\n };\n function d3_layout_bundlePath(link) {\n var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n while (start !== lca) {\n start = start.parent;\n points.push(start);\n }\n var k = points.length;\n while (end !== lca) {\n points.splice(k, 0, end);\n end = end.parent;\n }\n return points;\n }\n function d3_layout_bundleAncestors(node) {\n var ancestors = [], parent = node.parent;\n while (parent != null) {\n ancestors.push(node);\n node = parent;\n parent = parent.parent;\n }\n ancestors.push(node);\n return ancestors;\n }\n function d3_layout_bundleLeastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n while (aNode === bNode) {\n sharedNode = aNode;\n aNode = aNodes.pop();\n bNode = bNodes.pop();\n }\n return sharedNode;\n }\n d3.layout.chord = function() {\n var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n function relayout() {\n var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n chords = [];\n groups = [];\n k = 0, i = -1;\n while (++i < n) {\n x = 0, j = -1;\n while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(d3.range(n));\n k += x;\n }\n if (sortGroups) {\n groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n }\n if (sortSubgroups) {\n subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n }\n k = (Ï„ - padding * n) / k;\n x = 0, i = -1;\n while (++i < n) {\n x0 = x, j = -1;\n while (++j < n) {\n var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n subgroups[di + \"-\" + dj] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += padding;\n }\n i = -1;\n while (++i < n) {\n j = i - 1;\n while (++j < n) {\n var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n if (source.value || target.value) {\n chords.push(source.value < target.value ? {\n source: target,\n target: source\n } : {\n source: source,\n target: target\n });\n }\n }\n }\n if (sortChords) resort();\n }\n function resort() {\n chords.sort(function(a, b) {\n return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n });\n }\n chord.matrix = function(x) {\n if (!arguments.length) return matrix;\n n = (matrix = x) && matrix.length;\n chords = groups = null;\n return chord;\n };\n chord.padding = function(x) {\n if (!arguments.length) return padding;\n padding = x;\n chords = groups = null;\n return chord;\n };\n chord.sortGroups = function(x) {\n if (!arguments.length) return sortGroups;\n sortGroups = x;\n chords = groups = null;\n return chord;\n };\n chord.sortSubgroups = function(x) {\n if (!arguments.length) return sortSubgroups;\n sortSubgroups = x;\n chords = null;\n return chord;\n };\n chord.sortChords = function(x) {\n if (!arguments.length) return sortChords;\n sortChords = x;\n if (chords) resort();\n return chord;\n };\n chord.chords = function() {\n if (!chords) relayout();\n return chords;\n };\n chord.groups = function() {\n if (!groups) relayout();\n return groups;\n };\n return chord;\n };\n d3.layout.force = function() {\n var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n function repulse(node) {\n return function(quad, x1, _, x2) {\n if (quad.point !== node) {\n var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n if (dw * dw / theta2 < dn) {\n if (dn < chargeDistance2) {\n var k = quad.charge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n return true;\n }\n if (quad.point && dn && dn < chargeDistance2) {\n var k = quad.pointCharge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n }\n return !quad.charge;\n };\n }\n force.tick = function() {\n if ((alpha *= .99) < .005) {\n timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n return true;\n }\n var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n for (i = 0; i < m; ++i) {\n o = links[i];\n s = o.source;\n t = o.target;\n x = t.x - s.x;\n y = t.y - s.y;\n if (l = x * x + y * y) {\n l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n x *= l;\n y *= l;\n t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);\n t.y -= y * k;\n s.x += x * (k = 1 - k);\n s.y += y * k;\n }\n }\n if (k = alpha * gravity) {\n x = size[0] / 2;\n y = size[1] / 2;\n i = -1;\n if (k) while (++i < n) {\n o = nodes[i];\n o.x += (x - o.x) * k;\n o.y += (y - o.y) * k;\n }\n }\n if (charge) {\n d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n i = -1;\n while (++i < n) {\n if (!(o = nodes[i]).fixed) {\n q.visit(repulse(o));\n }\n }\n }\n i = -1;\n while (++i < n) {\n o = nodes[i];\n if (o.fixed) {\n o.x = o.px;\n o.y = o.py;\n } else {\n o.x -= (o.px - (o.px = o.x)) * friction;\n o.y -= (o.py - (o.py = o.y)) * friction;\n }\n }\n event.tick({\n type: \"tick\",\n alpha: alpha\n });\n };\n force.nodes = function(x) {\n if (!arguments.length) return nodes;\n nodes = x;\n return force;\n };\n force.links = function(x) {\n if (!arguments.length) return links;\n links = x;\n return force;\n };\n force.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return force;\n };\n force.linkDistance = function(x) {\n if (!arguments.length) return linkDistance;\n linkDistance = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.distance = force.linkDistance;\n force.linkStrength = function(x) {\n if (!arguments.length) return linkStrength;\n linkStrength = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.friction = function(x) {\n if (!arguments.length) return friction;\n friction = +x;\n return force;\n };\n force.charge = function(x) {\n if (!arguments.length) return charge;\n charge = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.chargeDistance = function(x) {\n if (!arguments.length) return Math.sqrt(chargeDistance2);\n chargeDistance2 = x * x;\n return force;\n };\n force.gravity = function(x) {\n if (!arguments.length) return gravity;\n gravity = +x;\n return force;\n };\n force.theta = function(x) {\n if (!arguments.length) return Math.sqrt(theta2);\n theta2 = x * x;\n return force;\n };\n force.alpha = function(x) {\n if (!arguments.length) return alpha;\n x = +x;\n if (alpha) {\n if (x > 0) {\n alpha = x;\n } else {\n timer.c = null, timer.t = NaN, timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n }\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n timer = d3_timer(force.tick);\n }\n return force;\n };\n force.start = function() {\n var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n for (i = 0; i < n; ++i) {\n (o = nodes[i]).index = i;\n o.weight = 0;\n }\n for (i = 0; i < m; ++i) {\n o = links[i];\n if (typeof o.source == \"number\") o.source = nodes[o.source];\n if (typeof o.target == \"number\") o.target = nodes[o.target];\n ++o.source.weight;\n ++o.target.weight;\n }\n for (i = 0; i < n; ++i) {\n o = nodes[i];\n if (isNaN(o.x)) o.x = position(\"x\", w);\n if (isNaN(o.y)) o.y = position(\"y\", h);\n if (isNaN(o.px)) o.px = o.x;\n if (isNaN(o.py)) o.py = o.y;\n }\n distances = [];\n if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n strengths = [];\n if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n charges = [];\n if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n function position(dimension, size) {\n if (!neighbors) {\n neighbors = new Array(n);\n for (j = 0; j < n; ++j) {\n neighbors[j] = [];\n }\n for (j = 0; j < m; ++j) {\n var o = links[j];\n neighbors[o.source.index].push(o.target);\n neighbors[o.target.index].push(o.source);\n }\n }\n var candidates = neighbors[i], j = -1, l = candidates.length, x;\n while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n return Math.random() * size;\n }\n return force.resume();\n };\n force.resume = function() {\n return force.alpha(.1);\n };\n force.stop = function() {\n return force.alpha(0);\n };\n force.drag = function() {\n if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n if (!arguments.length) return drag;\n this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n };\n function dragmove(d) {\n d.px = d3.event.x, d.py = d3.event.y;\n force.resume();\n }\n return d3.rebind(force, event, \"on\");\n };\n function d3_layout_forceDragstart(d) {\n d.fixed |= 2;\n }\n function d3_layout_forceDragend(d) {\n d.fixed &= ~6;\n }\n function d3_layout_forceMouseover(d) {\n d.fixed |= 4;\n d.px = d.x, d.py = d.y;\n }\n function d3_layout_forceMouseout(d) {\n d.fixed &= ~4;\n }\n function d3_layout_forceAccumulate(quad, alpha, charges) {\n var cx = 0, cy = 0;\n quad.charge = 0;\n if (!quad.leaf) {\n var nodes = quad.nodes, n = nodes.length, i = -1, c;\n while (++i < n) {\n c = nodes[i];\n if (c == null) continue;\n d3_layout_forceAccumulate(c, alpha, charges);\n quad.charge += c.charge;\n cx += c.charge * c.cx;\n cy += c.charge * c.cy;\n }\n }\n if (quad.point) {\n if (!quad.leaf) {\n quad.point.x += Math.random() - .5;\n quad.point.y += Math.random() - .5;\n }\n var k = alpha * charges[quad.point.index];\n quad.charge += quad.pointCharge = k;\n cx += k * quad.point.x;\n cy += k * quad.point.y;\n }\n quad.cx = cx / quad.charge;\n quad.cy = cy / quad.charge;\n }\n var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n d3.layout.hierarchy = function() {\n var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n function hierarchy(root) {\n var stack = [ root ], nodes = [], node;\n root.depth = 0;\n while ((node = stack.pop()) != null) {\n nodes.push(node);\n if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n var n, childs, child;\n while (--n >= 0) {\n stack.push(child = childs[n]);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n if (value) node.value = 0;\n node.children = childs;\n } else {\n if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n delete node.children;\n }\n }\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var childs, parent;\n if (sort && (childs = node.children)) childs.sort(sort);\n if (value && (parent = node.parent)) parent.value += node.value;\n });\n return nodes;\n }\n hierarchy.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return hierarchy;\n };\n hierarchy.children = function(x) {\n if (!arguments.length) return children;\n children = x;\n return hierarchy;\n };\n hierarchy.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return hierarchy;\n };\n hierarchy.revalue = function(root) {\n if (value) {\n d3_layout_hierarchyVisitBefore(root, function(node) {\n if (node.children) node.value = 0;\n });\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var parent;\n if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n if (parent = node.parent) parent.value += node.value;\n });\n }\n return root;\n };\n return hierarchy;\n };\n function d3_layout_hierarchyRebind(object, hierarchy) {\n d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n object.nodes = object;\n object.links = d3_layout_hierarchyLinks;\n return object;\n }\n function d3_layout_hierarchyVisitBefore(node, callback) {\n var nodes = [ node ];\n while ((node = nodes.pop()) != null) {\n callback(node);\n if ((children = node.children) && (n = children.length)) {\n var n, children;\n while (--n >= 0) nodes.push(children[n]);\n }\n }\n }\n function d3_layout_hierarchyVisitAfter(node, callback) {\n var nodes = [ node ], nodes2 = [];\n while ((node = nodes.pop()) != null) {\n nodes2.push(node);\n if ((children = node.children) && (n = children.length)) {\n var i = -1, n, children;\n while (++i < n) nodes.push(children[i]);\n }\n }\n while ((node = nodes2.pop()) != null) {\n callback(node);\n }\n }\n function d3_layout_hierarchyChildren(d) {\n return d.children;\n }\n function d3_layout_hierarchyValue(d) {\n return d.value;\n }\n function d3_layout_hierarchySort(a, b) {\n return b.value - a.value;\n }\n function d3_layout_hierarchyLinks(nodes) {\n return d3.merge(nodes.map(function(parent) {\n return (parent.children || []).map(function(child) {\n return {\n source: parent,\n target: child\n };\n });\n }));\n }\n d3.layout.partition = function() {\n var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n function position(node, x, dx, dy) {\n var children = node.children;\n node.x = x;\n node.y = node.depth * dy;\n node.dx = dx;\n node.dy = dy;\n if (children && (n = children.length)) {\n var i = -1, n, c, d;\n dx = node.value ? dx / node.value : 0;\n while (++i < n) {\n position(c = children[i], x, d = c.value * dx, dy);\n x += d;\n }\n }\n }\n function depth(node) {\n var children = node.children, d = 0;\n if (children && (n = children.length)) {\n var i = -1, n;\n while (++i < n) d = Math.max(d, depth(children[i]));\n }\n return 1 + d;\n }\n function partition(d, i) {\n var nodes = hierarchy.call(this, d, i);\n position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n return nodes;\n }\n partition.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return partition;\n };\n return d3_layout_hierarchyRebind(partition, hierarchy);\n };\n d3.layout.pie = function() {\n var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = Ï„, padAngle = 0;\n function pie(data) {\n var n = data.length, values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;\n if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n return values[j] - values[i];\n } : function(i, j) {\n return sort(data[i], data[j]);\n });\n index.forEach(function(i) {\n arcs[i] = {\n data: data[i],\n value: v = values[i],\n startAngle: a,\n endAngle: a += v * k + pa,\n padAngle: p\n };\n });\n return arcs;\n }\n pie.value = function(_) {\n if (!arguments.length) return value;\n value = _;\n return pie;\n };\n pie.sort = function(_) {\n if (!arguments.length) return sort;\n sort = _;\n return pie;\n };\n pie.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return pie;\n };\n pie.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return pie;\n };\n pie.padAngle = function(_) {\n if (!arguments.length) return padAngle;\n padAngle = _;\n return pie;\n };\n return pie;\n };\n var d3_layout_pieSortByValue = {};\n d3.layout.stack = function() {\n var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n function stack(data, index) {\n if (!(n = data.length)) return data;\n var series = data.map(function(d, i) {\n return values.call(stack, d, i);\n });\n var points = series.map(function(d) {\n return d.map(function(v, i) {\n return [ x.call(stack, v, i), y.call(stack, v, i) ];\n });\n });\n var orders = order.call(stack, points, index);\n series = d3.permute(series, orders);\n points = d3.permute(points, orders);\n var offsets = offset.call(stack, points, index);\n var m = series[0].length, n, i, j, o;\n for (j = 0; j < m; ++j) {\n out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n for (i = 1; i < n; ++i) {\n out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n }\n }\n return data;\n }\n stack.values = function(x) {\n if (!arguments.length) return values;\n values = x;\n return stack;\n };\n stack.order = function(x) {\n if (!arguments.length) return order;\n order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n return stack;\n };\n stack.offset = function(x) {\n if (!arguments.length) return offset;\n offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n return stack;\n };\n stack.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n return stack;\n };\n stack.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n return stack;\n };\n stack.out = function(z) {\n if (!arguments.length) return out;\n out = z;\n return stack;\n };\n return stack;\n };\n function d3_layout_stackX(d) {\n return d.x;\n }\n function d3_layout_stackY(d) {\n return d.y;\n }\n function d3_layout_stackOut(d, y0, y) {\n d.y0 = y0;\n d.y = y;\n }\n var d3_layout_stackOrders = d3.map({\n \"inside-out\": function(data) {\n var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n return max[a] - max[b];\n }), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = index[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n },\n reverse: function(data) {\n return d3.range(data.length).reverse();\n },\n \"default\": d3_layout_stackOrderDefault\n });\n var d3_layout_stackOffsets = d3.map({\n silhouette: function(data) {\n var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o > max) max = o;\n sums.push(o);\n }\n for (j = 0; j < m; ++j) {\n y0[j] = (max - sums[j]) / 2;\n }\n return y0;\n },\n wiggle: function(data) {\n var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n y0[0] = o = o0 = 0;\n for (j = 1; j < m; ++j) {\n for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n }\n s2 += s3 * data[i][j][1];\n }\n y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n if (o < o0) o0 = o;\n }\n for (j = 0; j < m; ++j) y0[j] -= o0;\n return y0;\n },\n expand: function(data) {\n var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n }\n for (j = 0; j < m; ++j) y0[j] = 0;\n return y0;\n },\n zero: d3_layout_stackOffsetZero\n });\n function d3_layout_stackOrderDefault(data) {\n return d3.range(data.length);\n }\n function d3_layout_stackOffsetZero(data) {\n var j = -1, m = data[0].length, y0 = [];\n while (++j < m) y0[j] = 0;\n return y0;\n }\n function d3_layout_stackMaxIndex(array) {\n var i = 1, j = 0, v = array[0][1], k, n = array.length;\n for (;i < n; ++i) {\n if ((k = array[i][1]) > v) {\n j = i;\n v = k;\n }\n }\n return j;\n }\n function d3_layout_stackReduceSum(d) {\n return d.reduce(d3_layout_stackSum, 0);\n }\n function d3_layout_stackSum(p, d) {\n return p + d[1];\n }\n d3.layout.histogram = function() {\n var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n function histogram(data, i) {\n var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n while (++i < m) {\n bin = bins[i] = [];\n bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n bin.y = 0;\n }\n if (m > 0) {\n i = -1;\n while (++i < n) {\n x = values[i];\n if (x >= range[0] && x <= range[1]) {\n bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n bin.y += k;\n bin.push(data[i]);\n }\n }\n }\n return bins;\n }\n histogram.value = function(x) {\n if (!arguments.length) return valuer;\n valuer = x;\n return histogram;\n };\n histogram.range = function(x) {\n if (!arguments.length) return ranger;\n ranger = d3_functor(x);\n return histogram;\n };\n histogram.bins = function(x) {\n if (!arguments.length) return binner;\n binner = typeof x === \"number\" ? function(range) {\n return d3_layout_histogramBinFixed(range, x);\n } : d3_functor(x);\n return histogram;\n };\n histogram.frequency = function(x) {\n if (!arguments.length) return frequency;\n frequency = !!x;\n return histogram;\n };\n return histogram;\n };\n function d3_layout_histogramBinSturges(range, values) {\n return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n }\n function d3_layout_histogramBinFixed(range, n) {\n var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n while (++x <= n) f[x] = m * x + b;\n return f;\n }\n function d3_layout_histogramRange(values) {\n return [ d3.min(values), d3.max(values) ];\n }\n d3.layout.pack = function() {\n var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n function pack(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n return radius;\n };\n root.x = root.y = 0;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r = +r(d.value);\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n if (padding) {\n var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r += dr;\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r -= dr;\n });\n }\n d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n return nodes;\n }\n pack.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return pack;\n };\n pack.radius = function(_) {\n if (!arguments.length) return radius;\n radius = _ == null || typeof _ === \"function\" ? _ : +_;\n return pack;\n };\n pack.padding = function(_) {\n if (!arguments.length) return padding;\n padding = +_;\n return pack;\n };\n return d3_layout_hierarchyRebind(pack, hierarchy);\n };\n function d3_layout_packSort(a, b) {\n return a.value - b.value;\n }\n function d3_layout_packInsert(a, b) {\n var c = a._pack_next;\n a._pack_next = b;\n b._pack_prev = a;\n b._pack_next = c;\n c._pack_prev = b;\n }\n function d3_layout_packSplice(a, b) {\n a._pack_next = b;\n b._pack_prev = a;\n }\n function d3_layout_packIntersects(a, b) {\n var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n return .999 * dr * dr > dx * dx + dy * dy;\n }\n function d3_layout_packSiblings(node) {\n if (!(nodes = node.children) || !(n = nodes.length)) return;\n var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n function bound(node) {\n xMin = Math.min(node.x - node.r, xMin);\n xMax = Math.max(node.x + node.r, xMax);\n yMin = Math.min(node.y - node.r, yMin);\n yMax = Math.max(node.y + node.r, yMax);\n }\n nodes.forEach(d3_layout_packLink);\n a = nodes[0];\n a.x = -a.r;\n a.y = 0;\n bound(a);\n if (n > 1) {\n b = nodes[1];\n b.x = b.r;\n b.y = 0;\n bound(b);\n if (n > 2) {\n c = nodes[2];\n d3_layout_packPlace(a, b, c);\n bound(c);\n d3_layout_packInsert(a, c);\n a._pack_prev = c;\n d3_layout_packInsert(c, b);\n b = a._pack_next;\n for (i = 3; i < n; i++) {\n d3_layout_packPlace(a, b, c = nodes[i]);\n var isect = 0, s1 = 1, s2 = 1;\n for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n if (d3_layout_packIntersects(j, c)) {\n isect = 1;\n break;\n }\n }\n if (isect == 1) {\n for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n if (d3_layout_packIntersects(k, c)) {\n break;\n }\n }\n }\n if (isect) {\n if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n i--;\n } else {\n d3_layout_packInsert(a, c);\n b = c;\n bound(c);\n }\n }\n }\n }\n var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n for (i = 0; i < n; i++) {\n c = nodes[i];\n c.x -= cx;\n c.y -= cy;\n cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n }\n node.r = cr;\n nodes.forEach(d3_layout_packUnlink);\n }\n function d3_layout_packLink(node) {\n node._pack_next = node._pack_prev = node;\n }\n function d3_layout_packUnlink(node) {\n delete node._pack_next;\n delete node._pack_prev;\n }\n function d3_layout_packTransform(node, x, y, k) {\n var children = node.children;\n node.x = x += k * node.x;\n node.y = y += k * node.y;\n node.r *= k;\n if (children) {\n var i = -1, n = children.length;\n while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n }\n }\n function d3_layout_packPlace(a, b, c) {\n var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n if (db && (dx || dy)) {\n var da = b.r + c.r, dc = dx * dx + dy * dy;\n da *= da;\n db *= db;\n var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n c.x = a.x + x * dx + y * dy;\n c.y = a.y + x * dy - y * dx;\n } else {\n c.x = a.x + db;\n c.y = a.y;\n }\n }\n d3.layout.tree = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n function tree(d, i) {\n var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n d3_layout_hierarchyVisitBefore(root1, secondWalk);\n if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n var left = root0, right = root0, bottom = root0;\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return nodes;\n }\n function wrapTree(root0) {\n var root1 = {\n A: null,\n children: [ root0 ]\n }, queue = [ root1 ], node1;\n while ((node1 = queue.pop()) != null) {\n for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n queue.push((children[i] = child = {\n _: children[i],\n parent: node1,\n children: (child = children[i].children) && child.slice() || [],\n A: null,\n a: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n i: i\n }).a = child);\n }\n }\n return root1.children[0];\n }\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children.length) {\n d3_layout_treeShift(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n vom = d3_layout_treeLeft(vom);\n vop = d3_layout_treeRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !d3_layout_treeRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !d3_layout_treeLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= size[0];\n node.y = node.depth * size[1];\n }\n tree.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return tree;\n };\n tree.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null ? sizeNode : null;\n return tree;\n };\n tree.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) == null ? null : sizeNode;\n return tree;\n };\n return d3_layout_hierarchyRebind(tree, hierarchy);\n };\n function d3_layout_treeSeparation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n }\n function d3_layout_treeLeft(v) {\n var children = v.children;\n return children.length ? children[0] : v.t;\n }\n function d3_layout_treeRight(v) {\n var children = v.children, n;\n return (n = children.length) ? children[n - 1] : v.t;\n }\n function d3_layout_treeMove(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n function d3_layout_treeShift(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n function d3_layout_treeAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n d3.layout.cluster = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n function cluster(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var children = node.children;\n if (children && children.length) {\n node.x = d3_layout_clusterX(children);\n node.y = d3_layout_clusterY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n node.x = (node.x - root.x) * size[0];\n node.y = (root.y - node.y) * size[1];\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * size[0];\n node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n });\n return nodes;\n }\n cluster.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return cluster;\n };\n cluster.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null;\n return cluster;\n };\n cluster.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) != null;\n return cluster;\n };\n return d3_layout_hierarchyRebind(cluster, hierarchy);\n };\n function d3_layout_clusterY(children) {\n return 1 + d3.max(children, function(child) {\n return child.y;\n });\n }\n function d3_layout_clusterX(children) {\n return children.reduce(function(x, child) {\n return x + child.x;\n }, 0) / children.length;\n }\n function d3_layout_clusterLeft(node) {\n var children = node.children;\n return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n }\n function d3_layout_clusterRight(node) {\n var children = node.children, n;\n return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n }\n d3.layout.treemap = function() {\n var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n function scale(children, k) {\n var i = -1, n = children.length, child, area;\n while (++i < n) {\n area = (child = children[i]).value * (k < 0 ? 0 : k);\n child.area = isNaN(area) || area <= 0 ? 0 : area;\n }\n }\n function squarify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while ((n = remaining.length) > 0) {\n row.push(child = remaining[n - 1]);\n row.area += child.area;\n if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n remaining.pop();\n best = score;\n } else {\n row.area -= row.pop().area;\n position(row, u, rect, false);\n u = Math.min(rect.dx, rect.dy);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n if (row.length) {\n position(row, u, rect, true);\n row.length = row.area = 0;\n }\n children.forEach(squarify);\n }\n }\n function stickify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), remaining = children.slice(), child, row = [];\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while (child = remaining.pop()) {\n row.push(child);\n row.area += child.area;\n if (child.z != null) {\n position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n row.length = row.area = 0;\n }\n }\n children.forEach(stickify);\n }\n }\n function worst(row, u) {\n var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n while (++i < n) {\n if (!(r = row[i].area)) continue;\n if (r < rmin) rmin = r;\n if (r > rmax) rmax = r;\n }\n s *= s;\n u *= u;\n return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n }\n function position(row, u, rect, flush) {\n var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n if (u == rect.dx) {\n if (flush || v > rect.dy) v = rect.dy;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dy = v;\n x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n }\n o.z = true;\n o.dx += rect.x + rect.dx - x;\n rect.y += v;\n rect.dy -= v;\n } else {\n if (flush || v > rect.dx) v = rect.dx;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dx = v;\n y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n }\n o.z = false;\n o.dy += rect.y + rect.dy - y;\n rect.x += v;\n rect.dx -= v;\n }\n }\n function treemap(d) {\n var nodes = stickies || hierarchy(d), root = nodes[0];\n root.x = root.y = 0;\n if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\n if (stickies) hierarchy.revalue(root);\n scale([ root ], root.dx * root.dy / root.value);\n (stickies ? stickify : squarify)(root);\n if (sticky) stickies = nodes;\n return nodes;\n }\n treemap.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return treemap;\n };\n treemap.padding = function(x) {\n if (!arguments.length) return padding;\n function padFunction(node) {\n var p = x.call(treemap, node, node.depth);\n return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n }\n function padConstant(node) {\n return d3_layout_treemapPad(node, x);\n }\n var type;\n pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n padConstant) : padConstant;\n return treemap;\n };\n treemap.round = function(x) {\n if (!arguments.length) return round != Number;\n round = x ? Math.round : Number;\n return treemap;\n };\n treemap.sticky = function(x) {\n if (!arguments.length) return sticky;\n sticky = x;\n stickies = null;\n return treemap;\n };\n treemap.ratio = function(x) {\n if (!arguments.length) return ratio;\n ratio = x;\n return treemap;\n };\n treemap.mode = function(x) {\n if (!arguments.length) return mode;\n mode = x + \"\";\n return treemap;\n };\n return d3_layout_hierarchyRebind(treemap, hierarchy);\n };\n function d3_layout_treemapPadNull(node) {\n return {\n x: node.x,\n y: node.y,\n dx: node.dx,\n dy: node.dy\n };\n }\n function d3_layout_treemapPad(node, padding) {\n var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n if (dx < 0) {\n x += dx / 2;\n dx = 0;\n }\n if (dy < 0) {\n y += dy / 2;\n dy = 0;\n }\n return {\n x: x,\n y: y,\n dx: dx,\n dy: dy\n };\n }\n d3.random = {\n normal: function(µ, σ) {\n var n = arguments.length;\n if (n < 2) σ = 1;\n if (n < 1) µ = 0;\n return function() {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n };\n },\n logNormal: function() {\n var random = d3.random.normal.apply(d3, arguments);\n return function() {\n return Math.exp(random());\n };\n },\n bates: function(m) {\n var random = d3.random.irwinHall(m);\n return function() {\n return random() / m;\n };\n },\n irwinHall: function(m) {\n return function() {\n for (var s = 0, j = 0; j < m; j++) s += Math.random();\n return s;\n };\n }\n };\n d3.scale = {};\n function d3_scaleExtent(domain) {\n var start = domain[0], stop = domain[domain.length - 1];\n return start < stop ? [ start, stop ] : [ stop, start ];\n }\n function d3_scaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n }\n function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n return function(x) {\n return i(u(x));\n };\n }\n function d3_scale_nice(domain, nice) {\n var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n if (x1 < x0) {\n dx = i0, i0 = i1, i1 = dx;\n dx = x0, x0 = x1, x1 = dx;\n }\n domain[i0] = nice.floor(x0);\n domain[i1] = nice.ceil(x1);\n return domain;\n }\n function d3_scale_niceStep(step) {\n return step ? {\n floor: function(x) {\n return Math.floor(x / step) * step;\n },\n ceil: function(x) {\n return Math.ceil(x / step) * step;\n }\n } : d3_scale_niceIdentity;\n }\n var d3_scale_niceIdentity = {\n floor: d3_identity,\n ceil: d3_identity\n };\n function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n if (domain[k] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++j <= k) {\n u.push(uninterpolate(domain[j - 1], domain[j]));\n i.push(interpolate(range[j - 1], range[j]));\n }\n return function(x) {\n var j = d3.bisect(domain, x, 1, k) - 1;\n return i[j](u[j](x));\n };\n }\n d3.scale.linear = function() {\n return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n };\n function d3_scale_linear(domain, range, interpolate, clamp) {\n var output, input;\n function rescale() {\n var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n output = linear(domain, range, uninterpolate, interpolate);\n input = linear(range, domain, uninterpolate, d3_interpolate);\n return scale;\n }\n function scale(x) {\n return output(x);\n }\n scale.invert = function(y) {\n return input(y);\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(Number);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.rangeRound = function(x) {\n return scale.range(x).interpolate(d3_interpolateRound);\n };\n scale.clamp = function(x) {\n if (!arguments.length) return clamp;\n clamp = x;\n return rescale();\n };\n scale.interpolate = function(x) {\n if (!arguments.length) return interpolate;\n interpolate = x;\n return rescale();\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n d3_scale_linearNice(domain, m);\n return rescale();\n };\n scale.copy = function() {\n return d3_scale_linear(domain, range, interpolate, clamp);\n };\n return rescale();\n }\n function d3_scale_linearRebind(scale, linear) {\n return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n }\n function d3_scale_linearNice(domain, m) {\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n return domain;\n }\n function d3_scale_linearTickRange(domain, m) {\n if (m == null) m = 10;\n var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n extent[0] = Math.ceil(extent[0] / step) * step;\n extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n extent[2] = step;\n return extent;\n }\n function d3_scale_linearTicks(domain, m) {\n return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n }\n function d3_scale_linearTickFormat(domain, m, format) {\n var range = d3_scale_linearTickRange(domain, m);\n if (format) {\n var match = d3_format_re.exec(format);\n match.shift();\n if (match[8] === \"s\") {\n var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n match[8] = \"f\";\n format = d3.format(match.join(\"\"));\n return function(d) {\n return format(prefix.scale(d)) + prefix.symbol;\n };\n }\n if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n format = match.join(\"\");\n } else {\n format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n }\n return d3.format(format);\n }\n var d3_scale_linearFormatSignificant = {\n s: 1,\n g: 1,\n p: 1,\n r: 1,\n e: 1\n };\n function d3_scale_linearPrecision(value) {\n return -Math.floor(Math.log(value) / Math.LN10 + .01);\n }\n function d3_scale_linearFormatPrecision(type, range) {\n var p = d3_scale_linearPrecision(range[2]);\n return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n }\n d3.scale.log = function() {\n return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n };\n function d3_scale_log(linear, base, positive, domain) {\n function log(x) {\n return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n }\n function pow(x) {\n return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n }\n function scale(x) {\n return linear(log(x));\n }\n scale.invert = function(x) {\n return pow(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n positive = x[0] >= 0;\n linear.domain((domain = x.map(Number)).map(log));\n return scale;\n };\n scale.base = function(_) {\n if (!arguments.length) return base;\n base = +_;\n linear.domain(domain.map(log));\n return scale;\n };\n scale.nice = function() {\n var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n linear.domain(niced);\n domain = niced.map(pow);\n return scale;\n };\n scale.ticks = function() {\n var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n if (isFinite(j - i)) {\n if (positive) {\n for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n ticks.push(pow(i));\n } else {\n ticks.push(pow(i));\n for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n }\n for (i = 0; ticks[i] < u; i++) {}\n for (j = ticks.length; ticks[j - 1] > v; j--) {}\n ticks = ticks.slice(i, j);\n }\n return ticks;\n };\n scale.tickFormat = function(n, format) {\n if (!arguments.length) return d3_scale_logFormat;\n if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n var k = Math.max(1, base * n / scale.ticks().length);\n return function(d) {\n var i = d / pow(Math.round(log(d)));\n if (i * base < base - .5) i *= base;\n return i <= k ? format(d) : \"\";\n };\n };\n scale.copy = function() {\n return d3_scale_log(linear.copy(), base, positive, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n floor: function(x) {\n return -Math.ceil(-x);\n },\n ceil: function(x) {\n return -Math.floor(-x);\n }\n };\n d3.scale.pow = function() {\n return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n };\n function d3_scale_pow(linear, exponent, domain) {\n var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n function scale(x) {\n return linear(powp(x));\n }\n scale.invert = function(x) {\n return powb(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n linear.domain((domain = x.map(Number)).map(powp));\n return scale;\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n return scale.domain(d3_scale_linearNice(domain, m));\n };\n scale.exponent = function(x) {\n if (!arguments.length) return exponent;\n powp = d3_scale_powPow(exponent = x);\n powb = d3_scale_powPow(1 / exponent);\n linear.domain(domain.map(powp));\n return scale;\n };\n scale.copy = function() {\n return d3_scale_pow(linear.copy(), exponent, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_scale_powPow(e) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n };\n }\n d3.scale.sqrt = function() {\n return d3.scale.pow().exponent(.5);\n };\n d3.scale.ordinal = function() {\n return d3_scale_ordinal([], {\n t: \"range\",\n a: [ [] ]\n });\n };\n function d3_scale_ordinal(domain, ranger) {\n var index, range, rangeBand;\n function scale(x) {\n return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n }\n function steps(start, step) {\n return d3.range(domain.length).map(function(i) {\n return start + step * i;\n });\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = [];\n index = new d3_Map();\n var i = -1, n = x.length, xi;\n while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n return scale[ranger.t].apply(scale, ranger.a);\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n rangeBand = 0;\n ranger = {\n t: \"range\",\n a: arguments\n };\n return scale;\n };\n scale.rangePoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n 0) : (stop - start) / (domain.length - 1 + padding);\n range = steps(start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundPoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n 0) : (stop - start) / (domain.length - 1 + padding) | 0;\n range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n rangeBand = 0;\n ranger = {\n t: \"rangeRoundPoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n range = steps(start + step * outerPadding, step);\n if (reverse) range.reverse();\n rangeBand = step * (1 - padding);\n ranger = {\n t: \"rangeBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n if (reverse) range.reverse();\n rangeBand = Math.round(step * (1 - padding));\n ranger = {\n t: \"rangeRoundBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBand = function() {\n return rangeBand;\n };\n scale.rangeExtent = function() {\n return d3_scaleExtent(ranger.a[0]);\n };\n scale.copy = function() {\n return d3_scale_ordinal(domain, ranger);\n };\n return scale.domain(domain);\n }\n d3.scale.category10 = function() {\n return d3.scale.ordinal().range(d3_category10);\n };\n d3.scale.category20 = function() {\n return d3.scale.ordinal().range(d3_category20);\n };\n d3.scale.category20b = function() {\n return d3.scale.ordinal().range(d3_category20b);\n };\n d3.scale.category20c = function() {\n return d3.scale.ordinal().range(d3_category20c);\n };\n var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n d3.scale.quantile = function() {\n return d3_scale_quantile([], []);\n };\n function d3_scale_quantile(domain, range) {\n var thresholds;\n function rescale() {\n var k = 0, q = range.length;\n thresholds = [];\n while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n return scale;\n }\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.quantiles = function() {\n return thresholds;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n };\n scale.copy = function() {\n return d3_scale_quantile(domain, range);\n };\n return rescale();\n }\n d3.scale.quantize = function() {\n return d3_scale_quantize(0, 1, [ 0, 1 ]);\n };\n function d3_scale_quantize(x0, x1, range) {\n var kx, i;\n function scale(x) {\n return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n }\n function rescale() {\n kx = range.length / (x1 - x0);\n i = range.length - 1;\n return scale;\n }\n scale.domain = function(x) {\n if (!arguments.length) return [ x0, x1 ];\n x0 = +x[0];\n x1 = +x[x.length - 1];\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n y = y < 0 ? NaN : y / kx + x0;\n return [ y, y + 1 / kx ];\n };\n scale.copy = function() {\n return d3_scale_quantize(x0, x1, range);\n };\n return rescale();\n }\n d3.scale.threshold = function() {\n return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n };\n function d3_scale_threshold(domain, range) {\n function scale(x) {\n if (x <= x) return range[d3.bisect(domain, x)];\n }\n scale.domain = function(_) {\n if (!arguments.length) return domain;\n domain = _;\n return scale;\n };\n scale.range = function(_) {\n if (!arguments.length) return range;\n range = _;\n return scale;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return [ domain[y - 1], domain[y] ];\n };\n scale.copy = function() {\n return d3_scale_threshold(domain, range);\n };\n return scale;\n }\n d3.scale.identity = function() {\n return d3_scale_identity([ 0, 1 ]);\n };\n function d3_scale_identity(domain) {\n function identity(x) {\n return +x;\n }\n identity.invert = identity;\n identity.domain = identity.range = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(identity);\n return identity;\n };\n identity.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n identity.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n identity.copy = function() {\n return d3_scale_identity(domain);\n };\n return identity;\n }\n d3.svg = {};\n function d3_zero() {\n return 0;\n }\n d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n function arc() {\n var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfÏ€, a1 = endAngle.apply(this, arguments) - halfÏ€, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n if (!cw) p1 *= -1;\n if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n }\n if (r1) {\n x0 = r1 * Math.cos(a0 + p1);\n y0 = r1 * Math.sin(a0 + p1);\n x1 = r1 * Math.cos(a1 - p1);\n y1 = r1 * Math.sin(a1 - p1);\n var l1 = Math.abs(a1 - a0 - 2 * p1) <= Ï€ ? 0 : 1;\n if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n var h1 = (a0 + a1) / 2;\n x0 = r1 * Math.cos(h1);\n y0 = r1 * Math.sin(h1);\n x1 = y1 = null;\n }\n } else {\n x0 = y0 = 0;\n }\n if (r0) {\n x2 = r0 * Math.cos(a1 - p0);\n y2 = r0 * Math.sin(a1 - p0);\n x3 = r0 * Math.cos(a0 + p0);\n y3 = r0 * Math.sin(a0 + p0);\n var l0 = Math.abs(a0 - a1 + 2 * p0) <= Ï€ ? 0 : 1;\n if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n var h0 = (a0 + a1) / 2;\n x2 = r0 * Math.cos(h0);\n y2 = r0 * Math.sin(h0);\n x3 = y3 = null;\n }\n } else {\n x2 = y2 = 0;\n }\n if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n cr = r0 < r1 ^ cw ? 0 : 1;\n var rc1 = rc, rc0 = rc;\n if (da < Ï€) {\n var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n if (x1 != null) {\n var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n if (rc === rc1) {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n } else {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n }\n if (x3 != null) {\n var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n if (rc === rc0) {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n } else {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n }\n } else {\n path.push(\"L\", x2, \",\", y2);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n path.push(\"L\", x2, \",\", y2);\n if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n }\n path.push(\"Z\");\n return path.join(\"\");\n }\n function circleSegment(r1, cw) {\n return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n }\n arc.innerRadius = function(v) {\n if (!arguments.length) return innerRadius;\n innerRadius = d3_functor(v);\n return arc;\n };\n arc.outerRadius = function(v) {\n if (!arguments.length) return outerRadius;\n outerRadius = d3_functor(v);\n return arc;\n };\n arc.cornerRadius = function(v) {\n if (!arguments.length) return cornerRadius;\n cornerRadius = d3_functor(v);\n return arc;\n };\n arc.padRadius = function(v) {\n if (!arguments.length) return padRadius;\n padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n return arc;\n };\n arc.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return arc;\n };\n arc.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return arc;\n };\n arc.padAngle = function(v) {\n if (!arguments.length) return padAngle;\n padAngle = d3_functor(v);\n return arc;\n };\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfÏ€;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcAuto = \"auto\";\n function d3_svg_arcInnerRadius(d) {\n return d.innerRadius;\n }\n function d3_svg_arcOuterRadius(d) {\n return d.outerRadius;\n }\n function d3_svg_arcStartAngle(d) {\n return d.startAngle;\n }\n function d3_svg_arcEndAngle(d) {\n return d.endAngle;\n }\n function d3_svg_arcPadAngle(d) {\n return d && d.padAngle;\n }\n function d3_svg_arcSweep(x0, y0, x1, y1) {\n return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n }\n function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n }\n function d3_svg_line(projection) {\n var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n function line(data) {\n var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n function segment() {\n segments.push(\"M\", interpolate(projection(points), tension));\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n } else if (points.length) {\n segment();\n points = [];\n }\n }\n if (points.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n line.x = function(_) {\n if (!arguments.length) return x;\n x = _;\n return line;\n };\n line.y = function(_) {\n if (!arguments.length) return y;\n y = _;\n return line;\n };\n line.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return line;\n };\n line.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n return line;\n };\n line.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return line;\n };\n return line;\n }\n d3.svg.line = function() {\n return d3_svg_line(d3_identity);\n };\n var d3_svg_lineInterpolators = d3.map({\n linear: d3_svg_lineLinear,\n \"linear-closed\": d3_svg_lineLinearClosed,\n step: d3_svg_lineStep,\n \"step-before\": d3_svg_lineStepBefore,\n \"step-after\": d3_svg_lineStepAfter,\n basis: d3_svg_lineBasis,\n \"basis-open\": d3_svg_lineBasisOpen,\n \"basis-closed\": d3_svg_lineBasisClosed,\n bundle: d3_svg_lineBundle,\n cardinal: d3_svg_lineCardinal,\n \"cardinal-open\": d3_svg_lineCardinalOpen,\n \"cardinal-closed\": d3_svg_lineCardinalClosed,\n monotone: d3_svg_lineMonotone\n });\n d3_svg_lineInterpolators.forEach(function(key, value) {\n value.key = key;\n value.closed = /-closed$/.test(key);\n });\n function d3_svg_lineLinear(points) {\n return points.length > 1 ? points.join(\"L\") : points + \"Z\";\n }\n function d3_svg_lineLinearClosed(points) {\n return points.join(\"L\") + \"Z\";\n }\n function d3_svg_lineStep(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n if (n > 1) path.push(\"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepBefore(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepAfter(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n return path.join(\"\");\n }\n function d3_svg_lineCardinalOpen(points, tension) {\n return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n }\n function d3_svg_lineCardinal(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineHermite(points, tangents) {\n if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n return d3_svg_lineLinear(points);\n }\n var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n if (quad) {\n path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n p0 = points[1];\n pi = 2;\n }\n if (tangents.length > 1) {\n t = tangents[1];\n p = points[pi];\n pi++;\n path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n for (var i = 2; i < tangents.length; i++, pi++) {\n p = points[pi];\n t = tangents[i];\n path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n }\n }\n if (quad) {\n var lp = points[pi];\n path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n }\n return path;\n }\n function d3_svg_lineCardinalTangents(points, tension) {\n var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n while (++i < n) {\n p0 = p1;\n p1 = p2;\n p2 = points[i];\n tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n }\n return tangents;\n }\n function d3_svg_lineBasis(points) {\n if (points.length < 3) return d3_svg_lineLinear(points);\n var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n points.push(points[n - 1]);\n while (++i <= n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n points.pop();\n path.push(\"L\", pi);\n return path.join(\"\");\n }\n function d3_svg_lineBasisOpen(points) {\n if (points.length < 4) return d3_svg_lineLinear(points);\n var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n while (++i < 3) {\n pi = points[i];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n --i;\n while (++i < n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBasisClosed(points) {\n var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n while (++i < 4) {\n pi = points[i % n];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n --i;\n while (++i < m) {\n pi = points[i % n];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBundle(points, tension) {\n var n = points.length - 1;\n if (n) {\n var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n while (++i <= n) {\n p = points[i];\n t = i / n;\n p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n }\n }\n return d3_svg_lineBasis(points);\n }\n function d3_svg_lineDot4(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n function d3_svg_lineBasisBezier(path, x, y) {\n path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n }\n function d3_svg_lineSlope(p0, p1) {\n return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n }\n function d3_svg_lineFiniteDifferences(points) {\n var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n while (++i < j) {\n m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n }\n m[i] = d;\n return m;\n }\n function d3_svg_lineMonotoneTangents(points) {\n var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n while (++i < j) {\n d = d3_svg_lineSlope(points[i], points[i + 1]);\n if (abs(d) < ε) {\n m[i] = m[i + 1] = 0;\n } else {\n a = m[i] / d;\n b = m[i + 1] / d;\n s = a * a + b * b;\n if (s > 9) {\n s = d * 3 / Math.sqrt(s);\n m[i] = s * a;\n m[i + 1] = s * b;\n }\n }\n }\n i = -1;\n while (++i <= j) {\n s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n tangents.push([ s || 0, m[i] * s || 0 ]);\n }\n return tangents;\n }\n function d3_svg_lineMonotone(points) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n }\n d3.svg.line.radial = function() {\n var line = d3_svg_line(d3_svg_lineRadial);\n line.radius = line.x, delete line.x;\n line.angle = line.y, delete line.y;\n return line;\n };\n function d3_svg_lineRadial(points) {\n var point, i = -1, n = points.length, r, a;\n while (++i < n) {\n point = points[i];\n r = point[0];\n a = point[1] - halfÏ€;\n point[0] = r * Math.cos(a);\n point[1] = r * Math.sin(a);\n }\n return points;\n }\n function d3_svg_area(projection) {\n var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n function area(data) {\n var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n return x;\n } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n return y;\n } : d3_functor(y1), x, y;\n function segment() {\n segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n } else if (points0.length) {\n segment();\n points0 = [];\n points1 = [];\n }\n }\n if (points0.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n area.x = function(_) {\n if (!arguments.length) return x1;\n x0 = x1 = _;\n return area;\n };\n area.x0 = function(_) {\n if (!arguments.length) return x0;\n x0 = _;\n return area;\n };\n area.x1 = function(_) {\n if (!arguments.length) return x1;\n x1 = _;\n return area;\n };\n area.y = function(_) {\n if (!arguments.length) return y1;\n y0 = y1 = _;\n return area;\n };\n area.y0 = function(_) {\n if (!arguments.length) return y0;\n y0 = _;\n return area;\n };\n area.y1 = function(_) {\n if (!arguments.length) return y1;\n y1 = _;\n return area;\n };\n area.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return area;\n };\n area.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n interpolateReverse = interpolate.reverse || interpolate;\n L = interpolate.closed ? \"M\" : \"L\";\n return area;\n };\n area.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return area;\n };\n return area;\n }\n d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n d3.svg.area = function() {\n return d3_svg_area(d3_identity);\n };\n d3.svg.area.radial = function() {\n var area = d3_svg_area(d3_svg_lineRadial);\n area.radius = area.x, delete area.x;\n area.innerRadius = area.x0, delete area.x0;\n area.outerRadius = area.x1, delete area.x1;\n area.angle = area.y, delete area.y;\n area.startAngle = area.y0, delete area.y0;\n area.endAngle = area.y1, delete area.y1;\n return area;\n };\n d3.svg.chord = function() {\n var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function chord(d, i) {\n var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n }\n function subgroup(self, f, d, i) {\n var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfÏ€, a1 = endAngle.call(self, subgroup, i) - halfÏ€;\n return {\n r: r,\n a0: a0,\n a1: a1,\n p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n };\n }\n function equals(a, b) {\n return a.a0 == b.a0 && a.a1 == b.a1;\n }\n function arc(r, p, a) {\n return \"A\" + r + \",\" + r + \" 0 \" + +(a > Ï€) + \",1 \" + p;\n }\n function curve(r0, p0, r1, p1) {\n return \"Q 0,0 \" + p1;\n }\n chord.radius = function(v) {\n if (!arguments.length) return radius;\n radius = d3_functor(v);\n return chord;\n };\n chord.source = function(v) {\n if (!arguments.length) return source;\n source = d3_functor(v);\n return chord;\n };\n chord.target = function(v) {\n if (!arguments.length) return target;\n target = d3_functor(v);\n return chord;\n };\n chord.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return chord;\n };\n chord.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return chord;\n };\n return chord;\n };\n function d3_svg_chordRadius(d) {\n return d.radius;\n }\n d3.svg.diagonal = function() {\n var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n function diagonal(d, i) {\n var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n x: p0.x,\n y: m\n }, {\n x: p3.x,\n y: m\n }, p3 ];\n p = p.map(projection);\n return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n }\n diagonal.source = function(x) {\n if (!arguments.length) return source;\n source = d3_functor(x);\n return diagonal;\n };\n diagonal.target = function(x) {\n if (!arguments.length) return target;\n target = d3_functor(x);\n return diagonal;\n };\n diagonal.projection = function(x) {\n if (!arguments.length) return projection;\n projection = x;\n return diagonal;\n };\n return diagonal;\n };\n function d3_svg_diagonalProjection(d) {\n return [ d.x, d.y ];\n }\n d3.svg.diagonal.radial = function() {\n var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n diagonal.projection = function(x) {\n return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n };\n return diagonal;\n };\n function d3_svg_diagonalRadialProjection(projection) {\n return function() {\n var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfÏ€;\n return [ r * Math.cos(a), r * Math.sin(a) ];\n };\n }\n d3.svg.symbol = function() {\n var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n function symbol(d, i) {\n return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n }\n symbol.type = function(x) {\n if (!arguments.length) return type;\n type = d3_functor(x);\n return symbol;\n };\n symbol.size = function(x) {\n if (!arguments.length) return size;\n size = d3_functor(x);\n return symbol;\n };\n return symbol;\n };\n function d3_svg_symbolSize() {\n return 64;\n }\n function d3_svg_symbolType() {\n return \"circle\";\n }\n function d3_svg_symbolCircle(size) {\n var r = Math.sqrt(size / Ï€);\n return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n }\n var d3_svg_symbols = d3.map({\n circle: d3_svg_symbolCircle,\n cross: function(size) {\n var r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n },\n diamond: function(size) {\n var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n },\n square: function(size) {\n var r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n },\n \"triangle-down\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n },\n \"triangle-up\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n }\n });\n d3.svg.symbolTypes = d3_svg_symbols.keys();\n var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n d3_selectionPrototype.transition = function(name) {\n var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n time: Date.now(),\n ease: d3_ease_cubicInOut,\n delay: 0,\n duration: 250\n };\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_selectionPrototype.interrupt = function(name) {\n return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n };\n var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n function d3_selection_interruptNS(ns) {\n return function() {\n var lock, activeId, active;\n if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n active.timer.c = null;\n active.timer.t = NaN;\n if (--lock.count) delete lock[activeId]; else delete this[ns];\n lock.active += .5;\n active.event && active.event.interrupt.call(this, this.__data__, active.index);\n }\n };\n }\n function d3_transition(groups, ns, id) {\n d3_subclass(groups, d3_transitionPrototype);\n groups.namespace = ns;\n groups.id = id;\n return groups;\n }\n var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n d3_transitionPrototype.call = d3_selectionPrototype.call;\n d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n d3_transitionPrototype.node = d3_selectionPrototype.node;\n d3_transitionPrototype.size = d3_selectionPrototype.size;\n d3.transition = function(selection, name) {\n return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n transition = node[ns][id];\n subnodes = selector.call(node, node.__data__, i, j);\n subgroups.push(subgroup = []);\n for (var k = -1, o = subnodes.length; ++k < o; ) {\n if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_transition(subgroups, this.namespace, this.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node[ns][id].tween.remove(name);\n } : function(node) {\n node[ns][id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id, ns = groups.namespace;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node[ns][id].tween.set(name, value);\n }));\n }\n d3_transitionPrototype.attr = function(nameNS, value) {\n if (arguments.length < 2) {\n for (value in nameNS) this.attr(value, nameNS[value]);\n return this;\n }\n var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrTween(b) {\n return b == null ? attrNull : (b += \"\", function() {\n var a = this.getAttribute(name), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttribute(name, i(t));\n });\n });\n }\n function attrTweenNS(b) {\n return b == null ? attrNullNS : (b += \"\", function() {\n var a = this.getAttributeNS(name.space, name.local), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttributeNS(name.space, name.local, i(t));\n });\n });\n }\n return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.attrTween = function(nameNS, tween) {\n var name = d3.ns.qualify(nameNS);\n function attrTween(d, i) {\n var f = tween.call(this, d, i, this.getAttribute(name));\n return f && function(t) {\n this.setAttribute(name, f(t));\n };\n }\n function attrTweenNS(d, i) {\n var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n return f && function(t) {\n this.setAttributeNS(name.space, name.local, f(t));\n };\n }\n return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.style(priority, name[priority], value);\n return this;\n }\n priority = \"\";\n }\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleString(b) {\n return b == null ? styleNull : (b += \"\", function() {\n var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n return a !== b && (i = d3_interpolate(a, b), function(t) {\n this.style.setProperty(name, i(t), priority);\n });\n });\n }\n return d3_transition_tween(this, \"style.\" + name, value, styleString);\n };\n d3_transitionPrototype.styleTween = function(name, tween, priority) {\n if (arguments.length < 3) priority = \"\";\n function styleTween(d, i) {\n var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n return f && function(t) {\n this.style.setProperty(name, f(t), priority);\n };\n }\n return this.tween(\"style.\" + name, styleTween);\n };\n d3_transitionPrototype.text = function(value) {\n return d3_transition_tween(this, \"text\", value, d3_transition_text);\n };\n function d3_transition_text(b) {\n if (b == null) b = \"\";\n return function() {\n this.textContent = b;\n };\n }\n d3_transitionPrototype.remove = function() {\n var ns = this.namespace;\n return this.each(\"end.transition\", function() {\n var p;\n if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node[ns][id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node[ns][id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node[ns][id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n try {\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node[ns][id];\n type.call(node, node.__data__, i, j);\n });\n } finally {\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n }\n } else {\n d3_selection_each(this, function(node) {\n var transition = node[ns][id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if (node = group[i]) {\n transition = node[ns][id0];\n d3_transitionNode(node, i, ns, id1, {\n time: transition.time,\n ease: transition.ease,\n delay: transition.delay + transition.duration,\n duration: transition.duration\n });\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id1);\n };\n function d3_transitionNamespace(name) {\n return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n }\n function d3_transitionNode(node, i, ns, id, inherit) {\n var lock = node[ns] || (node[ns] = {\n active: 0,\n count: 0\n }), transition = lock[id], time, timer, duration, ease, tweens;\n function schedule(elapsed) {\n var delay = transition.delay;\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n }\n function start(elapsed) {\n var activeId = lock.active, active = lock[activeId];\n if (active) {\n active.timer.c = null;\n active.timer.t = NaN;\n --lock.count;\n delete lock[activeId];\n active.event && active.event.interrupt.call(node, node.__data__, active.index);\n }\n for (var cancelId in lock) {\n if (+cancelId < id) {\n var cancel = lock[cancelId];\n cancel.timer.c = null;\n cancel.timer.t = NaN;\n --lock.count;\n delete lock[cancelId];\n }\n }\n timer.c = tick;\n d3_timer(function() {\n if (timer.c && tick(elapsed || 1)) {\n timer.c = null;\n timer.t = NaN;\n }\n return 1;\n }, 0, time);\n lock.active = id;\n transition.event && transition.event.start.call(node, node.__data__, i);\n tweens = [];\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, node.__data__, i)) {\n tweens.push(value);\n }\n });\n ease = transition.ease;\n duration = transition.duration;\n }\n function tick(elapsed) {\n var t = elapsed / duration, e = ease(t), n = tweens.length;\n while (n > 0) {\n tweens[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, node.__data__, i);\n if (--lock.count) delete lock[id]; else delete node[ns];\n return 1;\n }\n }\n if (!transition) {\n time = inherit.time;\n timer = d3_timer(schedule, 0, time);\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n timer: timer,\n delay: inherit.delay,\n duration: inherit.duration,\n ease: inherit.ease,\n index: i\n };\n inherit = null;\n ++lock.count;\n }\n }\n d3.svg.axis = function() {\n var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n function axis(g) {\n g.each(function() {\n var g = d3.select(this);\n var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n d3.transition(path));\n tickEnter.append(\"line\");\n tickEnter.append(\"text\");\n var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n if (orient === \"bottom\" || orient === \"top\") {\n tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n } else {\n tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n }\n lineEnter.attr(y2, sign * innerTickSize);\n textEnter.attr(y1, sign * tickSpacing);\n lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n if (scale1.rangeBand) {\n var x = scale1, dx = x.rangeBand() / 2;\n scale0 = scale1 = function(d) {\n return x(d) + dx;\n };\n } else if (scale0.rangeBand) {\n scale0 = scale1;\n } else {\n tickExit.call(tickTransform, scale1, scale0);\n }\n tickEnter.call(tickTransform, scale0, scale1);\n tickUpdate.call(tickTransform, scale1, scale1);\n });\n }\n axis.scale = function(x) {\n if (!arguments.length) return scale;\n scale = x;\n return axis;\n };\n axis.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n return axis;\n };\n axis.ticks = function() {\n if (!arguments.length) return tickArguments_;\n tickArguments_ = d3_array(arguments);\n return axis;\n };\n axis.tickValues = function(x) {\n if (!arguments.length) return tickValues;\n tickValues = x;\n return axis;\n };\n axis.tickFormat = function(x) {\n if (!arguments.length) return tickFormat_;\n tickFormat_ = x;\n return axis;\n };\n axis.tickSize = function(x) {\n var n = arguments.length;\n if (!n) return innerTickSize;\n innerTickSize = +x;\n outerTickSize = +arguments[n - 1];\n return axis;\n };\n axis.innerTickSize = function(x) {\n if (!arguments.length) return innerTickSize;\n innerTickSize = +x;\n return axis;\n };\n axis.outerTickSize = function(x) {\n if (!arguments.length) return outerTickSize;\n outerTickSize = +x;\n return axis;\n };\n axis.tickPadding = function(x) {\n if (!arguments.length) return tickPadding;\n tickPadding = +x;\n return axis;\n };\n axis.tickSubdivide = function() {\n return arguments.length && axis;\n };\n return axis;\n };\n var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n };\n function d3_svg_axisX(selection, x0, x1) {\n selection.attr(\"transform\", function(d) {\n var v0 = x0(d);\n return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y0, y1) {\n selection.attr(\"transform\", function(d) {\n var v0 = y0(d);\n return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n });\n }\n d3.svg.brush = function() {\n var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n function brush(g) {\n g.each(function() {\n var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n var background = g.selectAll(\".background\").data([ 0 ]);\n background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n resize.exit().remove();\n resize.enter().append(\"g\").attr(\"class\", function(d) {\n return \"resize \" + d;\n }).style(\"cursor\", function(d) {\n return d3_svg_brushCursor[d];\n }).append(\"rect\").attr(\"x\", function(d) {\n return /[ew]$/.test(d) ? -3 : null;\n }).attr(\"y\", function(d) {\n return /^[ns]/.test(d) ? -3 : null;\n }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n resize.style(\"display\", brush.empty() ? \"none\" : null);\n var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n if (x) {\n range = d3_scaleRange(x);\n backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n redrawX(gUpdate);\n }\n if (y) {\n range = d3_scaleRange(y);\n backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n redrawY(gUpdate);\n }\n redraw(gUpdate);\n });\n }\n brush.event = function(g) {\n g.each(function() {\n var event_ = event.of(this, arguments), extent1 = {\n x: xExtent,\n y: yExtent,\n i: xExtentDomain,\n j: yExtentDomain\n }, extent0 = this.__chart__ || extent1;\n this.__chart__ = extent1;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.brush\", function() {\n xExtentDomain = extent0.i;\n yExtentDomain = extent0.j;\n xExtent = extent0.x;\n yExtent = extent0.y;\n event_({\n type: \"brushstart\"\n });\n }).tween(\"brush:brush\", function() {\n var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n xExtentDomain = yExtentDomain = null;\n return function(t) {\n xExtent = extent1.x = xi(t);\n yExtent = extent1.y = yi(t);\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n };\n }).each(\"end.brush\", function() {\n xExtentDomain = extent1.i;\n yExtentDomain = extent1.j;\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n });\n } else {\n event_({\n type: \"brushstart\"\n });\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n }\n });\n };\n function redraw(g) {\n g.selectAll(\".resize\").attr(\"transform\", function(d) {\n return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n });\n }\n function redrawX(g) {\n g.select(\".extent\").attr(\"x\", xExtent[0]);\n g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n }\n function redrawY(g) {\n g.select(\".extent\").attr(\"y\", yExtent[0]);\n g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n }\n function brushstart() {\n var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n if (d3.event.changedTouches) {\n w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n } else {\n w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n }\n g.interrupt().selectAll(\"*\").interrupt();\n if (dragging) {\n origin[0] = xExtent[0] - origin[0];\n origin[1] = yExtent[0] - origin[1];\n } else if (resizing) {\n var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n origin[0] = xExtent[ex];\n origin[1] = yExtent[ey];\n } else if (d3.event.altKey) center = origin.slice();\n g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n event_({\n type: \"brushstart\"\n });\n brushmove();\n function keydown() {\n if (d3.event.keyCode == 32) {\n if (!dragging) {\n center = null;\n origin[0] -= xExtent[1];\n origin[1] -= yExtent[1];\n dragging = 2;\n }\n d3_eventPreventDefault();\n }\n }\n function keyup() {\n if (d3.event.keyCode == 32 && dragging == 2) {\n origin[0] += xExtent[1];\n origin[1] += yExtent[1];\n dragging = 0;\n d3_eventPreventDefault();\n }\n }\n function brushmove() {\n var point = d3.mouse(target), moved = false;\n if (offset) {\n point[0] += offset[0];\n point[1] += offset[1];\n }\n if (!dragging) {\n if (d3.event.altKey) {\n if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n origin[0] = xExtent[+(point[0] < center[0])];\n origin[1] = yExtent[+(point[1] < center[1])];\n } else center = null;\n }\n if (resizingX && move1(point, x, 0)) {\n redrawX(g);\n moved = true;\n }\n if (resizingY && move1(point, y, 1)) {\n redrawY(g);\n moved = true;\n }\n if (moved) {\n redraw(g);\n event_({\n type: \"brush\",\n mode: dragging ? \"move\" : \"resize\"\n });\n }\n }\n function move1(point, scale, i) {\n var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n if (dragging) {\n r0 -= position;\n r1 -= size + position;\n }\n min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n if (dragging) {\n max = (min += position) + size;\n } else {\n if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n if (position < min) {\n max = min;\n min = position;\n } else {\n max = position;\n }\n }\n if (extent[0] != min || extent[1] != max) {\n if (i) yExtentDomain = null; else xExtentDomain = null;\n extent[0] = min;\n extent[1] = max;\n return true;\n }\n }\n function brushend() {\n brushmove();\n g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n d3.select(\"body\").style(\"cursor\", null);\n w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n dragRestore();\n event_({\n type: \"brushend\"\n });\n }\n }\n brush.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.clamp = function(z) {\n if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n return brush;\n };\n brush.extent = function(z) {\n var x0, x1, y0, y1, t;\n if (!arguments.length) {\n if (x) {\n if (xExtentDomain) {\n x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n } else {\n x0 = xExtent[0], x1 = xExtent[1];\n if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n }\n }\n if (y) {\n if (yExtentDomain) {\n y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n } else {\n y0 = yExtent[0], y1 = yExtent[1];\n if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n }\n }\n return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n }\n if (x) {\n x0 = z[0], x1 = z[1];\n if (y) x0 = x0[0], x1 = x1[0];\n xExtentDomain = [ x0, x1 ];\n if (x.invert) x0 = x(x0), x1 = x(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n }\n if (y) {\n y0 = z[0], y1 = z[1];\n if (x) y0 = y0[1], y1 = y1[1];\n yExtentDomain = [ y0, y1 ];\n if (y.invert) y0 = y(y0), y1 = y(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n }\n return brush;\n };\n brush.clear = function() {\n if (!brush.empty()) {\n xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n xExtentDomain = yExtentDomain = null;\n }\n return brush;\n };\n brush.empty = function() {\n return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n };\n return d3.rebind(brush, event, \"on\");\n };\n var d3_svg_brushCursor = {\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n };\n var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n var d3_time_formatUtc = d3_time_format.utc;\n var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n function d3_time_formatIsoNative(date) {\n return date.toISOString();\n }\n d3_time_formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n d3_time.second = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 1e3) * 1e3);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n }, function(date) {\n return date.getSeconds();\n });\n d3_time.seconds = d3_time.second.range;\n d3_time.seconds.utc = d3_time.second.utc.range;\n d3_time.minute = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 6e4) * 6e4);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n }, function(date) {\n return date.getMinutes();\n });\n d3_time.minutes = d3_time.minute.range;\n d3_time.minutes.utc = d3_time.minute.utc.range;\n d3_time.hour = d3_time_interval(function(date) {\n var timezone = date.getTimezoneOffset() / 60;\n return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n }, function(date) {\n return date.getHours();\n });\n d3_time.hours = d3_time.hour.range;\n d3_time.hours.utc = d3_time.hour.utc.range;\n d3_time.month = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setDate(1);\n return date;\n }, function(date, offset) {\n date.setMonth(date.getMonth() + offset);\n }, function(date) {\n return date.getMonth();\n });\n d3_time.months = d3_time.month.range;\n d3_time.months.utc = d3_time.month.utc.range;\n function d3_time_scale(linear, methods, format) {\n function scale(x) {\n return linear(x);\n }\n scale.invert = function(x) {\n return d3_time_scaleDate(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n linear.domain(x);\n return scale;\n };\n function tickMethod(extent, count) {\n var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n return d / 31536e6;\n }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n }\n scale.nice = function(interval, skip) {\n var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n if (method) interval = method[0], skip = method[1];\n function skipped(date) {\n return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n }\n return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n floor: function(date) {\n while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n return date;\n },\n ceil: function(date) {\n while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n return date;\n }\n } : interval));\n };\n scale.ticks = function(interval, skip) {\n var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n range: interval\n }, skip ];\n if (method) interval = method[0], skip = method[1];\n return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n };\n scale.tickFormat = function() {\n return format;\n };\n scale.copy = function() {\n return d3_time_scale(linear.copy(), methods, format);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_time_scaleDate(t) {\n return new Date(t);\n }\n var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n return d.getMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getHours();\n } ], [ \"%a %d\", function(d) {\n return d.getDay() && d.getDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getMonth();\n } ], [ \"%Y\", d3_true ] ]);\n var d3_time_scaleMilliseconds = {\n range: function(start, stop, step) {\n return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n },\n floor: d3_identity,\n ceil: d3_identity\n };\n d3_time_scaleLocalMethods.year = d3_time.year;\n d3_time.scale = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n };\n var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n return [ m[0].utc, m[1] ];\n });\n var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n return d.getUTCMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getUTCSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getUTCMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getUTCHours();\n } ], [ \"%a %d\", function(d) {\n return d.getUTCDay() && d.getUTCDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getUTCDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getUTCMonth();\n } ], [ \"%Y\", d3_true ] ]);\n d3_time_scaleUtcMethods.year = d3_time.year.utc;\n d3_time.scale.utc = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n };\n d3.text = d3_xhrType(function(request) {\n return request.responseText;\n });\n d3.json = function(url, callback) {\n return d3_xhr(url, \"application/json\", d3_json, callback);\n };\n function d3_json(request) {\n return JSON.parse(request.responseText);\n }\n d3.html = function(url, callback) {\n return d3_xhr(url, \"text/html\", d3_html, callback);\n };\n function d3_html(request) {\n var range = d3_document.createRange();\n range.selectNode(d3_document.body);\n return range.createContextualFragment(request.responseText);\n }\n d3.xml = d3_xhrType(function(request) {\n return request.responseXML;\n });\n if (typeof define === \"function\" && define.amd) this.d3 = d3, define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}();"]}