{"version":3,"sources":["webpack://App.[name]/./js/demographics-donut.js","webpack://App.[name]/./js/analytics.js","webpack://App.[name]/./js/demographics.js","webpack://App.[name]//nix/store/saylf54v94hjg6x2hqwqargyffdmydi3-node_mixrank-0.0.1/lib/node_modules/d3/d3.js"],"names":["d3","config","color","scale","category20c","arc","svg","outerRadius","radius","innerRadius","arcHover","pie","layout","sort","value","d","selection","each","data","total","$","i","v","Math","round","select","this","selectAll","gEnter","enter","append","attr","text","title","style","g","arcs","on","percent","index","legendSetup","name","props","url","email","$el","that","click","e","trackEvent","currentTarget","submit","donutChart","demographics","international_total","global_unique_visitors_users","us_unique_visitors_users","gender_total","gender_male_visitors","gender_female_visitors","offspring_total","kidsinhousehold_yes_visitors","kidsinhousehold_no_visitors","charts","age_0_17_visitors","age_18_24_visitors","age_25_34_visitors","age_35_44_visitors","age_45_54_visitors","age_55_64_visitors","age_65_plus_visitors","ushhi_0k_25k_visitors","ushhi_25k_50k_visitors","ushhi_50k_75k_visitors","ushhi_75k_100k_visitors","ushhi_100k_150k_visitors","ushhi_150k_plus_visitors","edu_below_highschool_visitors","edu_highschool_visitors","edu_somecollege_visitors","edu_bachelorsdegree_visitors","edu_graduatedegree_visitors","chartname","hasOwnProperty","chart","hasData","dataIdx","donut","id","get","datum","call","parent","remove","version","d3_arraySlice","slice","d3_array","list","d3_document","document","d3_documentElement","node","ownerDocument","documentElement","d3_window","defaultView","childNodes","nodeType","length","array","Array","Date","now","createElement","setProperty","error","d3_element_prototype","Element","prototype","d3_element_setAttribute","setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","space","local","priority","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","mid","right","ascending","descending","min","f","n","max","extent","c","sum","s","mean","j","quantile","values","p","H","h","floor","median","numbers","push","variance","m","deviation","apply","sqrt","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","t","random","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","map","key","entries","merge","arrays","merged","abs","d3_range_integerScale","k","d3_class","ctor","properties","Object","defineProperty","enumerable","d3_Map","_","create","range","start","stop","step","Infinity","Error","object","forEach","set","isArray","o","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","has","empty","nest","sortValues","rollup","sortKeys","mapType","depth","keyValue","setter","valuesByKey","sortKey","keyMap","order","add","behavior","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","event","l","z","listener","indexOf","concat","d3_eventPreventDefault","preventDefault","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","requote","replace","d3_requote_re","d3_subclass","__proto__","property","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","parentNode","__data__","d3_nsXhtml","d3_nsPrefix","xhtml","xlink","xml","xmlns","d3_selection_attr","ns","qualify","removeAttributeNS","removeAttribute","d3_collapse","trim","d3_selection_classedRe","RegExp","d3_selection_classes","split","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","test","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","removeChild","d3_selection_dataNode","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","callback","d3_selection_enter","d3_selection_enterPrototype","prefix","getAttributeNS","classed","contains","getComputedStyle","getPropertyValue","textContent","html","innerHTML","appendChild","insert","before","insertBefore","bind","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","update","exit","filter","next","nextSibling","args","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","d3_selection_onFilter","addEventListener","match","upgroup","nodes","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","w","suppressClick","off","setTimeout","mouse","container","d3_mousePoint","d3_mouse_bug44083","navigator","userAgent","changedTouches","ownerSVGElement","createSVGPoint","point","window","scrollX","scrollY","ctm","position","top","margin","padding","border","getScreenCTM","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","drag","origin","mousedown","dragstart","touchstart","subject","move","end","dragOffset","correspondingElement","dragged","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","dx","dy","position1","ε","ε2","π","PI","τ","τε","halfπ","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","acos","d3_asin","asin","d3_cosh","exp","d3_haversin","sin","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","log","d1","b0","b1","r0","r1","coshr0","u","d3_sinh","duration","zoom","translate0","center0","center","mousewheelTimer","touchtime","x0","x1","y0","y1","view","scaleExtent","d3_behavior_zoomInfinity","zooming","mousemove","mouseup","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","pow","transition","rescale","domain","invert","zoomstarted","zoomed","translate","zoomended","location0","d3_selection_interrupt","scale0","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","q","l0","l1","distance1","scale1","clearTimeout","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","cx","cy","copy","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","toString","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","r","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","cos","d3_lab_K","lab","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","atan2","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","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","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","mimeType","d3_xhr","xhr","headers","request","XMLHttpRequest","responseType","respond","result","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","parse","formatRow","formatValue","join","parseRows","Function","JSON","stringify","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","time","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","LN10","flush","d3_formatPrefixes","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","String","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTime","getTimezoneOffset","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","number","date","d0","offset","dt","times","utc","d3_time_interval_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","string","d3_time_formatPads","d3_time_formats","M","L","Z","d3_time_parse","localZ","W","U","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","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","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","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","d3_geo_areaRingSum","d3_geo_areaRingStart","λ00","φ00","λ0","cosφ0","sinφ0","nextPoint","λ","φ","dλ","sdλ","adλ","cosφ","sinφ","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","bounds","φ0","λ1","φ1","λ_","λ__","φ__","dλSum","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","λi","antimeridian","φi","angle","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","z0","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","entry","points","current","isSubject","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","line","rotatedClipStart","pointRing","polygon","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","intersection","φarc","d3_geo_pointInPolygon","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","pop","shift","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","sλ0","sλ1","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianIntersect","from","to","direction","d3_geo_clipCircle","cr","smallRadius","notHemisphere","visible","c0","v0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","δλ","polar","q1","d3_geom_clipLine","ax","ay","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","wn","insidePolygon","inside","a1","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","ρ0","forward","ρ0_y","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","δ2","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","a00","b00","c00","a0","resampleLineTo","φ2","λ2","x2","y2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","δx","δy","projectResample","δφ","δγ","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","path","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","distance","Δλ","sinΔλ","cosΔλ","sinφ1","graticule","X1","X0","Y1","Y0","DX","DY","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","F","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","geom","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","input","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","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","lSite","bx","by","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","splice","d3_geom_voronoiClipEdges","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","links","triangles","s0","s1","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","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","delaunay","quadtree","compat","xs","ys","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","linear","poly","quad","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","out","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","skew","ease","interpolateHcl","ah","ac","al","bh","bc","bl","interpolateHsl","as","interpolateLab","aa","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","tb","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","ancestors","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","interpolateTransform","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","force","alpha","distances","strengths","charges","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","charge","chargeDistance2","d3_layout_forceChargeDistance2","gravity","theta2","repulse","dw","dn","pointCharge","dragmove","resume","tick","weight","d3_layout_forceAccumulate","visit","chargeDistance","theta","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","Number","d3_layout_pieSortByValue","padAngle","da","pa","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","bottom","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","d3_layout_packUnlink","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","d3_layout_packTransform","separation","nodeSize","root0","root1","node1","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","d3_layout_clusterLeft","d3_layout_clusterRight","treemap","stickies","pad","sticky","mode","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linearRebind","d3_scale_linearNice","d3_scale_linearTickRange","span","err","d3_scale_linearTicks","d3_scale_linearTickFormat","d3_scale_linearPrecision","d3_scale_linearFormatSignificant","d3_scale_linearFormatPrecision","d3_scale_linear","clamp","rangeRound","ticks","tickFormat","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_powPow","d3_scale_pow","powp","powb","ordinal","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","d3_category20c","d3_zero","d3_scale_quantile","quantiles","invertExtent","quantize","d3_scale_quantize","threshold","d3_scale_threshold","identity","d3_scale_identity","d3_svg_arcInnerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","rc","circleSegment","rp","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","lp","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","count","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","attrTweenNS","styleNull","styleString","styleTween","inheritId","id0","id1","axis","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","brush","xExtentDomain","yExtentDomain","xExtent","yExtent","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","eventTarget","event_","resizing","resizingX","resizingY","dragging","keydown","keyup","brushmove","brushend","ex","ey","altKey","keyCode","move1","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","json","responseXML"],"mappings":"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","file":"49.chunk.js?v=285d0c34ba7941ddfd17","sourcesContent":["define(['d3'], function(d3) {\n 'use strict';\n\n var donutChart = function(config) {\n config = config || {};\n\n var width = 315;\n var height = 210;\n var radius = 84;\n var color = d3.scale.category20c();\n var arc = d3.svg.arc()\n .outerRadius(radius - 10)\n .innerRadius(radius - 40)\n ;\n var arcHover = d3.svg.arc()\n .outerRadius(radius - 5)\n .innerRadius(radius - 40)\n ;\n var pie = d3.layout.pie()\n .sort(null)\n .value(function(d) { return d[1]; })\n ;\n\n function chart(selection) {\n selection.each(function(data) {\n //data processing\n var total = 0;\n $(data).each(function(i, v) {\n total += v[1];\n });\n $(data).each(function(i, v) {\n v[2] = Math.round((v[1] / total) * 100);\n v[3] = i;\n });\n //select the svg element, if it exists\n var svg = d3.select(this).selectAll('svg').data([data]);\n //otherwise create the skeletal chart\n var gEnter = svg.enter().append('svg').append('g');\n gEnter.append('g').attr('class', 'title')\n .attr('transform', 'translate(0, 10)')\n .append('text').text(config.title)\n .attr('font-weight', 'bold')\n .style('fill', '#777')\n ;\n gEnter.append('g').attr('class', 'donut');\n gEnter.append('g').attr('class', 'legend');\n gEnter.append('g').attr('class', 'hover-label').append('text');\n\n //set the outer dimensions\n svg.attr('width', width).attr('height', height);\n\n //position the donut\n var g = svg.select('.donut')\n .attr('transform', 'translate(' + (width / 4) + ', '+ (height / 2) +')')\n ;\n\n //position the hover-label\n svg.select('.hover-label')\n .style('fill', '#999')\n .attr('text-anchor', 'middle')\n .attr('transform', 'translate(' + (width / 4) + ', '+ ((height / 2) + 5) +')')\n ;\n\n //apply arc data\n var arcs = g.selectAll('.arc')\n .data(pie(data))\n .enter().append('g')\n .attr('class', function(d, i) { return 'arc arc-path-' + i; })\n ;\n arcs.append('path')\n .attr('d', arc)\n .style('fill', function(d) { return color(d.data[0]); })\n .on('mouseover', function() {\n var percent = d3.select(this).data()[0].data[2];\n var index = d3.select(this).data()[0].data[3];\n d3.select(this).attr('d', arcHover);\n svg.select('.hover-label text').text(percent +'%');\n svg.select('.legend-item-'+ index +' text')\n .style('fill', '#000')\n .attr('font-weight', 'bold')\n ;\n })\n .on('mouseout', function() {\n var index = d3.select(this).data()[0].data[3];\n d3.select(this).attr('d', arc);\n svg.select('.hover-label text').text('');\n svg.select('.legend-item-'+ index +' text')\n .style('fill', '#999')\n .attr('font-weight', 'normal')\n ;\n })\n ;\n\n //setup the legend\n var legendSetup = gEnter.select('.legend').selectAll('.legend-item').data(data);\n legendSetup.enter()\n .append('g')\n .attr('class', function(d, i) { return 'legend-item legend-item-' + i; })\n .attr('transform', function(d, i) { return 'translate(70, '+ i * 16 +')'; })\n .style('cursor', 'default')\n .on('mouseover', function() {\n var percent = d3.select(this).data()[0][2];\n var index = d3.select(this).data()[0][3];\n arcs.select('.arc-path-'+ index +' path').attr('d', arcHover);\n svg.select('.hover-label text').text(percent +'%');\n svg.select('.legend-item-'+ index +' text')\n .style('fill', '#000')\n .attr('font-weight', 'bold')\n ;\n })\n .on('mouseout', function() {\n var index = d3.select(this).data()[0][3];\n arcs.select('.arc-path-'+ index +' path').attr('d', arc);\n svg.select('.hover-label text').text('');\n svg.select('.legend-item-'+ index +' text')\n .style('fill', '#999')\n .attr('font-weight', 'normal')\n ;\n })\n ;\n legendSetup.append('circle')\n .attr('cx', 105)\n .attr('cy', 53)\n .attr('r', 5)\n .style('fill', function(d) { return color(d[0]); })\n ;\n legendSetup.append('text')\n .attr('x', 115)\n .attr('y', 57)\n .attr('text-anchor', 'start')\n .style('fill', '#999')\n .style('font-weight', 'bold')\n .style(\"font-size\",\"13px\")\n .text(function(d) { return d[0]; })\n ;\n\n });\n }\n\n return chart;\n };\n return donutChart;\n});\n","define([], function () {\n 'use strict';\n\n return {\n 'trackEvent': function(name, props) {\n // ga('send', name, 'Action');\n // mixpanel.track(name, props);\n },\n 'trackVirtualPage': function(url) {\n // Google analytics virtual page view; useful for specifying funnel steps.\n // Should be a path without leading slash, e.g. 'unlock/modal/open'.\n // ga('send', 'pageview', '/virtual/' + url);\n\n },\n 'trackUser': function(email, props) {\n // mixpanel.identify(email);\n // mixpanel.people.set($.extend(props, {\n // '$email': email,\n // '$last_login': new Date()\n // }));\n },\n 'bindEvents': function($el) {\n // listen for events on elements with data-event attributes\n var that = this;\n $('a[data-event],button[data-event]', $el).click(function(e) {\n that.trackEvent($(e.currentTarget).data('event'));\n });\n $('form[data-event]', $el).submit(function(e) {\n that.trackEvent($(e.currentTarget).data('event'));\n });\n }\n };\n});\n","define(['./demographics-donut', 'd3'], function (donutChart, d3) {\n 'use strict';\n var demographics = {};\n demographics.render = function(demographics){\n var international_total = demographics.global_unique_visitors_users + demographics.us_unique_visitors_users;\n var gender_total = demographics.gender_male_visitors + demographics.gender_female_visitors;\n var offspring_total = demographics.kidsinhousehold_yes_visitors + demographics.kidsinhousehold_no_visitors;\n var charts = {\n 'ages': {\n 'id': 'demographic-chart-ages',\n 'title': 'Ages',\n 'data': [\n [\"0-17\", demographics.age_0_17_visitors],\n [\"18-24\", demographics.age_18_24_visitors],\n [\"25-34\", demographics.age_25_34_visitors],\n [\"35-44\", demographics.age_35_44_visitors],\n [\"45-54\", demographics.age_45_54_visitors],\n [\"55-64\", demographics.age_55_64_visitors],\n [\"64+\", demographics.age_65_plus_visitors]\n ]\n },\n 'international': {\n 'id': 'demographic-chart-international',\n 'title': 'International',\n 'data': [\n [\"Global\", demographics.global_unique_visitors_users / (international_total) || null],\n [\"US\", demographics.us_unique_visitors_users / (international_total) || null]\n ]\n },\n 'household': {\n 'id': 'demographic-chart-household',\n 'title': 'US Household Income',\n 'data': [\n [\"0-25k\", demographics.ushhi_0k_25k_visitors],\n [\"25k-50k\", demographics.ushhi_25k_50k_visitors],\n [\"50k-75k\", demographics.ushhi_50k_75k_visitors],\n [\"75k-100k\", demographics.ushhi_75k_100k_visitors],\n [\"100k-150k\", demographics.ushhi_100k_150k_visitors],\n [\"150k+\", demographics.ushhi_150k_plus_visitors]\n ]\n },\n 'education': {\n 'id': 'demographic-chart-education',\n 'title': 'Education',\n 'data': [\n [\"Below Highschool\", demographics.edu_below_highschool_visitors],\n [\"Highschool\", demographics.edu_highschool_visitors],\n [\"Some College\", demographics.edu_somecollege_visitors],\n [\"Bachelors Degree\", demographics.edu_bachelorsdegree_visitors],\n [\"Graduate Degree\", demographics.edu_graduatedegree_visitors]\n ]\n },\n 'gender': {\n 'id': 'demographic-chart-gender',\n 'title': 'Gender',\n 'data': [\n [\"Male\", demographics.gender_male_visitors / (gender_total) || null],\n [\"Female\", demographics.gender_female_visitors / (gender_total) || null]\n ]\n },\n 'offspring': {\n 'id': 'demographic-chart-offspring',\n 'title': 'Parents',\n 'data': [\n [\"Yes\", demographics.kidsinhousehold_yes_visitors / (offspring_total) || null],\n [\"No\", demographics.kidsinhousehold_no_visitors / (offspring_total) || null]\n ]\n }\n };\n\n for(var chartname in charts){\n if (charts.hasOwnProperty(chartname)) {\n var chart = charts[chartname];\n var hasData = false;\n for(var dataIdx in chart.data){\n if(chart.data[dataIdx][1]){\n hasData = true;\n break;\n }\n }\n if (hasData) {\n chart.donut = donutChart({ title: chart.title });\n\n d3.select($('#'+ chart.id).get(0))\n .datum(chart.data)\n .call(chart.donut)\n ;\n }\n else {\n $('#' + chart.id).parent().remove();\n }\n }\n }\n };\n return demographics;\n});\n","!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}();"],"sourceRoot":""}