{"version":3,"sources":["webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/numberArray.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-axis/src/identity.js","webpack:///./node_modules/d3-axis/src/axis.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3/dist/package.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/textTween.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/adder.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3-geo/src/compose.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/d3-geo/src/clip/circle.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/mercator.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-time-format/src/index.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/index.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/number.js","webpack:///./node_modules/d3-array/src/extent.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/quantile.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-scale/src/init.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-scale/src/ordinal.js","webpack:///./node_modules/d3-scale/src/band.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-scale/src/tickFormat.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcMinute.js"],"names":["step","value","Math","max","min","floor","exponent","abs","basis","t1","v0","v1","v2","v3","t2","t3","linear","a","d","t","gamma","y","nogamma","b","pow","exponential","constant","isNaN","rgbGamma","color","rgb","start","end","r","colorRgb","g","opacity","rgbSpline","spline","colors","i","n","length","Array","values","c","slice","isNumberArray","x","ArrayBuffer","isView","DataView","genericArray","nb","na","Date","setTime","k","number","string","date","numberArray","isArray","valueOf","toString","object","re","formatSpecifier","specifier","match","exec","Error","FormatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","trim","type","this","undefined","prototype","locale","format","formatPrefix","definition","decimal","thousands","grouping","currency","minus","formatLocale","constructor","factory","extend","parent","Object","create","key","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color_formatHex","formatHex","color_formatRgb","formatRgb","m","l","toLowerCase","parseInt","rgbn","Rgb","rgba","hsla","hasOwnProperty","NaN","rgbConvert","o","arguments","rgb_formatHex","hex","rgb_formatRgb","round","h","s","Hsl","hslConvert","hsl2rgb","m1","m2","define","copy","channels","assign","displayable","formatHsl","brighter","darker","durationSecond","durationMinute","durationHour","durationDay","durationWeek","t0","newInterval","floori","offseti","count","field","interval","ceil","d0","d1","offset","range","stop","previous","push","filter","test","every","isFinite","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","translateX","translateY","scale","center","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","context","ticks","apply","domain","identity","spacing","range0","range1","position","selection","path","selectAll","data","tick","order","tickExit","exit","tickEnter","enter","append","attr","line","select","text","merge","insert","transition","getAttribute","p","parentNode","remove","each","_","call","tickSize","axisBottom","axisLeft","timeFormat","utcFormat","dateTime","time","periods","days","shortDays","months","shortMonths","parse","utcParse","noop","dispatch","Dispatch","parseTypenames","typenames","types","split","map","name","indexOf","get","set","callback","concat","on","typename","T","that","args","none","selector","querySelector","empty","querySelectorAll","matches","update","EnterNode","datum","ownerDocument","namespaceURI","_next","_parent","__data__","appendChild","child","insertBefore","next","bindIndex","group","node","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending","xhtml","svg","xlink","xml","xmlns","prefix","namespaces","space","local","attrRemove","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","v","attrFunctionNS","defaultView","document","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","names","list","add","classedRemove","classedTrue","classedFalse","classedFunction","join","splice","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","firstChild","creatorInherit","uri","documentElement","createElement","createElementNS","creatorFixed","namespace","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","listener","index","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","j","removeEventListener","capture","onAdd","wrap","addEventListener","dispatchEvent","params","window","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","root","Selection","groups","parents","_groups","_parents","subgroups","subnode","subgroup","selectorAll","matcher","size","bind","enterGroup","updateGroup","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","sort","compare","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","property","classed","html","creator","before","deep","taskHead","taskTail","frame","timeout","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","f","setTimeout","clearNow","Timer","_call","_time","timer","delay","restart","wake","e","timerFlush","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","TypeError","elapsed","emptyOn","emptyTween","id","timing","schedules","__transition","self","tween","state","duration","ease","init","schedule","cssNode","cssRoot","cssView","svgNode","active","degrees","PI","rotate","skewX","scaleX","scaleY","sqrt","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","pop","q","xa","ya","xb","yb","translate","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolateNumber","interpolateRgb","interpolateString","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","children","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","Promise","resolve","reject","cancel","interrupt","defaultTiming","number1","number2","cos","sin","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","w","tree","xm","ym","xp","yp","right","bottom","_root","leaf","_x","_y","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","source","target","cover","xz","yz","z","visit","extent","find","radius","x3","y3","quads","Quad","d2","retainer","removeAll","visitAfter","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","Adder","reset","temp","adder","bv","av","halfPi","quarterPi","radians","exp","log","asin","x00","y00","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","result","area","areaPointFirst","areaPoint","boundsStream","bounds","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_context","_radius","pointRadius","_line","_point","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","circle","_circle","projection","projectionStream","contextStream","pathArea","measure","pathMeasure","pathBounds","pathCentroid","compose","invert","rotationIdentity","lambda","phi","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","cosPhi","lines","rejoin","shift","Intersection","points","other","entry","segments","compareIntersection","startInside","subject","clip","forEach","segment","p0","p1","pointEqual","link","current","isSubject","array","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","sum","longitude","pointVisible","clipLine","sink","polygon","ring","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","sinPhi","normal","angle","winding","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","delta","absDelta","antimeridian","intersection","phiArc","polygonContains","clipRejoin","pointLine","clean","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","from","to","direction","circleStream","cosRadius","sinRadius","circleRadius","cr","smallRadius","notHemisphere","visible","intersect","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","A","u","uu","polar","q1","code","c0","v00","point2","clipRectangle","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","linePoint","b0","b1","polygonInside","cleanInside","ax","ay","transformer","methods","TransformStream","fit","fitBounds","clipExtent","geoStream","fitExtent","cosMinDistance","project","delta2","resampleLineTo","depth","phi2","lambda2","dx2","dy2","dz","lambda00","a00","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslate","sx","sy","scaleTranslateRotate","alpha","cosAlpha","sinAlpha","ai","bi","ci","fi","projectAt","projectResample","projectTransform","projectRotateTransform","cache","cacheStream","theta","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","clipCircle","reflectX","reflectY","fitSize","fitWidth","fitHeight","height","projectionMutator","mercatorRaw","reclip","forward","mercatorProjection","random","sourceRandomUniform","randomUniform","defaultSource","sourceRandomNormal","randomNormal","mu","sigma","sourceRandomLogNormal","randomLogNormal","sourceRandomIrwinHall","randomIrwinHall","sourceRandomBates","randomBates","irwinHall","sourceRandomExponential","randomExponential","RedBlackTree","RedBlackNode","U","C","L","R","P","N","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","left","createEdge","edge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","cy","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","cx","epsilon2","ha","hc","circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","epsilon","unshift","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v01","v11","v10","clipCells","polygons","triangles","s0","e1","s1","links","_found","vx","vy","SQRT2","Transform","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","IntersectionObserverEntry","defineProperty","intersectionRatio","registry","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","observe","_observationTargets","some","item","element","nodeType","_registerInstance","_monitorIntersections","_checkForIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","disconnect","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","threshold","_parseRootMargin","opt_rootMargin","margins","margin","parts","parseFloat","unit","_monitoringIntersections","_monitoringInterval","addEvent","_domObserver","MutationObserver","attributes","childList","characterData","subtree","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","top","targetRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","boundingClientRect","rootBounds","_hasCrossedThreshold","isIntersecting","_callback","display","rect1","rect2","getParentNode","atRoot","parentRect","parentComputedStyle","body","overflow","clientWidth","clientHeight","_expandRectByRootMargin","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","targetArea","intersectionArea","Number","toFixed","opt_options","fn","options","rootMargin","opt_useCapture","attachEvent","detatchEvent","el","err","host","utcDay","Map","has","clear","keys","entries","Set","proto","utcYear","setUTCMonth","setUTCFullYear","getUTCFullYear","day","setHours","setDate","getDate","getTimezoneOffset","reA","reB","am","bm","bs","lastIndex","one","year","setMonth","setFullYear","getFullYear","formatDecimalParts","localDate","H","M","S","utcDate","UTC","newDate","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","getDay","getMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","getHours","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","getUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","getUTCHours","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","newFormat","pad","charCodeAt","pads","charAt","newParse","Z","week","Q","V","timeMonday","timeDay","W","X","numberRe","percentRe","requoteRe","requote","replace","timeYear","getMilliseconds","getMinutes","getSeconds","timeSunday","dISO","timeThursday","getUTCMilliseconds","getUTCMinutes","getUTCSeconds","dow","UTCdISO","toExponential","coefficient","toLocaleString","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","prefixExponent","formatDecimal","toPrecision","formatRounded","toUpperCase","prefixes","substring","reverse","currencyPrefix","currencySuffix","numerals","formatNumerals","String","percent","nan","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","padding","lo","hi","mid","ascendingBisect","bisector","bisectRight","valueof","e10","e5","e2","tickIncrement","power","LN10","error","tickStep","step0","step1","LN2","value0","arrays","merged","initRange","implicit","ordinal","unknown","band","ordinalRange","paddingInner","paddingOuter","rescale","sequence","rangeRound","normalize","clamper","bimap","r0","r1","polymap","bisect","clamp","untransform","piecewise","output","input","interpolateValue","interpolateRound","continuous","linearish","precisionPrefix","precisionRound","precisionFixed","nice","month","hour","minute","second","millisecond","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds"],"mappings":"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","file":"1.9e4ef90262.mjs","sourcesContent":["import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"],\n  minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","export var name = \"d3\";\nexport var version = \"5.16.0\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var files = [\"dist/**/*.js\",\"index.js\"];\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"1\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"5\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nexport default function(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\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","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\n  }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, 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.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nexport function parseCss(value) {\n  if (value === \"none\") return identity;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\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}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n  });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      return defaultTiming.time = now(), defaultTiming;\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, touch, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n  return function(target) {\n    return touch(target, event.touches, identifier);\n  };\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\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\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection) {\n    if (group.selection) {\n      group\n          .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n          .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start().brush().end();\n          });\n    }\n  };\n\n  brush.clear = function(group) {\n    brush.move(group, null);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function() {\n      if (this.starting) this.starting = false, this.emit(\"start\");\n      else this.emit(\"brush\");\n      return this;\n    },\n    brush: function() {\n      this.emit(\"brush\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function started() {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        pointer = event.touches ? toucher(event.changedTouches[0].identifier) : mouse,\n        point0 = pointer(that),\n        point = point0,\n        emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      state.selection = selection = [\n        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n      ];\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    nopropagation();\n    interrupt(that);\n    redraw.call(that);\n    emit.start();\n\n    function moved() {\n      var point1 = pointer(that);\n      if (shifting && !lockX && !lockY) {\n        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n        else lockX = true;\n      }\n      point = point1;\n      moving = true;\n      noevent();\n      move();\n    }\n\n    function move() {\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush();\n      }\n    }\n\n    function ended() {\n      nopropagation();\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end();\n    }\n\n    function keydowned() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n\n    function keyupped() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move();\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n  }\n\n  function touchmoved() {\n    emitter(this, arguments).moved();\n  }\n\n  function touchended() {\n    emitter(this, arguments).ended();\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nexport default function() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = range(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(range(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\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 += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\");\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function (force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","export default function(x) {\n  return x;\n}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n    areaRingSum = adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum.reset();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\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\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      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","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function 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\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum.reset();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\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 = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(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          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\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\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\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\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\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","export default function() {\n  return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += source();\n      return sum;\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n  function randomLogNormal() {\n    var randomNormal = normal.source(source).apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n","function RedBlackTree() {\n  this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\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 = RedBlackFirst(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\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            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(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            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\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\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\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\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; 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          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(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          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(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\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\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\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\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\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\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\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\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\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\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\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 (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n      delete edges[i];\n    }\n  }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n              : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n              : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nexport function attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon\n      && Math.abs(y - lArc.circle.cy) < epsilon) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon\n      && Math.abs(y - rArc.circle.cy) < epsilon) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n}\n","var rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    }\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    }\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n *  https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n    'IntersectionObserverEntry' in window &&\n    'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n  // Minimal polyfill for Edge 15's lack of `isIntersecting`\n  // See: https://github.com/w3c/IntersectionObserver/issues/211\n  if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n    Object.defineProperty(window.IntersectionObserverEntry.prototype,\n      'isIntersecting', {\n      get: function () {\n        return this.intersectionRatio > 0;\n      }\n    });\n  }\n  return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n  this.time = entry.time;\n  this.target = entry.target;\n  this.rootBounds = entry.rootBounds;\n  this.boundingClientRect = entry.boundingClientRect;\n  this.intersectionRect = entry.intersectionRect || getEmptyRect();\n  this.isIntersecting = !!entry.intersectionRect;\n\n  // Calculates the intersection ratio.\n  var targetRect = this.boundingClientRect;\n  var targetArea = targetRect.width * targetRect.height;\n  var intersectionRect = this.intersectionRect;\n  var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n  // Sets intersection ratio.\n  if (targetArea) {\n    // Round the intersection ratio to avoid floating point math issues:\n    // https://github.com/w3c/IntersectionObserver/issues/324\n    this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n  } else {\n    // If area is zero and is intersecting, sets to 1, otherwise to 0\n    this.intersectionRatio = this.isIntersecting ? 1 : 0;\n  }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n *     changes have queued. The function is not invoked if the queue has\n *     been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n  var options = opt_options || {};\n\n  if (typeof callback != 'function') {\n    throw new Error('callback must be a function');\n  }\n\n  if (options.root && options.root.nodeType != 1) {\n    throw new Error('root must be an Element');\n  }\n\n  // Binds and throttles `this._checkForIntersections`.\n  this._checkForIntersections = throttle(\n      this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n  // Private properties.\n  this._callback = callback;\n  this._observationTargets = [];\n  this._queuedEntries = [];\n  this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n  // Public properties.\n  this.thresholds = this._initThresholds(options.threshold);\n  this.root = options.root || null;\n  this.rootMargin = this._rootMarginValues.map(function(margin) {\n    return margin.value + margin.unit;\n  }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n  var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n    return item.element == target;\n  });\n\n  if (isTargetAlreadyObserved) {\n    return;\n  }\n\n  if (!(target && target.nodeType == 1)) {\n    throw new Error('target must be an Element');\n  }\n\n  this._registerInstance();\n  this._observationTargets.push({element: target, entry: null});\n  this._monitorIntersections();\n  this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n  this._observationTargets =\n      this._observationTargets.filter(function(item) {\n\n    return item.element != target;\n  });\n  if (!this._observationTargets.length) {\n    this._unmonitorIntersections();\n    this._unregisterInstance();\n  }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n  this._observationTargets = [];\n  this._unmonitorIntersections();\n  this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n  var records = this._queuedEntries.slice();\n  this._queuedEntries = [];\n  return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n *     a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n  var threshold = opt_threshold || [0];\n  if (!Array.isArray(threshold)) threshold = [threshold];\n\n  return threshold.sort().filter(function(t, i, a) {\n    if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n      throw new Error('threshold must be a number between 0 and 1 inclusively');\n    }\n    return t !== a[i - 1];\n  });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n *     defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n *     value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n  var marginString = opt_rootMargin || '0px';\n  var margins = marginString.split(/\\s+/).map(function(margin) {\n    var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n    if (!parts) {\n      throw new Error('rootMargin must be specified in pixels or percent');\n    }\n    return {value: parseFloat(parts[1]), unit: parts[2]};\n  });\n\n  // Handles shorthand.\n  margins[1] = margins[1] || margins[0];\n  margins[2] = margins[2] || margins[0];\n  margins[3] = margins[3] || margins[1];\n\n  return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n  if (!this._monitoringIntersections) {\n    this._monitoringIntersections = true;\n\n    // If a poll interval is set, use polling instead of listening to\n    // resize and scroll events or DOM mutations.\n    if (this.POLL_INTERVAL) {\n      this._monitoringInterval = setInterval(\n          this._checkForIntersections, this.POLL_INTERVAL);\n    }\n    else {\n      addEvent(window, 'resize', this._checkForIntersections, true);\n      addEvent(document, 'scroll', this._checkForIntersections, true);\n\n      if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n        this._domObserver = new MutationObserver(this._checkForIntersections);\n        this._domObserver.observe(document, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          subtree: true\n        });\n      }\n    }\n  }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n  if (this._monitoringIntersections) {\n    this._monitoringIntersections = false;\n\n    clearInterval(this._monitoringInterval);\n    this._monitoringInterval = null;\n\n    removeEvent(window, 'resize', this._checkForIntersections, true);\n    removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n    if (this._domObserver) {\n      this._domObserver.disconnect();\n      this._domObserver = null;\n    }\n  }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n  var rootIsInDom = this._rootIsInDom();\n  var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n  this._observationTargets.forEach(function(item) {\n    var target = item.element;\n    var targetRect = getBoundingClientRect(target);\n    var rootContainsTarget = this._rootContainsTarget(target);\n    var oldEntry = item.entry;\n    var intersectionRect = rootIsInDom && rootContainsTarget &&\n        this._computeTargetAndRootIntersection(target, rootRect);\n\n    var newEntry = item.entry = new IntersectionObserverEntry({\n      time: now(),\n      target: target,\n      boundingClientRect: targetRect,\n      rootBounds: rootRect,\n      intersectionRect: intersectionRect\n    });\n\n    if (!oldEntry) {\n      this._queuedEntries.push(newEntry);\n    } else if (rootIsInDom && rootContainsTarget) {\n      // If the new entry intersection ratio has crossed any of the\n      // thresholds, add a new entry.\n      if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n        this._queuedEntries.push(newEntry);\n      }\n    } else {\n      // If the root is not in the DOM or target is not contained within\n      // root but the previous entry for this target had an intersection,\n      // add a new record indicating removal.\n      if (oldEntry && oldEntry.isIntersecting) {\n        this._queuedEntries.push(newEntry);\n      }\n    }\n  }, this);\n\n  if (this._queuedEntries.length) {\n    this._callback(this.takeRecords(), this);\n  }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n *     expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n *     intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n    function(target, rootRect) {\n\n  // If the element isn't displayed, an intersection can't happen.\n  if (window.getComputedStyle(target).display == 'none') return;\n\n  var targetRect = getBoundingClientRect(target);\n  var intersectionRect = targetRect;\n  var parent = getParentNode(target);\n  var atRoot = false;\n\n  while (!atRoot) {\n    var parentRect = null;\n    var parentComputedStyle = parent.nodeType == 1 ?\n        window.getComputedStyle(parent) : {};\n\n    // If the parent isn't displayed, an intersection can't happen.\n    if (parentComputedStyle.display == 'none') return;\n\n    if (parent == this.root || parent == document) {\n      atRoot = true;\n      parentRect = rootRect;\n    } else {\n      // If the element has a non-visible overflow, and it's not the <body>\n      // or <html> element, update the intersection rect.\n      // Note: <body> and <html> cannot be clipped to a rect that's not also\n      // the document rect, so no need to compute a new intersection.\n      if (parent != document.body &&\n          parent != document.documentElement &&\n          parentComputedStyle.overflow != 'visible') {\n        parentRect = getBoundingClientRect(parent);\n      }\n    }\n\n    // If either of the above conditionals set a new parentRect,\n    // calculate new intersection data.\n    if (parentRect) {\n      intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n      if (!intersectionRect) break;\n    }\n    parent = getParentNode(parent);\n  }\n  return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n  var rootRect;\n  if (this.root) {\n    rootRect = getBoundingClientRect(this.root);\n  } else {\n    // Use <html>/<body> instead of window since scroll bars affect size.\n    var html = document.documentElement;\n    var body = document.body;\n    rootRect = {\n      top: 0,\n      left: 0,\n      right: html.clientWidth || body.clientWidth,\n      width: html.clientWidth || body.clientWidth,\n      bottom: html.clientHeight || body.clientHeight,\n      height: html.clientHeight || body.clientHeight\n    };\n  }\n  return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n  var margins = this._rootMarginValues.map(function(margin, i) {\n    return margin.unit == 'px' ? margin.value :\n        margin.value * (i % 2 ? rect.width : rect.height) / 100;\n  });\n  var newRect = {\n    top: rect.top - margins[0],\n    right: rect.right + margins[1],\n    bottom: rect.bottom + margins[2],\n    left: rect.left - margins[3]\n  };\n  newRect.width = newRect.right - newRect.left;\n  newRect.height = newRect.bottom - newRect.top;\n\n  return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n *    particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n *    particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n    function(oldEntry, newEntry) {\n\n  // To make comparing easier, an entry that has a ratio of 0\n  // but does not actually intersect is given a value of -1\n  var oldRatio = oldEntry && oldEntry.isIntersecting ?\n      oldEntry.intersectionRatio || 0 : -1;\n  var newRatio = newEntry.isIntersecting ?\n      newEntry.intersectionRatio || 0 : -1;\n\n  // Ignore unchanged ratios\n  if (oldRatio === newRatio) return;\n\n  for (var i = 0; i < this.thresholds.length; i++) {\n    var threshold = this.thresholds[i];\n\n    // Return true if an entry matches a threshold or if the new ratio\n    // and the old ratio are on the opposite sides of a threshold.\n    if (threshold == oldRatio || threshold == newRatio ||\n        threshold < oldRatio !== threshold < newRatio) {\n      return true;\n    }\n  }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n  return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n  return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n  if (registry.indexOf(this) < 0) {\n    registry.push(this);\n  }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n  var index = registry.indexOf(this);\n  if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n  return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n *     function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n  var timer = null;\n  return function () {\n    if (!timer) {\n      timer = setTimeout(function() {\n        fn();\n        timer = null;\n      }, timeout);\n    }\n  };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n *     phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.addEventListener == 'function') {\n    node.addEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.attachEvent == 'function') {\n    node.attachEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n *     flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.removeEventListener == 'function') {\n    node.removeEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.detatchEvent == 'function') {\n    node.detatchEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n *     is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n  var top = Math.max(rect1.top, rect2.top);\n  var bottom = Math.min(rect1.bottom, rect2.bottom);\n  var left = Math.max(rect1.left, rect2.left);\n  var right = Math.min(rect1.right, rect2.right);\n  var width = right - left;\n  var height = bottom - top;\n\n  return (width >= 0 && height >= 0) && {\n    top: top,\n    bottom: bottom,\n    left: left,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n  var rect;\n\n  try {\n    rect = el.getBoundingClientRect();\n  } catch (err) {\n    // Ignore Windows 7 IE11 \"Unspecified error\"\n    // https://github.com/w3c/IntersectionObserver/pull/205\n  }\n\n  if (!rect) return getEmptyRect();\n\n  // Older IE\n  if (!(rect.width && rect.height)) {\n    rect = {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n  }\n  return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n  return {\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    width: 0,\n    height: 0\n  };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n  var node = child;\n  while (node) {\n    if (node == parent) return true;\n\n    node = getParentNode(node);\n  }\n  return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n  var parent = node.parentNode;\n\n  if (parent && parent.nodeType == 11 && parent.host) {\n    // If the parent is a shadow root, return the host element.\n    return parent.host;\n  }\n  return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[prefix + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\nexport default set;\n","export {default as timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse} from \"./defaultLocale.js\";\nexport {default as timeFormatLocale} from \"./locale.js\";\nexport {default as isoFormat} from \"./isoFormat.js\";\nexport {default as isoParse} from \"./isoParse.js\";\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(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","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": formatDecimal,\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\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 = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n","export default function(x) {\n  return x === null ? NaN : +x;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n","export default function(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n  var index = map(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = map();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range[1] < range[0],\n        start = range[reverse - 0],\n        stop = range[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","export default function(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = slice.call(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous(transform, untransform) {\n  return transformer()(transform, untransform);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = tickIncrement(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = tickIncrement(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = tickIncrement(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous(identity, identity);\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n    durationMinute = durationSecond * 60,\n    durationHour = durationMinute * 60,\n    durationDay = durationHour * 24,\n    durationWeek = durationDay * 7,\n    durationMonth = durationDay * 30,\n    durationYear = durationDay * 365;\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n  var scale = continuous(identity, identity),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop, step) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n      if (i === tickIntervals.length) {\n        step = tickStep(start / durationYear, stop / durationYear, interval);\n        interval = year;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(tickStep(start, stop, interval), 1);\n        interval = millisecond;\n      }\n    }\n\n    return step == null ? interval : interval.every(step);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval, step) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1, step);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval, step) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n        ? domain(nice(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n  };\n\n  return scale;\n}\n\nexport default function() {\n  return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n"],"sourceRoot":""}