{"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-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/math.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-geo/src/path/bounds.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-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-selection/src/selectAll.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-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/identity.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-collection/src/entries.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/index.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/index.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-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/stream.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-geo/src/adder.js","webpack:///./node_modules/d3-geo/src/path/area.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-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/interval.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/day.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-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.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","Intersection","point","points","other","entry","z","o","e","v","p","segments","compareIntersection","startInside","interpolate","stream","subject","clip","forEach","segment","p0","p1","epsilon","lineStart","lineEnd","push","sort","link","current","isSubject","array","clipRectangle","x0","y0","x1","y1","visible","from","to","direction","a1","corner","comparePoint","ca","cb","polygon","ring","x__","y__","v__","x_","y_","v_","first","clean","line","lines","activeStream","bufferStream","m","noop","rejoin","pop","concat","shift","result","clipStream","linePoint","NaN","polygonStart","polygonEnd","winding","a0","j","b0","b1","polygonInside","cleanInside","merge","clipRejoin","ax","ay","t0","dx","dy","clipLine","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","l","toLowerCase","parseInt","rgbn","Rgb","rgba","hsla","hasOwnProperty","rgbConvert","arguments","rgb_formatHex","hex","rgb_formatRgb","round","h","s","Hsl","hslConvert","hsl2rgb","m1","m2","define","copy","channels","assign","displayable","formatHsl","brighter","darker","pi","PI","tau","degrees","radians","cos","atan","atan2","sin","ceil","exp","log","sqrt","translateX","translateY","scale","center","offset","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","context","ticks","apply","domain","identity","spacing","range","range0","range1","position","selection","path","selectAll","data","tick","order","tickExit","exit","tickEnter","enter","append","attr","select","text","insert","transition","isFinite","getAttribute","parentNode","remove","filter","each","_","call","tickSize","axisBottom","axisLeft","Infinity","boundsStream","bounds","dispatch","test","Dispatch","parseTypenames","typenames","types","split","map","name","indexOf","get","set","callback","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","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","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","previous","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compare","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","property","classed","html","creator","before","deep","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","f","setTimeout","clearNow","Timer","_call","_time","timer","delay","time","restart","wake","timerFlush","sleep","nap","poke","clearTimeout","clearInterval","setInterval","TypeError","stop","elapsed","emptyOn","emptyTween","id","timing","schedules","__transition","self","tween","state","duration","ease","init","schedule","cssNode","cssRoot","cssView","svgNode","active","rotate","skewX","scaleX","scaleY","interpolateTransform","parse","pxComma","pxParen","degParen","q","xa","ya","xb","yb","translate","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolateNumber","interpolateRgb","interpolateString","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","every","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","children","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","Promise","resolve","reject","cancel","interrupt","defaultTiming","number1","number2","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","x2","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","ccw","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","visit","extent","find","radius","x3","y3","quads","Quad","d2","retainer","removeAll","visitAfter","random","sourceRandomUniform","randomUniform","defaultSource","sourceRandomNormal","randomNormal","mu","sigma","sourceRandomLogNormal","randomLogNormal","normal","sourceRandomIrwinHall","randomIrwinHall","sum","sourceRandomBates","randomBates","irwinHall","sourceRandomExponential","randomExponential","lambda","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","circle","circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","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","v00","v01","v11","v10","clipCells","polygons","triangles","s0","e1","s1","links","_found","vx","vy","SQRT2","Transform","applyX","applyY","invert","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","height","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","fit","projection","fitBounds","clipExtent","geoStream","fitExtent","sa","cache","cacheStream","tx","ty","sx","sy","alpha","kx","ky","transformer","postclip","reset","angle","reflectX","reflectY","fitSize","fitWidth","fitHeight","Map","has","clear","keys","entries","Set","proto","reA","reB","am","bm","bs","bi","lastIndex","one","formatDecimalParts","toExponential","coefficient","toLocaleString","replace","prefixExponent","formatDecimal","toPrecision","formatRounded","toUpperCase","prefixes","substring","reverse","currencyPrefix","currencySuffix","numerals","formatNumerals","String","percent","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","charCodeAt","padding","methods","TransformStream","sphere","streamGeometry","geometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","Point","coordinates","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lo","hi","mid","ascendingBisect","bisector","bisectRight","valueof","e10","e5","e2","count","tickIncrement","power","LN10","error","tickStep","step0","step1","LN2","value0","arrays","merged","Adder","temp","adder","bv","av","x00","y00","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","area","areaPointFirst","areaPoint","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","projectionStream","contextStream","pathArea","measure","pathMeasure","pathBounds","pathCentroid","initRange","implicit","ordinal","unknown","band","ordinalRange","paddingInner","paddingOuter","rescale","sequence","rangeRound","normalize","clamper","bimap","d0","d1","r0","r1","polymap","bisect","clamp","untransform","piecewise","output","input","interpolateValue","interpolateRound","u","continuous","linearish","precisionPrefix","precisionRound","precisionFixed","nice","newInterval","floori","offseti","field","year","setMonth","setHours","setFullYear","getFullYear","month","setDate","getMonth","weekday","getDate","getDay","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","day","hour","getMilliseconds","getSeconds","getMinutes","getHours","minute","second","getUTCSeconds","millisecond","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","getUTCFullYear","localDate","H","M","S","utcDate","UTC","newDate","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","getUTCHours","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","getUTCMonth","formatUTCMinutes","getUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","X","utcFormat","utcParse","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds"],"mappings":"6FAAA,gBAEe,aAASA,EAAMC,GAC5B,OAAOC,KAAKC,IAAI,EAAgE,EAA7DD,KAAKC,KAAK,EAAGD,KAAKE,IAAI,EAAGF,KAAKG,MAAMC,YAASL,GAAS,KAAWK,YAASJ,KAAKK,IAAIP,O,oCCHxG,gBAEe,aAASA,EAAMG,GAE5B,OADAH,EAAOE,KAAKK,IAAIP,GAAOG,EAAMD,KAAKK,IAAIJ,GAAOH,EACtCE,KAAKC,IAAI,EAAGG,YAASH,GAAOG,YAASN,IAAS,I,oCCJvD,gBAEe,aAASA,GACtB,OAAOE,KAAKC,IAAI,GAAIG,YAASJ,KAAKK,IAAIP,O,oDCHjC,SAASQ,EAAMC,EAAIC,EAAIC,EAAIC,EAAIC,GACpC,IAAIC,EAAKL,EAAKA,EAAIM,EAAKD,EAAKL,EAC5B,QAAS,EAAI,EAAIA,EAAK,EAAIK,EAAKC,GAAML,GAC9B,EAAI,EAAII,EAAK,EAAIC,GAAMJ,GACvB,EAAI,EAAIF,EAAK,EAAIK,EAAK,EAAIC,GAAMH,EACjCG,EAAKF,GAAM,EAGJ,I,YCNf,SAASG,EAAOC,EAAGC,GACjB,OAAO,SAASC,GACd,OAAOF,EAAIE,EAAID,GAeZ,SAASE,EAAMC,GACpB,OAAoB,IAAZA,GAAKA,GAAWC,EAAU,SAASL,EAAGM,GAC5C,OAAOA,EAAIN,EAbf,SAAqBA,EAAGM,EAAGF,GACzB,OAAOJ,EAAIf,KAAKsB,IAAIP,EAAGI,GAAIE,EAAIrB,KAAKsB,IAAID,EAAGF,GAAKJ,EAAGI,EAAI,EAAIA,EAAG,SAASF,GACrE,OAAOjB,KAAKsB,IAAIP,EAAIE,EAAII,EAAGF,IAWZI,CAAYR,EAAGM,EAAGF,GAAKK,YAASC,MAAMV,GAAKM,EAAIN,IAInD,SAASK,EAAQL,EAAGM,GACjC,IAAIL,EAAIK,EAAIN,EACZ,OAAOC,EAAIF,EAAOC,EAAGC,GAAKQ,YAASC,MAAMV,GAAKM,EAAIN,GCtBrC,aAAUW,EAASP,GAChC,IAAIQ,EAAQT,EAAMC,GAElB,SAASS,EAAIC,EAAOC,GAClB,IAAIC,EAAIJ,GAAOE,EAAQG,YAASH,IAAQE,GAAID,EAAME,YAASF,IAAMC,GAC7DE,EAAIN,EAAME,EAAMI,EAAGH,EAAIG,GACvBZ,EAAIM,EAAME,EAAMR,EAAGS,EAAIT,GACvBa,EAAUd,EAAQS,EAAMK,QAASJ,EAAII,SACzC,OAAO,SAASjB,GAKd,OAJAY,EAAME,EAAIA,EAAEd,GACZY,EAAMI,EAAIA,EAAEhB,GACZY,EAAMR,EAAIA,EAAEJ,GACZY,EAAMK,QAAUA,EAAQjB,GACjBY,EAAQ,IAMnB,OAFAD,EAAIV,MAAQQ,EAELE,EAnBM,CAoBZ,GAEH,SAASO,EAAUC,GACjB,OAAO,SAASC,GACd,IAIIC,EAAGX,EAJHY,EAAIF,EAAOG,OACXT,EAAI,IAAIU,MAAMF,GACdN,EAAI,IAAIQ,MAAMF,GACdlB,EAAI,IAAIoB,MAAMF,GAElB,IAAKD,EAAI,EAAGA,EAAIC,IAAKD,EACnBX,EAAQK,YAASK,EAAOC,IACxBP,EAAEO,GAAKX,EAAMI,GAAK,EAClBE,EAAEK,GAAKX,EAAMM,GAAK,EAClBZ,EAAEiB,GAAKX,EAAMN,GAAK,EAMpB,OAJAU,EAAIK,EAAOL,GACXE,EAAIG,EAAOH,GACXZ,EAAIe,EAAOf,GACXM,EAAMO,QAAU,EACT,SAASjB,GAId,OAHAU,EAAMI,EAAIA,EAAEd,GACZU,EAAMM,EAAIA,EAAEhB,GACZU,EAAMN,EAAIA,EAAEJ,GACLU,EAAQ,KAKCQ,GF7CP,SAASO,GACtB,IAAIH,EAAIG,EAAOF,OAAS,EACxB,OAAO,SAASvB,GACd,IAAIqB,EAAIrB,GAAK,EAAKA,EAAI,EAAKA,GAAK,GAAKA,EAAI,EAAGsB,EAAI,GAAKvC,KAAKG,MAAMc,EAAIsB,GAChE9B,EAAKiC,EAAOJ,GACZ5B,EAAKgC,EAAOJ,EAAI,GAChB9B,EAAK8B,EAAI,EAAII,EAAOJ,EAAI,GAAK,EAAI7B,EAAKC,EACtCC,EAAK2B,EAAIC,EAAI,EAAIG,EAAOJ,EAAI,GAAK,EAAI5B,EAAKD,EAC9C,OAAOH,GAAOW,EAAIqB,EAAIC,GAAKA,EAAG/B,EAAIC,EAAIC,EAAIC,OEsClBwB,GCpDb,SAASO,GACtB,IAAIH,EAAIG,EAAOF,OACf,OAAO,SAASvB,GACd,IAAIqB,EAAItC,KAAKG,QAAQc,GAAK,GAAK,IAAMA,EAAIA,GAAKsB,GAC1C/B,EAAKkC,GAAQJ,EAAIC,EAAI,GAAKA,GAC1B9B,EAAKiC,EAAOJ,EAAIC,GAChB7B,EAAKgC,GAAQJ,EAAI,GAAKC,GACtB5B,EAAK+B,GAAQJ,EAAI,GAAKC,GAC1B,OAAOjC,GAAOW,EAAIqB,EAAIC,GAAKA,EAAG/B,EAAIC,EAAIC,EAAIC,Q,oCCV/B,aAASI,EAAGM,GACzB,OAAON,GAAKA,EAAGM,GAAKA,EAAG,SAASJ,GAC9B,OAAOF,GAAK,EAAIE,GAAKI,EAAIJ,K,gECFd,WAASF,EAAGM,GACpBA,IAAGA,EAAI,IACZ,IAEIiB,EAFAC,EAAIxB,EAAIf,KAAKE,IAAImB,EAAEmB,OAAQzB,EAAEyB,QAAU,EACvCG,EAAItB,EAAEuB,QAEV,OAAO,SAAS3B,GACd,IAAKqB,EAAI,EAAGA,EAAIC,IAAKD,EAAGK,EAAEL,GAAKvB,EAAEuB,IAAM,EAAIrB,GAAKI,EAAEiB,GAAKrB,EACvD,OAAO0B,IAIJ,SAASE,EAAcC,GAC5B,OAAOC,YAAYC,OAAOF,MAAQA,aAAaG,UCL1C,SAASC,EAAanC,EAAGM,GAC9B,IAIIiB,EAJAa,EAAK9B,EAAIA,EAAEmB,OAAS,EACpBY,EAAKrC,EAAIf,KAAKE,IAAIiD,EAAIpC,EAAEyB,QAAU,EAClCM,EAAI,IAAIL,MAAMW,GACdT,EAAI,IAAIF,MAAMU,GAGlB,IAAKb,EAAI,EAAGA,EAAIc,IAAMd,EAAGQ,EAAER,GAAKvC,EAAMgB,EAAEuB,GAAIjB,EAAEiB,IAC9C,KAAOA,EAAIa,IAAMb,EAAGK,EAAEL,GAAKjB,EAAEiB,GAE7B,OAAO,SAASrB,GACd,IAAKqB,EAAI,EAAGA,EAAIc,IAAMd,EAAGK,EAAEL,GAAKQ,EAAER,GAAGrB,GACrC,OAAO0B,GCnBI,eAAS5B,EAAGM,GACzB,IAAIL,EAAI,IAAIqC,KACZ,OAAOtC,GAAKA,EAAGM,GAAKA,EAAG,SAASJ,GAC9B,OAAOD,EAAEsC,QAAQvC,GAAK,EAAIE,GAAKI,EAAIJ,GAAID,I,YCD5B,WAASD,EAAGM,GACzB,IAEIkC,EAFAjB,EAAI,GACJK,EAAI,GAMR,IAAKY,KAHK,OAANxC,GAA2B,iBAANA,IAAgBA,EAAI,IACnC,OAANM,GAA2B,iBAANA,IAAgBA,EAAI,IAEnCA,EACJkC,KAAKxC,EACPuB,EAAEiB,GAAKxD,EAAMgB,EAAEwC,GAAIlC,EAAEkC,IAErBZ,EAAEY,GAAKlC,EAAEkC,GAIb,OAAO,SAAStC,GACd,IAAKsC,KAAKjB,EAAGK,EAAEY,GAAKjB,EAAEiB,GAAGtC,GACzB,OAAO0B,I,wBCVI,eAAS5B,EAAGM,GACzB,IAAkBsB,EAAd1B,SAAWI,EACf,OAAY,MAALA,GAAmB,YAANJ,EAAkBO,YAASH,IAClC,WAANJ,EAAiBuC,IACZ,WAANvC,GAAmB0B,EAAIhB,YAAMN,KAAOA,EAAIsB,EAAGf,KAAO6B,IAClDpC,aAAaM,IAAQC,IACrBP,aAAagC,KAAOK,EACpBb,EAAcxB,GAAKsC,EACnBlB,MAAMmB,QAAQvC,GAAK6B,EACE,mBAAd7B,EAAEwC,SAAgD,mBAAfxC,EAAEyC,UAA2BrC,MAAMJ,GAAK0C,EAClFP,KAAQzC,EAAGM,K,kCCpBnB,kCACA,IAAI2C,EAAK,2EAEM,SAASC,EAAgBC,GACtC,KAAMC,EAAQH,EAAGI,KAAKF,IAAa,MAAM,IAAIG,MAAM,mBAAqBH,GACxE,IAAIC,EACJ,OAAO,IAAIG,EAAgB,CACzBC,KAAMJ,EAAM,GACZK,MAAOL,EAAM,GACbM,KAAMN,EAAM,GACZO,OAAQP,EAAM,GACdQ,KAAMR,EAAM,GACZS,MAAOT,EAAM,GACbU,MAAOV,EAAM,GACbW,UAAWX,EAAM,IAAMA,EAAM,GAAGvB,MAAM,GACtCmC,KAAMZ,EAAM,GACZa,KAAMb,EAAM,MAMT,SAASG,EAAgBJ,GAC9Be,KAAKV,UAA0BW,IAAnBhB,EAAUK,KAAqB,IAAML,EAAUK,KAAO,GAClEU,KAAKT,WAA4BU,IAApBhB,EAAUM,MAAsB,IAAMN,EAAUM,MAAQ,GACrES,KAAKR,UAA0BS,IAAnBhB,EAAUO,KAAqB,IAAMP,EAAUO,KAAO,GAClEQ,KAAKP,YAA8BQ,IAArBhB,EAAUQ,OAAuB,GAAKR,EAAUQ,OAAS,GACvEO,KAAKN,OAAST,EAAUS,KACxBM,KAAKL,WAA4BM,IAApBhB,EAAUU,WAAsBM,GAAahB,EAAUU,MACpEK,KAAKJ,QAAUX,EAAUW,MACzBI,KAAKH,eAAoCI,IAAxBhB,EAAUY,eAA0BI,GAAahB,EAAUY,UAC5EG,KAAKF,OAASb,EAAUa,KACxBE,KAAKD,UAA0BE,IAAnBhB,EAAUc,KAAqB,GAAKd,EAAUc,KAAO,GAZnEf,EAAgBkB,UAAYb,EAAgBa,UAe5Cb,EAAgBa,UAAUrB,SAAW,WACnC,OAAOmB,KAAKV,KACNU,KAAKT,MACLS,KAAKR,KACLQ,KAAKP,QACJO,KAAKN,KAAO,IAAM,UACHO,IAAfD,KAAKL,MAAsB,GAAK5E,KAAKC,IAAI,EAAgB,EAAbgF,KAAKL,SACjDK,KAAKJ,MAAQ,IAAM,UACAK,IAAnBD,KAAKH,UAA0B,GAAK,IAAM9E,KAAKC,IAAI,EAAoB,EAAjBgF,KAAKH,aAC3DG,KAAKF,KAAO,IAAM,IACnBE,KAAKD,O,kCC7Cb,wEAEII,EACOC,EACAC,EAU2BC,EAdtC,YAcsCA,EARxB,CACZC,QAAS,IACTC,UAAW,IACXC,SAAU,CAAC,GACXC,SAAU,CAAC,IAAK,IAChBC,MAAO,KAIPR,EAASS,YAAaN,GACtBF,EAASD,EAAOC,OAChBC,EAAeF,EAAOE,c,gGCdxB,SAASQ,EAAaC,EAAOC,EAAQC,EAAOC,GAC1CjB,KAAKnC,EAAIiD,EACTd,KAAKkB,EAAIH,EACTf,KAAKmB,EAAIH,EACThB,KAAKoB,EAAIH,EACTjB,KAAKqB,GAAI,EACTrB,KAAK1C,EAAI0C,KAAKsB,EAAI,KAML,eAASC,EAAUC,EAAqBC,EAAaC,EAAaC,GAC/E,IAEItE,EACAC,EAHAsE,EAAU,GACVC,EAAO,GAyBX,GArBAN,EAASO,SAAQ,SAASC,GACxB,MAAKzE,EAAIyE,EAAQxE,OAAS,IAAM,GAAhC,CACA,IAAID,EAAqCO,ECrBrB/B,EAAGM,EDqBhB4F,EAAKD,EAAQ,GAAIE,EAAKF,EAAQzE,GAErC,GCvBoBxB,EDuBLkG,ECvBQ5F,EDuBJ6F,ECtBd7G,YAAIU,EAAE,GAAKM,EAAE,IAAM8F,KAAW9G,YAAIU,EAAE,GAAKM,EAAE,IAAM8F,IDsB9B,CACtB,IAAKF,EAAG,KAAOC,EAAG,GAAI,CAEpB,IADAN,EAAOQ,YACF9E,EAAI,EAAGA,EAAIC,IAAKD,EAAGsE,EAAOb,OAAOkB,EAAKD,EAAQ1E,IAAI,GAAI2E,EAAG,IAE9D,YADAL,EAAOS,UAITH,EAAG,IAAM,EAAIC,IAGfN,EAAQS,KAAKxE,EAAI,IAAIgD,EAAamB,EAAID,EAAS,MAAM,IACrDF,EAAKQ,KAAKxE,EAAEsD,EAAI,IAAIN,EAAamB,EAAI,KAAMnE,GAAG,IAC9C+D,EAAQS,KAAKxE,EAAI,IAAIgD,EAAaoB,EAAIF,EAAS,MAAM,IACrDF,EAAKQ,KAAKxE,EAAEsD,EAAI,IAAIN,EAAaoB,EAAI,KAAMpE,GAAG,QAG3C+D,EAAQrE,OAAb,CAMA,IAJAsE,EAAKS,KAAKd,GACVe,EAAKX,GACLW,EAAKV,GAEAxE,EAAI,EAAGC,EAAIuE,EAAKtE,OAAQF,EAAIC,IAAKD,EACpCwE,EAAKxE,GAAG+D,EAAIK,GAAeA,EAO7B,IAJA,IACIV,EACAD,EAFAlE,EAAQgF,EAAQ,KAIV,CAIR,IAFA,IAAIY,EAAU5F,EACV6F,GAAY,EACTD,EAAQnB,GAAG,IAAKmB,EAAUA,EAAQlF,KAAOV,EAAO,OACvDmE,EAASyB,EAAQtB,EACjBS,EAAOQ,YACP,EAAG,CAED,GADAK,EAAQnB,EAAImB,EAAQrB,EAAEE,GAAI,EACtBmB,EAAQpB,EAAG,CACb,GAAIqB,EACF,IAAKpF,EAAI,EAAGC,EAAIyD,EAAOxD,OAAQF,EAAIC,IAAKD,EAAGsE,EAAOb,OAAOA,EAAQC,EAAO1D,IAAI,GAAIyD,EAAM,SAEtFY,EAAYc,EAAQ3E,EAAG2E,EAAQlF,EAAEO,EAAG,EAAG8D,GAEzCa,EAAUA,EAAQlF,MACb,CACL,GAAImF,EAEF,IADA1B,EAASyB,EAAQlB,EAAEJ,EACd7D,EAAI0D,EAAOxD,OAAS,EAAGF,GAAK,IAAKA,EAAGsE,EAAOb,OAAOA,EAAQC,EAAO1D,IAAI,GAAIyD,EAAM,SAEpFY,EAAYc,EAAQ3E,EAAG2E,EAAQlB,EAAEzD,GAAI,EAAG8D,GAE1Ca,EAAUA,EAAQlB,EAGpBP,GADAyB,EAAUA,EAAQrB,GACDD,EACjBuB,GAAaA,SACLD,EAAQnB,GAClBM,EAAOS,aAIX,SAASG,EAAKG,GACZ,GAAMpF,EAAIoF,EAAMnF,OAAhB,CAKA,IAJA,IAAID,EAGAlB,EAFAiB,EAAI,EACJvB,EAAI4G,EAAM,KAELrF,EAAIC,GACXxB,EAAEwB,EAAIlB,EAAIsG,EAAMrF,GAChBjB,EAAEkF,EAAIxF,EACNA,EAAIM,EAENN,EAAEwB,EAAIlB,EAAIsG,EAAM,GAChBtG,EAAEkF,EAAIxF,G,gBE1FO,SAAS6G,EAAcC,EAAIC,EAAIC,EAAIC,GAEhD,SAASC,EAAQnF,EAAG3B,GAClB,OAAO0G,GAAM/E,GAAKA,GAAKiF,GAAMD,GAAM3G,GAAKA,GAAK6G,EAG/C,SAASrB,EAAYuB,EAAMC,EAAIC,EAAWxB,GACxC,IAAI7F,EAAI,EAAGsH,EAAK,EAChB,GAAY,MAARH,IACInH,EAAIuH,EAAOJ,EAAME,OAAiBC,EAAKC,EAAOH,EAAIC,KACnDG,EAAaL,EAAMC,GAAM,EAAIC,EAAY,EAC9C,GAAGxB,EAAOb,MAAY,IAANhF,GAAiB,IAANA,EAAU8G,EAAKE,EAAIhH,EAAI,EAAIiH,EAAKF,UACnD/G,GAAKA,EAAIqH,EAAY,GAAK,KAAOC,QAEzCzB,EAAOb,MAAMoC,EAAG,GAAIA,EAAG,IAI3B,SAASG,EAAO/B,EAAG6B,GACjB,OAAO/H,YAAIkG,EAAE,GAAKsB,GAAMV,IAAUiB,EAAY,EAAI,EAAI,EAChD/H,YAAIkG,EAAE,GAAKwB,GAAMZ,IAAUiB,EAAY,EAAI,EAAI,EAC/C/H,YAAIkG,EAAE,GAAKuB,GAAMX,IAAUiB,EAAY,EAAI,EAAI,EAC/CA,EAAY,EAAI,EAAI,EAG5B,SAAS3B,EAAoB1F,EAAGM,GAC9B,OAAOkH,EAAaxH,EAAE+B,EAAGzB,EAAEyB,GAG7B,SAASyF,EAAaxH,EAAGM,GACvB,IAAImH,EAAKF,EAAOvH,EAAG,GACf0H,EAAKH,EAAOjH,EAAG,GACnB,OAAOmH,IAAOC,EAAKD,EAAKC,EACX,IAAPD,EAAWnH,EAAE,GAAKN,EAAE,GACb,IAAPyH,EAAWzH,EAAE,GAAKM,EAAE,GACb,IAAPmH,EAAWzH,EAAE,GAAKM,EAAE,GACpBA,EAAE,GAAKN,EAAE,GAGjB,OAAO,SAAS6F,GACd,IAEIJ,EACAkC,EACAC,EACAC,EAAKC,EAAKC,EACVC,EAAIC,EAAIC,EACRC,EACAC,ECvDFC,EADAC,EDgDEC,EAAe1C,EACf2C,GCjDFF,EAAQ,GAEL,CACLtD,MAAO,SAASjD,EAAG3B,EAAGqI,GACpBJ,EAAK9B,KAAK,CAACxE,EAAG3B,EAAGqI,KAEnBpC,UAAW,WACTiC,EAAM/B,KAAK8B,EAAO,KAEpB/B,QAASoC,IACTC,OAAQ,WACFL,EAAM7G,OAAS,GAAG6G,EAAM/B,KAAK+B,EAAMM,MAAMC,OAAOP,EAAMQ,WAE5DC,OAAQ,WACN,IAAIA,EAAST,EAGb,OAFAA,EAAQ,GACRD,EAAO,KACAU,KDyCLC,EAAa,CACfhE,MAAOA,EACPqB,UAgDF,WACE2C,EAAWhE,MAAQiE,EACftB,GAASA,EAAQpB,KAAKqB,EAAO,IACjCO,GAAQ,EACRD,GAAK,EACLF,EAAKC,EAAKiB,KApDV5C,QA0DF,WACMb,IACFwD,EAAUpB,EAAKC,GACXC,GAAOG,GAAIM,EAAaG,SAC5BlD,EAASc,KAAKiC,EAAaO,WAE7BC,EAAWhE,MAAQA,EACfkD,GAAIK,EAAajC,WAhErB6C,aAuBF,WACEZ,EAAeC,EAAc/C,EAAW,GAAIkC,EAAU,GAAIS,GAAQ,GAvBlEgB,WA0BF,WACE,IAAIzD,EApBN,WAGE,IAFA,IAAI0D,EAAU,EAEL9H,EAAI,EAAGC,EAAImG,EAAQlG,OAAQF,EAAIC,IAAKD,EAC3C,IAAK,IAAgE+H,EAAIhC,EAAhEM,EAAOD,EAAQpG,GAAIgI,EAAI,EAAGd,EAAIb,EAAKnG,OAAQuD,EAAQ4C,EAAK,GAAY4B,EAAKxE,EAAM,GAAIyE,EAAKzE,EAAM,GAAIuE,EAAId,IAAKc,EAClHD,EAAKE,EAAIlC,EAAKmC,EAAIzE,EAAQ4C,EAAK2B,GAAIC,EAAKxE,EAAM,GAAIyE,EAAKzE,EAAM,GACzDsC,GAAML,EAAUwC,EAAKxC,IAAOuC,EAAKF,IAAOrC,EAAKK,IAAOmC,EAAKnC,IAAOR,EAAKwC,MAAOD,EACrEI,GAAMxC,IAAOuC,EAAKF,IAAOrC,EAAKK,IAAOmC,EAAKnC,IAAOR,EAAKwC,MAAOD,EAI5E,OAAOA,EASWK,GACdC,EAAcvB,GAASzC,EACvBuB,GAAWzB,EAAWmE,YAAMnE,IAAWhE,QACvCkI,GAAezC,KACjBrB,EAAOsD,eACHQ,IACF9D,EAAOQ,YACPT,EAAY,KAAM,KAAM,EAAGC,GAC3BA,EAAOS,WAELY,GACF2C,EAAWpE,EAAUC,EAAqBC,EAAaC,EAAaC,GAEtEA,EAAOuD,cAETb,EAAe1C,EAAQJ,EAAWkC,EAAUC,EAAO,OAvCrD,SAAS5C,EAAMjD,EAAG3B,GACZ8G,EAAQnF,EAAG3B,IAAImI,EAAavD,MAAMjD,EAAG3B,GA8D3C,SAAS6I,EAAUlH,EAAG3B,GACpB,IAAImF,EAAI2B,EAAQnF,EAAG3B,GAEnB,GADIuH,GAASC,EAAKrB,KAAK,CAACxE,EAAG3B,IACvB+H,EACFN,EAAM9F,EAAG+F,EAAM1H,EAAG2H,EAAMxC,EACxB4C,GAAQ,EACJ5C,IACFgD,EAAalC,YACbkC,EAAavD,MAAMjD,EAAG3B,SAGxB,GAAImF,GAAK2C,EAAIK,EAAavD,MAAMjD,EAAG3B,OAC9B,CACH,IAAIJ,EAAI,CAACgI,EAAK/I,KAAKC,KA3IA,IA2IaD,KAAKE,IA3IjC,IA2I8C6I,IAAMC,EAAKhJ,KAAKC,KA3I/C,IA2I4DD,KAAKE,IA3IhF,IA2I6F8I,KAC7F3H,EAAI,CAACyB,EAAI9C,KAAKC,KA5IC,IA4IYD,KAAKE,IA5IhC,IA4I6C4C,IAAK3B,EAAInB,KAAKC,KA5I5C,IA4IyDD,KAAKE,IA5I7E,IA4I0FiB,MElJzF,SAASJ,EAAGM,EAAGwG,EAAIC,EAAIC,EAAIC,GACxC,IAQIjG,EARA8I,EAAK9J,EAAE,GACP+J,EAAK/J,EAAE,GAGPgK,EAAK,EACLxK,EAAK,EACLyK,EAJK3J,EAAE,GAIGwJ,EACVI,EAJK5J,EAAE,GAIGyJ,EAId,GADA/I,EAAI8F,EAAKgD,EACJG,KAAMjJ,EAAI,GAAf,CAEA,GADAA,GAAKiJ,EACDA,EAAK,EAAG,CACV,GAAIjJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,QACZ,GAAIiJ,EAAK,EAAG,CACjB,GAAIjJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,GAInB,GADAA,EAAIgG,EAAK8C,EACJG,KAAMjJ,EAAI,GAAf,CAEA,GADAA,GAAKiJ,EACDA,EAAK,EAAG,CACV,GAAIjJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,QACZ,GAAIiJ,EAAK,EAAG,CACjB,GAAIjJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,GAInB,GADAA,EAAI+F,EAAKgD,EACJG,KAAMlJ,EAAI,GAAf,CAEA,GADAA,GAAKkJ,EACDA,EAAK,EAAG,CACV,GAAIlJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,QACZ,GAAIkJ,EAAK,EAAG,CACjB,GAAIlJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,GAInB,GADAA,EAAIiG,EAAK8C,EACJG,KAAMlJ,EAAI,GAAf,CAEA,GADAA,GAAKkJ,EACDA,EAAK,EAAG,CACV,GAAIlJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,QACZ,GAAIkJ,EAAK,EAAG,CACjB,GAAIlJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,GAKnB,OAFIgJ,EAAK,IAAGhK,EAAE,GAAK8J,EAAKE,EAAKC,EAAIjK,EAAE,GAAK+J,EAAKC,EAAKE,GAC9C1K,EAAK,IAAGc,EAAE,GAAKwJ,EAAKtK,EAAKyK,EAAI3J,EAAE,GAAKyJ,EAAKvK,EAAK0K,IAC3C,MF0FKC,CAASnK,EAAGM,EAAGwG,EAAIC,EAAIC,EAAIC,GAQpB1B,IACTgD,EAAalC,YACbkC,EAAavD,MAAMjD,EAAG3B,GACtBgI,GAAQ,IAVHF,IACHK,EAAalC,YACbkC,EAAavD,MAAMhF,EAAE,GAAIA,EAAE,KAE7BuI,EAAavD,MAAM1E,EAAE,GAAIA,EAAE,IACtBiF,GAAGgD,EAAajC,UACrB8B,GAAQ,GAQdJ,EAAKjG,EAAGkG,EAAK7H,EAAG8H,EAAK3C,EAGvB,OAAOyD,K,sGGrKI,eAASoB,EAAaC,EAASjG,GAC5CgG,EAAYhG,UAAYiG,EAAQjG,UAAYA,EAC5CA,EAAUgG,YAAcA,GAGnB,SAASE,EAAOC,EAAQ/F,GAC7B,IAAIJ,EAAYoG,OAAOC,OAAOF,EAAOnG,WACrC,IAAK,IAAIsG,KAAOlG,EAAYJ,EAAUsG,GAAOlG,EAAWkG,GACxD,OAAOtG,ECNF,SAASuG,KAET,IAGHC,EAAM,sBACNC,EAAM,gDACNC,EAAM,iDACNC,EAAQ,qBACRC,EAAe,IAAIC,OAAO,UAAY,CAACL,EAAKA,EAAKA,GAAO,QACxDM,EAAe,IAAID,OAAO,UAAY,CAACH,EAAKA,EAAKA,GAAO,QACxDK,EAAgB,IAAIF,OAAO,WAAa,CAACL,EAAKA,EAAKA,EAAKC,GAAO,QAC/DO,EAAgB,IAAIH,OAAO,WAAa,CAACH,EAAKA,EAAKA,EAAKD,GAAO,QAC/DQ,EAAe,IAAIJ,OAAO,UAAY,CAACJ,EAAKC,EAAKA,GAAO,QACxDQ,EAAgB,IAAIL,OAAO,WAAa,CAACJ,EAAKC,EAAKA,EAAKD,GAAO,QAE/DU,EAAQ,CACVC,UAAW,SACXC,aAAc,SACdC,KAAM,MACNC,WAAY,QACZC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,EACPC,eAAgB,SAChBC,KAAM,IACNC,WAAY,QACZC,MAAO,SACPC,UAAW,SACXC,UAAW,QACXC,WAAY,QACZC,UAAW,SACXC,MAAO,SACPC,eAAgB,QAChBC,SAAU,SACVC,QAAS,SACTC,KAAM,MACNC,SAAU,IACVC,SAAU,MACVC,cAAe,SACfC,SAAU,SACVC,UAAW,MACXC,SAAU,SACVC,UAAW,SACXC,YAAa,QACbC,eAAgB,QAChBC,WAAY,SACZC,WAAY,SACZC,QAAS,QACTC,WAAY,SACZC,aAAc,QACdC,cAAe,QACfC,cAAe,QACfC,cAAe,QACfC,cAAe,MACfC,WAAY,QACZC,SAAU,SACVC,YAAa,MACbC,QAAS,QACTC,QAAS,QACTC,WAAY,QACZC,UAAW,SACXC,YAAa,SACbC,YAAa,QACbC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,KAAM,SACNC,UAAW,SACXC,KAAM,QACNC,MAAO,MACPC,YAAa,SACbC,KAAM,QACNC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,OAAQ,QACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,cAAe,SACfC,UAAW,QACXC,aAAc,SACdC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,qBAAsB,SACtBC,UAAW,SACXC,WAAY,QACZC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,cAAe,QACfC,aAAc,QACdC,eAAgB,QAChBC,eAAgB,QAChBC,eAAgB,SAChBC,YAAa,SACbC,KAAM,MACNC,UAAW,QACXC,MAAO,SACPC,QAAS,SACTC,OAAQ,QACRC,iBAAkB,QAClBC,WAAY,IACZC,aAAc,SACdC,aAAc,QACdC,eAAgB,QAChBC,gBAAiB,QACjBC,kBAAmB,MACnBC,gBAAiB,QACjBC,gBAAiB,SACjBC,aAAc,QACdC,UAAW,SACXC,UAAW,SACXC,SAAU,SACVC,YAAa,SACbC,KAAM,IACNC,QAAS,SACTC,MAAO,QACPC,UAAW,QACXC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,cAAe,SACfC,UAAW,SACXC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,WAAY,SACZC,OAAQ,QACRC,cAAe,QACfC,IAAK,SACLC,UAAW,SACXC,UAAW,QACXC,YAAa,QACbC,OAAQ,SACRC,WAAY,SACZC,SAAU,QACVC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,QAAS,QACTC,UAAW,QACXC,UAAW,QACXC,UAAW,QACXC,KAAM,SACNC,YAAa,MACbC,UAAW,QACXC,IAAK,SACLC,KAAM,MACNC,QAAS,SACTC,OAAQ,SACRC,UAAW,QACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,OAAQ,SACRC,YAAa,UAiBf,SAASC,IACP,OAAO1Q,KAAKrD,MAAMgU,YAOpB,SAASC,IACP,OAAO5Q,KAAKrD,MAAMkU,YAGL,SAASnU,EAAM0D,GAC5B,IAAImE,EAAGuM,EAEP,OADA1Q,GAAUA,EAAS,IAAIN,OAAOiR,eACtBxM,EAAIsC,EAAM1H,KAAKiB,KAAY0Q,EAAIvM,EAAE,GAAGhH,OAAQgH,EAAIyM,SAASzM,EAAE,GAAI,IAAW,IAANuM,EAAUG,EAAK1M,GAC/E,IAANuM,EAAU,IAAII,EAAK3M,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAY,IAAJA,GAAiB,GAAJA,IAAY,EAAU,GAAJA,EAAU,GACzG,IAANuM,EAAUK,EAAK5M,GAAK,GAAK,IAAMA,GAAK,GAAK,IAAMA,GAAK,EAAI,KAAW,IAAJA,GAAY,KACrE,IAANuM,EAAUK,EAAM5M,GAAK,GAAK,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAY,IAAJA,IAAkB,GAAJA,IAAY,EAAU,GAAJA,GAAY,KAClJ,OACCA,EAAIuC,EAAa3H,KAAKiB,IAAW,IAAI8Q,EAAI3M,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI,IAC3DA,EAAIyC,EAAa7H,KAAKiB,IAAW,IAAI8Q,EAAW,IAAP3M,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAK,IAC/FA,EAAI0C,EAAc9H,KAAKiB,IAAW+Q,EAAK5M,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAC3DA,EAAI2C,EAAc/H,KAAKiB,IAAW+Q,EAAY,IAAP5M,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAKA,EAAE,KAC/FA,EAAI4C,EAAahI,KAAKiB,IAAWgR,EAAK7M,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAK,IACpEA,EAAI6C,EAAcjI,KAAKiB,IAAWgR,EAAK7M,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,IACxE8C,EAAMgK,eAAejR,GAAU6Q,EAAK5J,EAAMjH,IAC/B,gBAAXA,EAA2B,IAAI8Q,EAAIlM,IAAKA,IAAKA,IAAK,GAClD,KAGR,SAASiM,EAAK3T,GACZ,OAAO,IAAI4T,EAAI5T,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EAAU,GAG1D,SAAS6T,EAAKrU,EAAGE,EAAGZ,EAAGN,GAErB,OADIA,GAAK,IAAGgB,EAAIE,EAAIZ,EAAI4I,KACjB,IAAIkM,EAAIpU,EAAGE,EAAGZ,EAAGN,GAGnB,SAASwV,EAAWnQ,GAEzB,OADMA,aAAasF,IAAQtF,EAAIzE,EAAMyE,IAChCA,EAEE,IAAI+P,GADX/P,EAAIA,EAAExE,OACWG,EAAGqE,EAAEnE,EAAGmE,EAAE/E,EAAG+E,EAAElE,SAFjB,IAAIiU,EAKd,SAASvU,EAAIG,EAAGE,EAAGZ,EAAGa,GAC3B,OAA4B,IAArBsU,UAAUhU,OAAe+T,EAAWxU,GAAK,IAAIoU,EAAIpU,EAAGE,EAAGZ,EAAc,MAAXa,EAAkB,EAAIA,GAGlF,SAASiU,EAAIpU,EAAGE,EAAGZ,EAAGa,GAC3B+C,KAAKlD,GAAKA,EACVkD,KAAKhD,GAAKA,EACVgD,KAAK5D,GAAKA,EACV4D,KAAK/C,SAAWA,EA2BlB,SAASuU,IACP,MAAO,IAAMC,EAAIzR,KAAKlD,GAAK2U,EAAIzR,KAAKhD,GAAKyU,EAAIzR,KAAK5D,GAGpD,SAASsV,IACP,IAAI5V,EAAIkE,KAAK/C,QACb,OAAc,KADQnB,EAAIU,MAAMV,GAAK,EAAIf,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGa,KAC/C,OAAS,SACrBf,KAAKC,IAAI,EAAGD,KAAKE,IAAI,IAAKF,KAAK4W,MAAM3R,KAAKlD,IAAM,IAAM,KACtD/B,KAAKC,IAAI,EAAGD,KAAKE,IAAI,IAAKF,KAAK4W,MAAM3R,KAAKhD,IAAM,IAAM,KACtDjC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,IAAKF,KAAK4W,MAAM3R,KAAK5D,IAAM,KACzC,IAANN,EAAU,IAAM,KAAOA,EAAI,KAGpC,SAAS2V,EAAI3W,GAEX,QADAA,EAAQC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,IAAKF,KAAK4W,MAAM7W,IAAU,KACvC,GAAK,IAAM,IAAMA,EAAM+D,SAAS,IAGlD,SAASuS,EAAKQ,EAAGC,EAAGf,EAAGhV,GAIrB,OAHIA,GAAK,EAAG8V,EAAIC,EAAIf,EAAI9L,IACf8L,GAAK,GAAKA,GAAK,EAAGc,EAAIC,EAAI7M,IAC1B6M,GAAK,IAAGD,EAAI5M,KACd,IAAI8M,EAAIF,EAAGC,EAAGf,EAAGhV,GAGnB,SAASiW,EAAW5Q,GACzB,GAAIA,aAAa2Q,EAAK,OAAO,IAAIA,EAAI3Q,EAAEyQ,EAAGzQ,EAAE0Q,EAAG1Q,EAAE2P,EAAG3P,EAAElE,SAEtD,GADMkE,aAAasF,IAAQtF,EAAIzE,EAAMyE,KAChCA,EAAG,OAAO,IAAI2Q,EACnB,GAAI3Q,aAAa2Q,EAAK,OAAO3Q,EAE7B,IAAIrE,GADJqE,EAAIA,EAAExE,OACIG,EAAI,IACVE,EAAImE,EAAEnE,EAAI,IACVZ,EAAI+E,EAAE/E,EAAI,IACVnB,EAAMF,KAAKE,IAAI6B,EAAGE,EAAGZ,GACrBpB,EAAMD,KAAKC,IAAI8B,EAAGE,EAAGZ,GACrBwV,EAAI5M,IACJ6M,EAAI7W,EAAMC,EACV6V,GAAK9V,EAAMC,GAAO,EAUtB,OATI4W,GACaD,EAAX9U,IAAM9B,GAAUgC,EAAIZ,GAAKyV,EAAc,GAAT7U,EAAIZ,GAC7BY,IAAMhC,GAAUoB,EAAIU,GAAK+U,EAAI,GAC5B/U,EAAIE,GAAK6U,EAAI,EACvBA,GAAKf,EAAI,GAAM9V,EAAMC,EAAM,EAAID,EAAMC,EACrC2W,GAAK,IAELC,EAAIf,EAAI,GAAKA,EAAI,EAAI,EAAIc,EAEpB,IAAIE,EAAIF,EAAGC,EAAGf,EAAG3P,EAAElE,SAO5B,SAAS6U,EAAIF,EAAGC,EAAGf,EAAG7T,GACpB+C,KAAK4R,GAAKA,EACV5R,KAAK6R,GAAKA,EACV7R,KAAK8Q,GAAKA,EACV9Q,KAAK/C,SAAWA,EAyClB,SAAS+U,EAAQJ,EAAGK,EAAIC,GACtB,OAGY,KAHJN,EAAI,GAAKK,GAAMC,EAAKD,GAAML,EAAI,GAChCA,EAAI,IAAMM,EACVN,EAAI,IAAMK,GAAMC,EAAKD,IAAO,IAAML,GAAK,GACvCK,GAxMRE,EAAO1L,EAAO/J,EAAO,CACnB0V,KAAM,SAASC,GACb,OAAO/L,OAAOgM,OAAO,IAAItS,KAAKkG,YAAalG,KAAMqS,IAEnDE,YAAa,WACX,OAAOvS,KAAKrD,MAAM4V,eAEpBd,IAAKf,EACLC,UAAWD,EACX8B,UASF,WACE,OAAOT,EAAW/R,MAAMwS,aATxB3B,UAAWD,EACX/R,SAAU+R,IA6DZuB,EAAOjB,EAAKvU,EAAKyJ,EAAOK,EAAO,CAC7BgM,SAAU,SAASnU,GAEjB,OADAA,EAAS,MAALA,EA9Oc,EADF,GA+OWvD,KAAKsB,IA9Od,EADF,GA+O8BiC,GACvC,IAAI4S,EAAIlR,KAAKlD,EAAIwB,EAAG0B,KAAKhD,EAAIsB,EAAG0B,KAAK5D,EAAIkC,EAAG0B,KAAK/C,UAE1DyV,OAAQ,SAASpU,GAEf,OADAA,EAAS,MAALA,EAnPY,GAmPSvD,KAAKsB,IAnPd,GAmP0BiC,GACnC,IAAI4S,EAAIlR,KAAKlD,EAAIwB,EAAG0B,KAAKhD,EAAIsB,EAAG0B,KAAK5D,EAAIkC,EAAG0B,KAAK/C,UAE1DN,IAAK,WACH,OAAOqD,MAETuS,YAAa,WACX,OAAS,IAAOvS,KAAKlD,GAAKkD,KAAKlD,EAAI,QAC1B,IAAOkD,KAAKhD,GAAKgD,KAAKhD,EAAI,QAC1B,IAAOgD,KAAK5D,GAAK4D,KAAK5D,EAAI,OAC3B,GAAK4D,KAAK/C,SAAW+C,KAAK/C,SAAW,GAE/CwU,IAAKD,EACLb,UAAWa,EACXX,UAAWa,EACX7S,SAAU6S,KAiEZS,EAAOL,GAXA,SAAaF,EAAGC,EAAGf,EAAG7T,GAC3B,OAA4B,IAArBsU,UAAUhU,OAAewU,EAAWH,GAAK,IAAIE,EAAIF,EAAGC,EAAGf,EAAc,MAAX7T,EAAkB,EAAIA,KAUxEmJ,EAAOK,EAAO,CAC7BgM,SAAU,SAASnU,GAEjB,OADAA,EAAS,MAALA,EApUc,EADF,GAqUWvD,KAAKsB,IApUd,EADF,GAqU8BiC,GACvC,IAAIwT,EAAI9R,KAAK4R,EAAG5R,KAAK6R,EAAG7R,KAAK8Q,EAAIxS,EAAG0B,KAAK/C,UAElDyV,OAAQ,SAASpU,GAEf,OADAA,EAAS,MAALA,EAzUY,GAyUSvD,KAAKsB,IAzUd,GAyU0BiC,GACnC,IAAIwT,EAAI9R,KAAK4R,EAAG5R,KAAK6R,EAAG7R,KAAK8Q,EAAIxS,EAAG0B,KAAK/C,UAElDN,IAAK,WACH,IAAIiV,EAAI5R,KAAK4R,EAAI,IAAqB,KAAd5R,KAAK4R,EAAI,GAC7BC,EAAIrV,MAAMoV,IAAMpV,MAAMwD,KAAK6R,GAAK,EAAI7R,KAAK6R,EACzCf,EAAI9Q,KAAK8Q,EACToB,EAAKpB,GAAKA,EAAI,GAAMA,EAAI,EAAIA,GAAKe,EACjCI,EAAK,EAAInB,EAAIoB,EACjB,OAAO,IAAIhB,EACTc,EAAQJ,GAAK,IAAMA,EAAI,IAAMA,EAAI,IAAKK,EAAIC,GAC1CF,EAAQJ,EAAGK,EAAIC,GACfF,EAAQJ,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAKK,EAAIC,GACzClS,KAAK/C,UAGTsV,YAAa,WACX,OAAQ,GAAKvS,KAAK6R,GAAK7R,KAAK6R,GAAK,GAAKrV,MAAMwD,KAAK6R,KACzC,GAAK7R,KAAK8Q,GAAK9Q,KAAK8Q,GAAK,GACzB,GAAK9Q,KAAK/C,SAAW+C,KAAK/C,SAAW,GAE/CuV,UAAW,WACT,IAAI1W,EAAIkE,KAAK/C,QACb,OAAc,KADQnB,EAAIU,MAAMV,GAAK,EAAIf,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGa,KAC/C,OAAS,UACpBkE,KAAK4R,GAAK,GAAK,KACA,KAAf5R,KAAK6R,GAAK,GAAW,MACN,KAAf7R,KAAK8Q,GAAK,GAAW,KACf,IAANhV,EAAU,IAAM,KAAOA,EAAI,U,kCCxWvB,aAAS+B,GACtB,OAAOA,I,kCCDT,gRAAO,IAAIqE,EAAU,KAEVyQ,EAAK5X,KAAK6X,GAGVC,EAAW,EAALF,EAENG,EAAU,IAAMH,EAChBI,EAAUJ,EAAK,IAEfvX,EAAML,KAAKK,IAGX4X,GAFOjY,KAAKkY,KACJlY,KAAKmY,MACPnY,KAAKiY,KAMXG,GALOpY,KAAKqY,KACNrY,KAAKsY,IACHtY,KAAKG,MACPH,KAAKuY,IACLvY,KAAKsB,IACLtB,KAAKoY,KAEXI,GADOxY,KAAKyE,KACLzE,KAAKwY,MACNxY,KAAKgV,K,sGCtBf,IAAIpS,EAAQH,MAAM0C,UAAUvC,MCApB,WAASE,GACtB,OAAOA,GCQT,SAAS2V,EAAW3V,GAClB,MAAO,cAAgBA,EAAI,IAAO,MAGpC,SAAS4V,EAAWvX,GAClB,MAAO,gBAAkBA,EAAI,IAAO,IAGtC,SAASqC,EAAOmV,GACd,OAAO,SAAS3X,GACd,OAAQ2X,EAAM3X,IAIlB,SAAS4X,EAAOD,GACd,IAAIE,EAAS7Y,KAAKC,IAAI,EAAG0Y,EAAMG,YAAc,GAAK,EAElD,OADIH,EAAM/B,UAASiC,EAAS7Y,KAAK4W,MAAMiC,IAChC,SAAS7X,GACd,OAAQ2X,EAAM3X,GAAK6X,GAIvB,SAASE,IACP,OAAQ9T,KAAK+T,OAGf,SAASC,EAAKC,EAAQP,GACpB,IAAIQ,EAAgB,GAChBC,EAAa,KACbC,EAAa,KACbC,EAAgB,EAChBC,EAAgB,EAChBC,EAAc,EACdjW,EAvCI,IAuCA2V,GApCC,IAoCiBA,GAAmB,EAAI,EAC7CpW,EArCK,IAqCDoW,GAvCE,IAuCiBA,EAAmB,IAAM,IAChDO,EAzCI,IAyCQP,GAvCL,IAuCuBA,EAAoBT,EAAaC,EAEnE,SAASO,EAAKS,GACZ,IAAIhX,EAAuB,MAAd0W,EAAsBT,EAAMgB,MAAQhB,EAAMgB,MAAMC,MAAMjB,EAAOQ,GAAiBR,EAAMkB,SAAYT,EACzG/T,EAAuB,MAAdgU,EAAsBV,EAAMU,WAAaV,EAAMU,WAAWO,MAAMjB,EAAOQ,GAAiBW,EAAYT,EAC7GU,EAAU/Z,KAAKC,IAAIqZ,EAAe,GAAKE,EACvCQ,EAAQrB,EAAMqB,QACdC,GAAUD,EAAM,GAAK,GACrBE,GAAUF,EAAMA,EAAMxX,OAAS,GAAK,GACpC2X,GAAYxB,EAAMG,UAAYF,EAASpV,GAAQmV,EAAMtB,QACrD+C,EAAYV,EAAQU,UAAYV,EAAQU,YAAcV,EACtDW,EAAOD,EAAUE,UAAU,WAAWC,KAAK,CAAC,OAC5CC,EAAOJ,EAAUE,UAAU,SAASC,KAAK7X,EAAQiW,GAAO8B,QACxDC,EAAWF,EAAKG,OAChBC,EAAYJ,EAAKK,QAAQC,OAAO,KAAKC,KAAK,QAAS,QACnD3R,EAAOoR,EAAKQ,OAAO,QACnBC,EAAOT,EAAKQ,OAAO,QAEvBX,EAAOA,EAAK1P,MAAM0P,EAAKQ,QAAQK,OAAO,OAAQ,SACzCH,KAAK,QAAS,UACdA,KAAK,SAAU,iBAEpBP,EAAOA,EAAK7P,MAAMiQ,GAElBxR,EAAOA,EAAKuB,MAAMiQ,EAAUE,OAAO,QAC9BC,KAAK,SAAU,gBACfA,KAAKjY,EAAI,IAAKS,EAAI+V,IAEvB2B,EAAOA,EAAKtQ,MAAMiQ,EAAUE,OAAO,QAC9BC,KAAK,OAAQ,gBACbA,KAAKjY,EAAGS,EAAIwW,GACZgB,KAAK,KAxEJ,IAwEU7B,EAAiB,MAtExB,IAsEgCA,EAAoB,SAAW,WAEpEQ,IAAYU,IACdC,EAAOA,EAAKc,WAAWzB,GACvBc,EAAOA,EAAKW,WAAWzB,GACvBtQ,EAAOA,EAAK+R,WAAWzB,GACvBuB,EAAOA,EAAKE,WAAWzB,GAEvBgB,EAAWA,EAASS,WAAWzB,GAC1BqB,KAAK,UA7EF,MA8EHA,KAAK,aAAa,SAAS/Z,GAAK,OAAOoa,SAASpa,EAAImZ,EAASnZ,IAAMyY,EAAUzY,GAAKiE,KAAKoW,aAAa,gBAEzGT,EACKG,KAAK,UAjFF,MAkFHA,KAAK,aAAa,SAAS/Z,GAAK,IAAIuF,EAAItB,KAAKqW,WAAWtC,OAAQ,OAAOS,EAAUlT,GAAK6U,SAAS7U,EAAIA,EAAEvF,IAAMuF,EAAI4T,EAASnZ,QAG/H0Z,EAASa,SAETlB,EACKU,KAAK,IAzFH,IAyFQ7B,GA3FP,GA2F0BA,EACvBK,EAAgB,IAAMhW,EAAIgW,EAAgB,IAAMU,EAAS,QAAUC,EAAS,IAAM3W,EAAIgW,EAAgB,QAAUU,EAAS,IAAMC,EAC/HX,EAAgB,IAAMU,EAAS,IAAM1W,EAAIgW,EAAgB,QAAUW,EAAS,IAAM3W,EAAIgW,EAAgB,IAAMU,EAAS,QAAUC,GAE1IM,EACKO,KAAK,UAAW,GAChBA,KAAK,aAAa,SAAS/Z,GAAK,OAAOyY,EAAUU,EAASnZ,OAE/DoI,EACK2R,KAAKjY,EAAI,IAAKS,EAAI+V,GAEvB2B,EACKF,KAAKjY,EAAGS,EAAIwW,GACZkB,KAAK5V,GAEV+U,EAAUoB,OAAOzC,GACZgC,KAAK,OAAQ,QACbA,KAAK,YAAa,IAClBA,KAAK,cAAe,cACpBA,KAAK,cA9GF,IA8GiB7B,EAAmB,QA5GrC,IA4G+CA,EAAkB,MAAQ,UAEhFkB,EACKqB,MAAK,WAAaxW,KAAK+T,OAASmB,KAuCvC,OApCAlB,EAAKN,MAAQ,SAAS+C,GACpB,OAAOlF,UAAUhU,QAAUmW,EAAQ+C,EAAGzC,GAAQN,GAGhDM,EAAKU,MAAQ,WACX,OAAOR,EAAgBvW,EAAM+Y,KAAKnF,WAAYyC,GAGhDA,EAAKE,cAAgB,SAASuC,GAC5B,OAAOlF,UAAUhU,QAAU2W,EAAqB,MAALuC,EAAY,GAAK9Y,EAAM+Y,KAAKD,GAAIzC,GAAQE,EAAcvW,SAGnGqW,EAAKG,WAAa,SAASsC,GACzB,OAAOlF,UAAUhU,QAAU4W,EAAkB,MAALsC,EAAY,KAAO9Y,EAAM+Y,KAAKD,GAAIzC,GAAQG,GAAcA,EAAWxW,SAG7GqW,EAAKI,WAAa,SAASqC,GACzB,OAAOlF,UAAUhU,QAAU6W,EAAaqC,EAAGzC,GAAQI,GAGrDJ,EAAK2C,SAAW,SAASF,GACvB,OAAOlF,UAAUhU,QAAU8W,EAAgBC,GAAiBmC,EAAGzC,GAAQK,GAGzEL,EAAKK,cAAgB,SAASoC,GAC5B,OAAOlF,UAAUhU,QAAU8W,GAAiBoC,EAAGzC,GAAQK,GAGzDL,EAAKM,cAAgB,SAASmC,GAC5B,OAAOlF,UAAUhU,QAAU+W,GAAiBmC,EAAGzC,GAAQM,GAGzDN,EAAKO,YAAc,SAASkC,GAC1B,OAAOlF,UAAUhU,QAAUgX,GAAekC,EAAGzC,GAAQO,GAGhDP,EAWF,SAAS4C,EAAWlD,GACzB,OAAOM,EAnKI,EAmKSN,GAGf,SAASmD,EAASnD,GACvB,OAAOM,EAtKE,EAsKSN,K,kCC5KpB,gBAEI9Q,EAAKkU,IACLjU,EAAKD,EACLE,GAAMF,EACNG,EAAKD,EAELiU,EAAe,CACjBjW,MAYF,SAAqBjD,EAAG3B,GAClB2B,EAAI+E,IAAIA,EAAK/E,GACbA,EAAIiF,IAAIA,EAAKjF,GACb3B,EAAI2G,IAAIA,EAAK3G,GACbA,EAAI6G,IAAIA,EAAK7G,IAfjBiG,UAAWqC,IACXpC,QAASoC,IACTS,aAAcT,IACdU,WAAYV,IACZK,OAAQ,WACN,IAAImS,EAAS,CAAC,CAACpU,EAAIC,GAAK,CAACC,EAAIC,IAE7B,OADAD,EAAKC,IAAOF,EAAKD,EAAKkU,KACfE,IAWID,O,mXC3BR,I,YCAHvS,EAAO,CAAC1J,MAAO,cAEnB,SAASmc,IACP,IAAK,IAAyCjb,EAArCqB,EAAI,EAAGC,EAAIiU,UAAUhU,OAAQkZ,EAAI,GAAOpZ,EAAIC,IAAKD,EAAG,CAC3D,KAAMrB,EAAIuV,UAAUlU,GAAK,KAAQrB,KAAKya,GAAM,QAAQS,KAAKlb,GAAI,MAAM,IAAIoD,MAAM,iBAAmBpD,GAChGya,EAAEza,GAAK,GAET,OAAO,IAAImb,EAASV,GAGtB,SAASU,EAASV,GAChBzW,KAAKyW,EAAIA,EAGX,SAASW,EAAeC,EAAWC,GACjC,OAAOD,EAAUvX,OAAOyX,MAAM,SAASC,KAAI,SAASxb,GAClD,IAAIyb,EAAO,GAAIpa,EAAIrB,EAAE0b,QAAQ,KAE7B,GADIra,GAAK,IAAGoa,EAAOzb,EAAE2B,MAAMN,EAAI,GAAIrB,EAAIA,EAAE2B,MAAM,EAAGN,IAC9CrB,IAAMsb,EAAMjG,eAAerV,GAAI,MAAM,IAAIoD,MAAM,iBAAmBpD,GACtE,MAAO,CAAC+D,KAAM/D,EAAGyb,KAAMA,MA6C3B,SAASE,EAAI5X,EAAM0X,GACjB,IAAK,IAA4B/Z,EAAxBL,EAAI,EAAGC,EAAIyC,EAAKxC,OAAWF,EAAIC,IAAKD,EAC3C,IAAKK,EAAIqC,EAAK1C,IAAIoa,OAASA,EACzB,OAAO/Z,EAAE5C,MAKf,SAAS8c,EAAI7X,EAAM0X,EAAMI,GACvB,IAAK,IAAIxa,EAAI,EAAGC,EAAIyC,EAAKxC,OAAQF,EAAIC,IAAKD,EACxC,GAAI0C,EAAK1C,GAAGoa,OAASA,EAAM,CACzB1X,EAAK1C,GAAKmH,EAAMzE,EAAOA,EAAKpC,MAAM,EAAGN,GAAGsH,OAAO5E,EAAKpC,MAAMN,EAAI,IAC9D,MAIJ,OADgB,MAAZwa,GAAkB9X,EAAKsC,KAAK,CAACoV,KAAMA,EAAM3c,MAAO+c,IAC7C9X,EAzDToX,EAASjX,UAAY+W,EAAS/W,UAAY,CACxCgG,YAAaiR,EACbW,GAAI,SAASC,EAAUF,GACrB,IAEI7b,EAFAya,EAAIzW,KAAKyW,EACTuB,EAAIZ,EAAeW,EAAW,GAAItB,GAElCpZ,GAAK,EACLC,EAAI0a,EAAEza,OAGV,KAAIgU,UAAUhU,OAAS,GAAvB,CAOA,GAAgB,MAAZsa,GAAwC,mBAAbA,EAAyB,MAAM,IAAIzY,MAAM,qBAAuByY,GAC/F,OAASxa,EAAIC,GACX,GAAItB,GAAK+b,EAAWC,EAAE3a,IAAI0C,KAAM0W,EAAEza,GAAK4b,EAAInB,EAAEza,GAAI+b,EAASN,KAAMI,QAC3D,GAAgB,MAAZA,EAAkB,IAAK7b,KAAKya,EAAGA,EAAEza,GAAK4b,EAAInB,EAAEza,GAAI+b,EAASN,KAAM,MAG1E,OAAOzX,KAZL,OAAS3C,EAAIC,GAAG,IAAKtB,GAAK+b,EAAWC,EAAE3a,IAAI0C,QAAU/D,EAAI2b,EAAIlB,EAAEza,GAAI+b,EAASN,OAAQ,OAAOzb,GAc/FoW,KAAM,WACJ,IAAIA,EAAO,GAAIqE,EAAIzW,KAAKyW,EACxB,IAAK,IAAIza,KAAKya,EAAGrE,EAAKpW,GAAKya,EAAEza,GAAG2B,QAChC,OAAO,IAAIwZ,EAAS/E,IAEtBsE,KAAM,SAAS3W,EAAMkY,GACnB,IAAK3a,EAAIiU,UAAUhU,OAAS,GAAK,EAAG,IAAK,IAAgCD,EAAGtB,EAA/Bkc,EAAO,IAAI1a,MAAMF,GAAID,EAAI,EAASA,EAAIC,IAAKD,EAAG6a,EAAK7a,GAAKkU,UAAUlU,EAAI,GACnH,IAAK2C,KAAKyW,EAAEpF,eAAetR,GAAO,MAAM,IAAIX,MAAM,iBAAmBW,GACrE,IAAuB1C,EAAI,EAAGC,GAAzBtB,EAAIgE,KAAKyW,EAAE1W,IAAoBxC,OAAQF,EAAIC,IAAKD,EAAGrB,EAAEqB,GAAGvC,MAAM6Z,MAAMsD,EAAMC,IAEjFvD,MAAO,SAAS5U,EAAMkY,EAAMC,GAC1B,IAAKlY,KAAKyW,EAAEpF,eAAetR,GAAO,MAAM,IAAIX,MAAM,iBAAmBW,GACrE,IAAK,IAAI/D,EAAIgE,KAAKyW,EAAE1W,GAAO1C,EAAI,EAAGC,EAAItB,EAAEuB,OAAQF,EAAIC,IAAKD,EAAGrB,EAAEqB,GAAGvC,MAAM6Z,MAAMsD,EAAMC,KAuBxEjB,QCnFf,SAASkB,KAEM,eAASC,GACtB,OAAmB,MAAZA,EAAmBD,EAAO,WAC/B,OAAOnY,KAAKqY,cAAcD,KCJ9B,SAASE,IACP,MAAO,GAGM,eAASF,GACtB,OAAmB,MAAZA,EAAmBE,EAAQ,WAChC,OAAOtY,KAAKuY,iBAAiBH,KCNlB,WAASA,GACtB,OAAO,WACL,OAAOpY,KAAKwY,QAAQJ,KCFT,WAASK,GACtB,OAAO,IAAIjb,MAAMib,EAAOlb,SCMnB,SAASmb,EAAUrS,EAAQsS,GAChC3Y,KAAK4Y,cAAgBvS,EAAOuS,cAC5B5Y,KAAK6Y,aAAexS,EAAOwS,aAC3B7Y,KAAK8Y,MAAQ,KACb9Y,KAAK+Y,QAAU1S,EACfrG,KAAKgZ,SAAWL,EAGlBD,EAAUxY,UAAY,CACpBgG,YAAawS,EACbO,YAAa,SAASC,GAAS,OAAOlZ,KAAK+Y,QAAQI,aAAaD,EAAOlZ,KAAK8Y,QAC5EK,aAAc,SAASD,EAAOE,GAAQ,OAAOpZ,KAAK+Y,QAAQI,aAAaD,EAAOE,IAC9Ef,cAAe,SAASD,GAAY,OAAOpY,KAAK+Y,QAAQV,cAAcD,IACtEG,iBAAkB,SAASH,GAAY,OAAOpY,KAAK+Y,QAAQR,iBAAiBH,KCd9E,SAASiB,EAAUhT,EAAQiT,EAAO1D,EAAO6C,EAAQ/C,EAAMJ,GASrD,IARA,IACIiE,EADAlc,EAAI,EAEJmc,EAAcF,EAAM/b,OACpBkc,EAAanE,EAAK/X,OAKfF,EAAIoc,IAAcpc,GACnBkc,EAAOD,EAAMjc,KACfkc,EAAKP,SAAW1D,EAAKjY,GACrBob,EAAOpb,GAAKkc,GAEZ3D,EAAMvY,GAAK,IAAIqb,EAAUrS,EAAQiP,EAAKjY,IAK1C,KAAOA,EAAImc,IAAenc,GACpBkc,EAAOD,EAAMjc,MACfqY,EAAKrY,GAAKkc,GAKhB,SAASG,EAAQrT,EAAQiT,EAAO1D,EAAO6C,EAAQ/C,EAAMJ,EAAM9O,GACzD,IAAInJ,EACAkc,EAKAI,EAJAC,EAAiB,GACjBJ,EAAcF,EAAM/b,OACpBkc,EAAanE,EAAK/X,OAClBsc,EAAY,IAAIrc,MAAMgc,GAK1B,IAAKnc,EAAI,EAAGA,EAAImc,IAAenc,GACzBkc,EAAOD,EAAMjc,MACfwc,EAAUxc,GAAKsc,EAzCL,IAyC4BnT,EAAIkQ,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,GACnEK,KAAYC,EACdlE,EAAKrY,GAAKkc,EAEVK,EAAeD,GAAYJ,GAQjC,IAAKlc,EAAI,EAAGA,EAAIoc,IAAcpc,GAExBkc,EAAOK,EADXD,EAtDY,IAsDWnT,EAAIkQ,KAAKrQ,EAAQiP,EAAKjY,GAAIA,EAAGiY,MAElDmD,EAAOpb,GAAKkc,EACZA,EAAKP,SAAW1D,EAAKjY,GACrBuc,EAAeD,GAAY,MAE3B/D,EAAMvY,GAAK,IAAIqb,EAAUrS,EAAQiP,EAAKjY,IAK1C,IAAKA,EAAI,EAAGA,EAAImc,IAAenc,GACxBkc,EAAOD,EAAMjc,KAAQuc,EAAeC,EAAUxc,MAAQkc,IACzD7D,EAAKrY,GAAKkc,GClDhB,SAASO,EAAUhe,EAAGM,GACpB,OAAON,EAAIM,GAAK,EAAIN,EAAIM,EAAI,EAAIN,GAAKM,EAAI,EAAI4I,ICtBhC,ICAJ+U,EAAQ,+BAEJ,GACbC,IAAK,6BACLD,MAAOA,EACPE,MAAO,+BACPC,IAAK,uCACLC,MAAO,iCCLM,WAAS1C,GACtB,IAAI2C,EAAS3C,GAAQ,GAAIpa,EAAI+c,EAAO1C,QAAQ,KAE5C,OADIra,GAAK,GAAqC,WAA/B+c,EAAS3C,EAAK9Z,MAAM,EAAGN,MAAiBoa,EAAOA,EAAK9Z,MAAMN,EAAI,IACtEgd,EAAWhJ,eAAe+I,GAAU,CAACE,MAAOD,EAAWD,GAASG,MAAO9C,GAAQA,GCHxF,SAAS+C,EAAW/C,GAClB,OAAO,WACLzX,KAAKya,gBAAgBhD,IAIzB,SAASiD,EAAaC,GACpB,OAAO,WACL3a,KAAK4a,kBAAkBD,EAASL,MAAOK,EAASJ,QAIpD,SAASM,EAAapD,EAAM3c,GAC1B,OAAO,WACLkF,KAAK8a,aAAarD,EAAM3c,IAI5B,SAASigB,EAAeJ,EAAU7f,GAChC,OAAO,WACLkF,KAAKgb,eAAeL,EAASL,MAAOK,EAASJ,MAAOzf,IAIxD,SAASmgB,EAAaxD,EAAM3c,GAC1B,OAAO,WACL,IAAIuG,EAAIvG,EAAM6Z,MAAM3U,KAAMuR,WACjB,MAALlQ,EAAWrB,KAAKya,gBAAgBhD,GAC/BzX,KAAK8a,aAAarD,EAAMpW,IAIjC,SAAS6Z,EAAeP,EAAU7f,GAChC,OAAO,WACL,IAAIuG,EAAIvG,EAAM6Z,MAAM3U,KAAMuR,WACjB,MAALlQ,EAAWrB,KAAK4a,kBAAkBD,EAASL,MAAOK,EAASJ,OAC1Dva,KAAKgb,eAAeL,EAASL,MAAOK,EAASJ,MAAOlZ,IAI9C,IC1CA,WAASkY,GACtB,OAAQA,EAAKX,eAAiBW,EAAKX,cAAcuC,aACzC5B,EAAK6B,UAAY7B,GAClBA,EAAK4B,aCDd,SAASE,EAAY5D,GACnB,OAAO,WACLzX,KAAKsb,MAAMC,eAAe9D,IAI9B,SAAS+D,EAAc/D,EAAM3c,EAAO2gB,GAClC,OAAO,WACLzb,KAAKsb,MAAMI,YAAYjE,EAAM3c,EAAO2gB,IAIxC,SAASE,EAAclE,EAAM3c,EAAO2gB,GAClC,OAAO,WACL,IAAIpa,EAAIvG,EAAM6Z,MAAM3U,KAAMuR,WACjB,MAALlQ,EAAWrB,KAAKsb,MAAMC,eAAe9D,GACpCzX,KAAKsb,MAAMI,YAAYjE,EAAMpW,EAAGoa,IAalC,SAASG,EAAWrC,EAAM9B,GAC/B,OAAO8B,EAAK+B,MAAMO,iBAAiBpE,IAC5B0D,EAAY5B,GAAMuC,iBAAiBvC,EAAM,MAAMsC,iBAAiBpE,GCjCzE,SAASsE,EAAetE,GACtB,OAAO,kBACEzX,KAAKyX,IAIhB,SAASuE,EAAiBvE,EAAM3c,GAC9B,OAAO,WACLkF,KAAKyX,GAAQ3c,GAIjB,SAASmhB,EAAiBxE,EAAM3c,GAC9B,OAAO,WACL,IAAIuG,EAAIvG,EAAM6Z,MAAM3U,KAAMuR,WACjB,MAALlQ,SAAkBrB,KAAKyX,GACtBzX,KAAKyX,GAAQpW,GChBtB,SAAS6a,EAAW1d,GAClB,OAAOA,EAAOsB,OAAOyX,MAAM,SAG7B,SAAS4E,EAAU5C,GACjB,OAAOA,EAAK4C,WAAa,IAAIC,EAAU7C,GAGzC,SAAS6C,EAAU7C,GACjBvZ,KAAKqc,MAAQ9C,EACbvZ,KAAKsc,OAASJ,EAAW3C,EAAKnD,aAAa,UAAY,IAuBzD,SAASmG,EAAWhD,EAAMiD,GAExB,IADA,IAAIC,EAAON,EAAU5C,GAAOlc,GAAK,EAAGC,EAAIkf,EAAMjf,SACrCF,EAAIC,GAAGmf,EAAKC,IAAIF,EAAMnf,IAGjC,SAASsf,EAAcpD,EAAMiD,GAE3B,IADA,IAAIC,EAAON,EAAU5C,GAAOlc,GAAK,EAAGC,EAAIkf,EAAMjf,SACrCF,EAAIC,GAAGmf,EAAKnG,OAAOkG,EAAMnf,IAGpC,SAASuf,EAAYJ,GACnB,OAAO,WACLD,EAAWvc,KAAMwc,IAIrB,SAASK,EAAaL,GACpB,OAAO,WACLG,EAAc3c,KAAMwc,IAIxB,SAASM,EAAgBN,EAAO1hB,GAC9B,OAAO,YACJA,EAAM6Z,MAAM3U,KAAMuR,WAAagL,EAAaI,GAAe3c,KAAMwc,IA5CtEJ,EAAUlc,UAAY,CACpBwc,IAAK,SAASjF,GACJzX,KAAKsc,OAAO5E,QAAQD,GACpB,IACNzX,KAAKsc,OAAOja,KAAKoV,GACjBzX,KAAKqc,MAAMvB,aAAa,QAAS9a,KAAKsc,OAAOS,KAAK,QAGtDzG,OAAQ,SAASmB,GACf,IAAIpa,EAAI2C,KAAKsc,OAAO5E,QAAQD,GACxBpa,GAAK,IACP2C,KAAKsc,OAAOU,OAAO3f,EAAG,GACtB2C,KAAKqc,MAAMvB,aAAa,QAAS9a,KAAKsc,OAAOS,KAAK,QAGtDE,SAAU,SAASxF,GACjB,OAAOzX,KAAKsc,OAAO5E,QAAQD,IAAS,IC7BxC,SAASyF,IACPld,KAAKmd,YAAc,GAGrB,SAASC,EAAatiB,GACpB,OAAO,WACLkF,KAAKmd,YAAcriB,GAIvB,SAASuiB,EAAaviB,GACpB,OAAO,WACL,IAAIuG,EAAIvG,EAAM6Z,MAAM3U,KAAMuR,WAC1BvR,KAAKmd,YAAmB,MAAL9b,EAAY,GAAKA,GCbxC,SAASic,IACPtd,KAAKud,UAAY,GAGnB,SAASC,EAAa1iB,GACpB,OAAO,WACLkF,KAAKud,UAAYziB,GAIrB,SAAS2iB,EAAa3iB,GACpB,OAAO,WACL,IAAIuG,EAAIvG,EAAM6Z,MAAM3U,KAAMuR,WAC1BvR,KAAKud,UAAiB,MAALlc,EAAY,GAAKA,GCbtC,SAASqc,IACH1d,KAAK2d,aAAa3d,KAAKqW,WAAW4C,YAAYjZ,MCDpD,SAAS4d,IACH5d,KAAK6d,iBAAiB7d,KAAKqW,WAAW8C,aAAanZ,KAAMA,KAAKqW,WAAWyH,YCE/E,SAASC,GAAetG,GACtB,OAAO,WACL,IAAI2D,EAAWpb,KAAK4Y,cAChBoF,EAAMhe,KAAK6Y,aACf,OAAOmF,IAAQjE,GAASqB,EAAS6C,gBAAgBpF,eAAiBkB,EAC5DqB,EAAS8C,cAAczG,GACvB2D,EAAS+C,gBAAgBH,EAAKvG,IAIxC,SAAS2G,GAAazD,GACpB,OAAO,WACL,OAAO3a,KAAK4Y,cAAcuF,gBAAgBxD,EAASL,MAAOK,EAASJ,QAIxD,gBAAS9C,GACtB,IAAIkD,EAAW0D,EAAU5G,GACzB,OAAQkD,EAASJ,MACX6D,GACAL,IAAgBpD,ICpBxB,SAAS2D,KACP,OAAO,KCJT,SAAShI,KACP,IAAIjQ,EAASrG,KAAKqW,WACdhQ,GAAQA,EAAOkY,YAAYve,MCFjC,SAASwe,KACP,IAAIC,EAAQze,KAAK0e,WAAU,GAAQrY,EAASrG,KAAKqW,WACjD,OAAOhQ,EAASA,EAAO8S,aAAasF,EAAOze,KAAK2d,aAAec,EAGjE,SAASE,KACP,IAAIF,EAAQze,KAAK0e,WAAU,GAAOrY,EAASrG,KAAKqW,WAChD,OAAOhQ,EAASA,EAAO8S,aAAasF,EAAOze,KAAK2d,aAAec,EAGlD,ICVXG,GAAe,GAERC,GAAQ,KAEK,oBAAbzD,WAEH,iBADQA,SAAS6C,kBAErBW,GAAe,CAACE,WAAY,YAAaC,WAAY,cAIzD,SAASC,GAAsBC,EAAUC,EAAO5F,GAE9C,OADA2F,EAAWE,GAAgBF,EAAUC,EAAO5F,GACrC,SAASuF,GACd,IAAIO,EAAUP,EAAMQ,cACfD,IAAYA,IAAYpf,MAAkD,EAAxCof,EAAQE,wBAAwBtf,QACrEif,EAASvI,KAAK1W,KAAM6e,IAK1B,SAASM,GAAgBF,EAAUC,EAAO5F,GACxC,OAAO,SAASiG,GACd,IAAIC,EAASX,GACbA,GAAQU,EACR,IACEN,EAASvI,KAAK1W,KAAMA,KAAKgZ,SAAUkG,EAAO5F,GAC3C,QACCuF,GAAQW,IAKd,SAASpI,GAAeC,GACtB,OAAOA,EAAUvX,OAAOyX,MAAM,SAASC,KAAI,SAASxb,GAClD,IAAIyb,EAAO,GAAIpa,EAAIrB,EAAE0b,QAAQ,KAE7B,OADIra,GAAK,IAAGoa,EAAOzb,EAAE2B,MAAMN,EAAI,GAAIrB,EAAIA,EAAE2B,MAAM,EAAGN,IAC3C,CAAC0C,KAAM/D,EAAGyb,KAAMA,MAI3B,SAASgI,GAAS1H,GAChB,OAAO,WACL,IAAID,EAAK9X,KAAK0f,KACd,GAAK5H,EAAL,CACA,IAAK,IAAkC3W,EAA9BkE,EAAI,EAAGhI,GAAK,EAAGkH,EAAIuT,EAAGva,OAAW8H,EAAId,IAAKc,EAC7ClE,EAAI2W,EAAGzS,GAAM0S,EAAShY,MAAQoB,EAAEpB,OAASgY,EAAShY,MAASoB,EAAEsW,OAASM,EAASN,KAGjFK,IAAKza,GAAK8D,EAFVnB,KAAK2f,oBAAoBxe,EAAEpB,KAAMoB,EAAE8d,SAAU9d,EAAEye,WAK7CviB,EAAGya,EAAGva,OAASF,SACT2C,KAAK0f,OAIrB,SAASG,GAAM9H,EAAUjd,EAAO8kB,GAC9B,IAAIE,EAAOlB,GAAavN,eAAe0G,EAAShY,MAAQif,GAAwBG,GAChF,OAAO,SAASpjB,EAAGsB,EAAGic,GACpB,IAAoBnY,EAAhB2W,EAAK9X,KAAK0f,KAAST,EAAWa,EAAKhlB,EAAOuC,EAAGic,GACjD,GAAIxB,EAAI,IAAK,IAAIzS,EAAI,EAAGd,EAAIuT,EAAGva,OAAQ8H,EAAId,IAAKc,EAC9C,IAAKlE,EAAI2W,EAAGzS,IAAItF,OAASgY,EAAShY,MAAQoB,EAAEsW,OAASM,EAASN,KAI5D,OAHAzX,KAAK2f,oBAAoBxe,EAAEpB,KAAMoB,EAAE8d,SAAU9d,EAAEye,SAC/C5f,KAAK+f,iBAAiB5e,EAAEpB,KAAMoB,EAAE8d,SAAWA,EAAU9d,EAAEye,QAAUA,QACjEze,EAAErG,MAAQA,GAIdkF,KAAK+f,iBAAiBhI,EAAShY,KAAMkf,EAAUW,GAC/Cze,EAAI,CAACpB,KAAMgY,EAAShY,KAAM0X,KAAMM,EAASN,KAAM3c,MAAOA,EAAOmkB,SAAUA,EAAUW,QAASA,GACrF9H,EACAA,EAAGzV,KAAKlB,GADJnB,KAAK0f,KAAO,CAACve,ICrE1B,SAAS6e,GAAczG,EAAMxZ,EAAMkgB,GACjC,IAAIC,EAAS/E,EAAY5B,GACrBsF,EAAQqB,EAAOC,YAEE,mBAAVtB,EACTA,EAAQ,IAAIA,EAAM9e,EAAMkgB,IAExBpB,EAAQqB,EAAO9E,SAASgF,YAAY,SAChCH,GAAQpB,EAAMwB,UAAUtgB,EAAMkgB,EAAOK,QAASL,EAAOM,YAAa1B,EAAM2B,OAASP,EAAOO,QACvF3B,EAAMwB,UAAUtgB,GAAM,GAAO,IAGpCwZ,EAAKyG,cAAcnB,GAGrB,SAAS4B,GAAiB1gB,EAAMkgB,GAC9B,OAAO,WACL,OAAOD,GAAchgB,KAAMD,EAAMkgB,IAIrC,SAASS,GAAiB3gB,EAAMkgB,GAC9B,OAAO,WACL,OAAOD,GAAchgB,KAAMD,EAAMkgB,EAAOtL,MAAM3U,KAAMuR,aAIzC,ICGJoP,GAAO,CAAC,MAEZ,SAASC,GAAUC,EAAQC,GAChC9gB,KAAK+gB,QAAUF,EACf7gB,KAAKghB,SAAWF,EAGlB,SAAS3L,KACP,OAAO,IAAIyL,GAAU,CAAC,CAACxF,SAAS6C,kBAAmB0C,IAGrDC,GAAU1gB,UAAYiV,GAAUjV,UAAY,CAC1CgG,YAAa0a,GACb7K,OC1Ca,SAASA,GACA,mBAAXA,IAAuBA,EAASqC,EAASrC,IAEpD,IAAK,IAAI8K,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ0jB,EAAY,IAAIzjB,MAAM+G,GAAIc,EAAI,EAAGA,EAAId,IAAKc,EAC3F,IAAK,IAAiFkU,EAAM2H,EAAnF5H,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAQ4jB,EAAWF,EAAU5b,GAAK,IAAI7H,MAAMF,GAAmBD,EAAI,EAAGA,EAAIC,IAAKD,GAC9Gkc,EAAOD,EAAMjc,MAAQ6jB,EAAUnL,EAAOW,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,MAClE,aAAcC,IAAM2H,EAAQlI,SAAWO,EAAKP,UAChDmI,EAAS9jB,GAAK6jB,GAKpB,OAAO,IAAIN,GAAUK,EAAWjhB,KAAKghB,WD+BrC3L,UE3Ca,SAASU,GACA,mBAAXA,IAAuBA,EAASqL,EAAYrL,IAEvD,IAAK,IAAI8K,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ0jB,EAAY,GAAIH,EAAU,GAAIzb,EAAI,EAAGA,EAAId,IAAKc,EAC/F,IAAK,IAAyCkU,EAArCD,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAcF,EAAI,EAAGA,EAAIC,IAAKD,GAC9Dkc,EAAOD,EAAMjc,MACf4jB,EAAU5e,KAAK0T,EAAOW,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,IACnDwH,EAAQze,KAAKkX,IAKnB,OAAO,IAAIqH,GAAUK,EAAWH,IFgChCvK,OG5Ca,SAASrX,GACD,mBAAVA,IAAsBA,EAAQmiB,EAAQniB,IAEjD,IAAK,IAAI2hB,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ0jB,EAAY,IAAIzjB,MAAM+G,GAAIc,EAAI,EAAGA,EAAId,IAAKc,EAC3F,IAAK,IAAuEkU,EAAnED,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAQ4jB,EAAWF,EAAU5b,GAAK,GAAUhI,EAAI,EAAGA,EAAIC,IAAKD,GAC3Fkc,EAAOD,EAAMjc,KAAO6B,EAAMwX,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,IAC1D6H,EAAS9e,KAAKkX,GAKpB,OAAO,IAAIqH,GAAUK,EAAWjhB,KAAKghB,WHkCrC1L,KpB4Ba,SAASxa,EAAO0L,GAC7B,IAAK1L,EAGH,OAFAwa,EAAO,IAAI9X,MAAMwC,KAAKshB,QAASjc,GAAK,EACpCrF,KAAKwW,MAAK,SAASza,GAAKuZ,IAAOjQ,GAAKtJ,KAC7BuZ,EAGT,IwBnFsBzX,ExBmFlB0jB,EAAO/a,EAAMkT,EAAUL,EACvByH,EAAU9gB,KAAKghB,SACfH,EAAS7gB,KAAK+gB,QAEG,mBAAVjmB,IwBvFW+C,ExBuF4B/C,EAAjBA,EwBtF1B,WACL,OAAO+C,IxBuFT,IAAK,IAAI0G,EAAIsc,EAAOtjB,OAAQkb,EAAS,IAAIjb,MAAM+G,GAAIqR,EAAQ,IAAIpY,MAAM+G,GAAImR,EAAO,IAAIlY,MAAM+G,GAAIc,EAAI,EAAGA,EAAId,IAAKc,EAAG,CAC/G,IAAIgB,EAASya,EAAQzb,GACjBiU,EAAQuH,EAAOxb,GACfmU,EAAcF,EAAM/b,OACpB+X,EAAOxa,EAAM4b,KAAKrQ,EAAQA,GAAUA,EAAO2S,SAAU3T,EAAGyb,GACxDrH,EAAanE,EAAK/X,OAClBikB,EAAa5L,EAAMvQ,GAAK,IAAI7H,MAAMic,GAClCgI,EAAchJ,EAAOpT,GAAK,IAAI7H,MAAMic,GAGxC8H,EAAKlb,EAAQiT,EAAOkI,EAAYC,EAFhB/L,EAAKrQ,GAAK,IAAI7H,MAAMgc,GAEoBlE,EAAM9O,GAK9D,IAAK,IAAoBkb,EAAUtI,EAA1BuI,EAAK,EAAGC,EAAK,EAAmBD,EAAKlI,IAAckI,EAC1D,GAAID,EAAWF,EAAWG,GAAK,CAE7B,IADIA,GAAMC,IAAIA,EAAKD,EAAK,KACfvI,EAAOqI,EAAYG,OAAUA,EAAKnI,IAC3CiI,EAAS5I,MAAQM,GAAQ,MAQ/B,OAHAX,EAAS,IAAImI,GAAUnI,EAAQqI,IACxBe,OAASjM,EAChB6C,EAAOqJ,MAAQpM,EACR+C,GoBnEP7C,MrB9Ca,WACb,OAAO,IAAIgL,GAAU5gB,KAAK6hB,QAAU7hB,KAAK+gB,QAAQvJ,IAAIuK,GAAS/hB,KAAKghB,WqB8CnEtL,KK/Ca,WACb,OAAO,IAAIkL,GAAU5gB,KAAK8hB,OAAS9hB,KAAK+gB,QAAQvJ,IAAIuK,GAAS/hB,KAAKghB,WL+ClEjE,KMnDa,SAASiF,EAASC,EAAUC,GACzC,IAAItM,EAAQ5V,KAAK4V,QAAS6C,EAASzY,KAAM0V,EAAO1V,KAAK0V,OAIrD,OAHAE,EAA2B,mBAAZoM,EAAyBA,EAAQpM,GAASA,EAAMC,OAAOmM,EAAU,IAChE,MAAZC,IAAkBxJ,EAASwJ,EAASxJ,IAC1B,MAAVyJ,EAAgBxM,EAAKY,SAAe4L,EAAOxM,GACxCE,GAAS6C,EAAS7C,EAAMlQ,MAAM+S,GAAQjD,QAAUiD,GN+CvD/S,MOlDa,SAASyP,GAEtB,IAAK,IAAIgN,EAAUniB,KAAK+gB,QAASqB,EAAUjN,EAAU4L,QAASsB,EAAKF,EAAQ5kB,OAAQ0U,EAAKmQ,EAAQ7kB,OAAQgH,EAAIxJ,KAAKE,IAAIonB,EAAIpQ,GAAKqQ,EAAS,IAAI9kB,MAAM6kB,GAAKhd,EAAI,EAAGA,EAAId,IAAKc,EACpK,IAAK,IAAmGkU,EAA/FgJ,EAASJ,EAAQ9c,GAAImd,EAASJ,EAAQ/c,GAAI/H,EAAIilB,EAAOhlB,OAAQmI,EAAQ4c,EAAOjd,GAAK,IAAI7H,MAAMF,GAAUD,EAAI,EAAGA,EAAIC,IAAKD,GACxHkc,EAAOgJ,EAAOllB,IAAMmlB,EAAOnlB,MAC7BqI,EAAMrI,GAAKkc,GAKjB,KAAOlU,EAAIgd,IAAMhd,EACfid,EAAOjd,GAAK8c,EAAQ9c,GAGtB,OAAO,IAAIub,GAAU0B,EAAQtiB,KAAKghB,WPqClCxL,MQrDa,WAEb,IAAK,IAAIqL,EAAS7gB,KAAK+gB,QAAS1b,GAAK,EAAGd,EAAIsc,EAAOtjB,SAAU8H,EAAId,GAC/D,IAAK,IAA8DgV,EAA1DD,EAAQuH,EAAOxb,GAAIhI,EAAIic,EAAM/b,OAAS,EAAG6b,EAAOE,EAAMjc,KAAYA,GAAK,IAC1Ekc,EAAOD,EAAMjc,MACX+b,GAA6C,EAArCG,EAAK+F,wBAAwBlG,IAAWA,EAAK/C,WAAW8C,aAAaI,EAAMH,GACvFA,EAAOG,GAKb,OAAOvZ,MR2CPsC,KnBpDa,SAASmgB,GAGtB,SAASC,EAAY5mB,EAAGM,GACtB,OAAON,GAAKM,EAAIqmB,EAAQ3mB,EAAEkd,SAAU5c,EAAE4c,WAAald,GAAKM,EAHrDqmB,IAASA,EAAU3I,GAMxB,IAAK,IAAI+G,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQolB,EAAa,IAAInlB,MAAM+G,GAAIc,EAAI,EAAGA,EAAId,IAAKc,EAAG,CAC/F,IAAK,IAAmFkU,EAA/ED,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAQqlB,EAAYD,EAAWtd,GAAK,IAAI7H,MAAMF,GAAUD,EAAI,EAAGA,EAAIC,IAAKD,GACxGkc,EAAOD,EAAMjc,MACfulB,EAAUvlB,GAAKkc,GAGnBqJ,EAAUtgB,KAAKogB,GAGjB,OAAO,IAAI9B,GAAU+B,EAAY3iB,KAAKghB,UAAUxL,SmBqChDkB,KlBvDa,WACb,IAAImB,EAAWtG,UAAU,GAGzB,OAFAA,UAAU,GAAKvR,KACf6X,EAASlD,MAAM,KAAMpD,WACdvR,MkBoDP6iB,MSxDa,WACb,IAAIA,EAAQ,IAAIrlB,MAAMwC,KAAKshB,QAASjkB,GAAK,EAEzC,OADA2C,KAAKwW,MAAK,WAAaqM,IAAQxlB,GAAK2C,QAC7B6iB,GTsDPtJ,KUzDa,WAEb,IAAK,IAAIsH,EAAS7gB,KAAK+gB,QAAS1b,EAAI,EAAGd,EAAIsc,EAAOtjB,OAAQ8H,EAAId,IAAKc,EACjE,IAAK,IAAIiU,EAAQuH,EAAOxb,GAAIhI,EAAI,EAAGC,EAAIgc,EAAM/b,OAAQF,EAAIC,IAAKD,EAAG,CAC/D,IAAIkc,EAAOD,EAAMjc,GACjB,GAAIkc,EAAM,OAAOA,EAIrB,OAAO,MViDP+H,KW1Da,WACb,IAAIA,EAAO,EAEX,OADAthB,KAAKwW,MAAK,aAAe8K,KAClBA,GXwDPhJ,MY3Da,WACb,OAAQtY,KAAKuZ,QZ2Db/C,Ka5Da,SAASqB,GAEtB,IAAK,IAAIgJ,EAAS7gB,KAAK+gB,QAAS1b,EAAI,EAAGd,EAAIsc,EAAOtjB,OAAQ8H,EAAId,IAAKc,EACjE,IAAK,IAAgDkU,EAA5CD,EAAQuH,EAAOxb,GAAIhI,EAAI,EAAGC,EAAIgc,EAAM/b,OAAcF,EAAIC,IAAKD,GAC9Dkc,EAAOD,EAAMjc,KAAIwa,EAASnB,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,GAI/D,OAAOtZ,MbqDP8V,KfnBa,SAAS2B,EAAM3c,GAC5B,IAAI6f,EAAW0D,EAAU5G,GAEzB,GAAIlG,UAAUhU,OAAS,EAAG,CACxB,IAAIgc,EAAOvZ,KAAKuZ,OAChB,OAAOoB,EAASJ,MACVhB,EAAKuJ,eAAenI,EAASL,MAAOK,EAASJ,OAC7ChB,EAAKnD,aAAauE,GAG1B,OAAO3a,KAAKwW,MAAe,MAAT1b,EACX6f,EAASJ,MAAQG,EAAeF,EAAgC,mBAAV1f,EACtD6f,EAASJ,MAAQW,EAAiBD,EAClCN,EAASJ,MAAQQ,EAAiBF,GAAgBF,EAAU7f,KeOnEwgB,MbxCa,SAAS7D,EAAM3c,EAAO2gB,GACnC,OAAOlK,UAAUhU,OAAS,EACpByC,KAAKwW,MAAe,MAAT1b,EACLugB,EAA+B,mBAAVvgB,EACrB6gB,EACAH,GAAe/D,EAAM3c,EAAmB,MAAZ2gB,EAAmB,GAAKA,IAC1DG,EAAW5b,KAAKuZ,OAAQ9B,IamC9BsL,SZ3Ca,SAAStL,EAAM3c,GAC5B,OAAOyW,UAAUhU,OAAS,EACpByC,KAAKwW,MAAe,MAAT1b,EACPihB,EAAkC,mBAAVjhB,EACxBmhB,EACAD,GAAkBvE,EAAM3c,IAC5BkF,KAAKuZ,OAAO9B,IYsClBuL,QXHa,SAASvL,EAAM3c,GAC5B,IAAI0hB,EAAQN,EAAWzE,EAAO,IAE9B,GAAIlG,UAAUhU,OAAS,EAAG,CAExB,IADA,IAAIkf,EAAON,EAAUnc,KAAKuZ,QAASlc,GAAK,EAAGC,EAAIkf,EAAMjf,SAC5CF,EAAIC,GAAG,IAAKmf,EAAKQ,SAAST,EAAMnf,IAAK,OAAO,EACrD,OAAO,EAGT,OAAO2C,KAAKwW,MAAuB,mBAAV1b,EACnBgiB,EAAkBhiB,EAClB8hB,EACAC,GAAcL,EAAO1hB,KWR3Bkb,KVhDa,SAASlb,GACtB,OAAOyW,UAAUhU,OACXyC,KAAKwW,KAAc,MAAT1b,EACNoiB,GAA+B,mBAAVpiB,EACrBuiB,EACAD,GAActiB,IAClBkF,KAAKuZ,OAAO4D,aU2ClB8F,KTjDa,SAASnoB,GACtB,OAAOyW,UAAUhU,OACXyC,KAAKwW,KAAc,MAAT1b,EACNwiB,GAA+B,mBAAVxiB,EACrB2iB,EACAD,GAAc1iB,IAClBkF,KAAKuZ,OAAOgE,WS4ClBG,MR/Da,WACb,OAAO1d,KAAKwW,KAAKkH,IQ+DjBE,MPhEa,WACb,OAAO5d,KAAKwW,KAAKoH,IOgEjB/H,OcnEa,SAAS4B,GACtB,IAAIlR,EAAyB,mBAATkR,EAAsBA,EAAOyL,GAAQzL,GACzD,OAAOzX,KAAK+V,QAAO,WACjB,OAAO/V,KAAKiZ,YAAY1S,EAAOoO,MAAM3U,KAAMuR,gBdiE7C0E,OL/Da,SAASwB,EAAM0L,GAC5B,IAAI5c,EAAyB,mBAATkR,EAAsBA,EAAOyL,GAAQzL,GACrD1B,EAAmB,MAAVoN,EAAiB7E,GAAiC,mBAAX6E,EAAwBA,EAAS/K,EAAS+K,GAC9F,OAAOnjB,KAAK+V,QAAO,WACjB,OAAO/V,KAAKmZ,aAAa5S,EAAOoO,MAAM3U,KAAMuR,WAAYwE,EAAOpB,MAAM3U,KAAMuR,YAAc,UK4D3F+E,OJlEa,WACb,OAAOtW,KAAKwW,KAAKF,KIkEjBmI,MH9Da,SAAS2E,GACtB,OAAOpjB,KAAK+V,OAAOqN,EAAOzE,GAAsBH,KG8DhD7F,MezEa,SAAS7d,GACtB,OAAOyW,UAAUhU,OACXyC,KAAK+iB,SAAS,WAAYjoB,GAC1BkF,KAAKuZ,OAAOP,UfuElBlB,GFEa,SAASC,EAAUjd,EAAO8kB,GACvC,IAA+CviB,EAAyBrB,EAApEqb,EAAYD,GAAeW,EAAW,IAAQza,EAAI+Z,EAAU9Z,OAEhE,KAAIgU,UAAUhU,OAAS,GAAvB,CAcA,IAFAua,EAAKhd,EAAQ+kB,GAAQJ,GACN,MAAXG,IAAiBA,GAAU,GAC1BviB,EAAI,EAAGA,EAAIC,IAAKD,EAAG2C,KAAKwW,KAAKsB,EAAGT,EAAUha,GAAIvC,EAAO8kB,IAC1D,OAAO5f,KAdL,IAAI8X,EAAK9X,KAAKuZ,OAAOmG,KACrB,GAAI5H,EAAI,IAAK,IAA0B3W,EAAtBkE,EAAI,EAAGd,EAAIuT,EAAGva,OAAW8H,EAAId,IAAKc,EACjD,IAAKhI,EAAI,EAAG8D,EAAI2W,EAAGzS,GAAIhI,EAAIC,IAAKD,EAC9B,IAAKrB,EAAIqb,EAAUha,IAAI0C,OAASoB,EAAEpB,MAAQ/D,EAAEyb,OAAStW,EAAEsW,KACrD,OAAOtW,EAAErG,OETjBmc,SD9Ca,SAASlX,EAAMkgB,GAC5B,OAAOjgB,KAAKwW,MAAwB,mBAAXyJ,EACnBS,GACAD,IAAkB1gB,EAAMkgB,MC8CjB9K,UgB5EA,YAASiD,GACtB,MAA2B,iBAAbA,EACR,IAAIwI,GAAU,CAAC,CAACxF,SAAS/C,cAAcD,KAAa,CAACgD,SAAS6C,kBAC9D,IAAI2C,GAAU,CAAC,CAACxI,IAAYuI,K,cCDhC0C,GACAC,GALAC,GAAQ,EACRC,GAAU,EACVC,GAAW,EAIXC,GAAY,EACZC,GAAW,EACXC,GAAY,EACZC,GAA+B,iBAAhBC,aAA4BA,YAAYC,IAAMD,YAAc1lB,KAC3E4lB,GAA6B,iBAAX9D,QAAuBA,OAAO+D,sBAAwB/D,OAAO+D,sBAAsB1C,KAAKrB,QAAU,SAASgE,GAAKC,WAAWD,EAAG,KAE7I,SAASH,KACd,OAAOJ,KAAaK,GAASI,IAAWT,GAAWE,GAAME,MAAQH,IAGnE,SAASQ,KACPT,GAAW,EAGN,SAASU,KACdrkB,KAAKskB,MACLtkB,KAAKukB,MACLvkB,KAAK8Y,MAAQ,KA0BR,SAAS0L,GAAM3M,EAAU4M,EAAOC,GACrC,IAAI1oB,EAAI,IAAIqoB,GAEZ,OADAroB,EAAE2oB,QAAQ9M,EAAU4M,EAAOC,GACpB1oB,EAcT,SAAS4oB,KACPjB,IAAYD,GAAYG,GAAME,OAASH,GACvCL,GAAQC,GAAU,EAClB,KAdK,WACLO,OACER,GAEF,IADA,IAAkBniB,EAAdpF,EAAIqnB,GACDrnB,IACAoF,EAAIuiB,GAAW3nB,EAAEuoB,QAAU,GAAGvoB,EAAEsoB,MAAM5N,KAAK,KAAMtV,GACtDpF,EAAIA,EAAE8c,QAENyK,GAOAsB,GACD,QACCtB,GAAQ,EAWZ,WACE,IAAIzd,EAAmBnK,EAAfL,EAAK+nB,GAAcqB,EAAO5N,IAClC,KAAOxb,GACDA,EAAGgpB,OACDI,EAAOppB,EAAGipB,QAAOG,EAAOppB,EAAGipB,OAC/Bze,EAAKxK,EAAIA,EAAKA,EAAGwd,QAEjBnd,EAAKL,EAAGwd,MAAOxd,EAAGwd,MAAQ,KAC1Bxd,EAAKwK,EAAKA,EAAGgT,MAAQnd,EAAK0nB,GAAW1nB,GAGzC2nB,GAAWxd,EACXgf,GAAMJ,GAtBJK,GACApB,GAAW,GAIf,SAASqB,KACP,IAAIjB,EAAMF,GAAME,MAAOU,EAAQV,EAAML,GACjCe,EA7EU,MA6ESb,IAAaa,EAAOf,GAAYK,GAkBzD,SAASe,GAAMJ,GACTnB,KACAC,KAASA,GAAUyB,aAAazB,KACxBkB,EAAOf,GACP,IACNe,EAAO5N,MAAU0M,GAAUW,WAAWS,GAAMF,EAAOb,GAAME,MAAQH,KACjEH,KAAUA,GAAWyB,cAAczB,OAElCA,KAAUC,GAAYG,GAAME,MAAON,GAAW0B,YAAYH,GAvGnD,MAwGZzB,GAAQ,EAAGS,GAASY,MAjFxBP,GAAMnkB,UAAYskB,GAAMtkB,UAAY,CAClCgG,YAAame,GACbM,QAAS,SAAS9M,EAAU4M,EAAOC,GACjC,GAAwB,mBAAb7M,EAAyB,MAAM,IAAIuN,UAAU,8BACxDV,GAAgB,MAARA,EAAeX,MAASW,IAAkB,MAATD,EAAgB,GAAKA,GACzDzkB,KAAK8Y,OAASwK,KAAatjB,OAC1BsjB,GAAUA,GAASxK,MAAQ9Y,KAC1BqjB,GAAWrjB,KAChBsjB,GAAWtjB,MAEbA,KAAKskB,MAAQzM,EACb7X,KAAKukB,MAAQG,EACbI,MAEFO,KAAM,WACArlB,KAAKskB,QACPtkB,KAAKskB,MAAQ,KACbtkB,KAAKukB,MAAQzN,IACbgO,QC1CS,gBAASjN,EAAU4M,EAAOC,GACvC,IAAI1oB,EAAI,IAAIqoB,GAMZ,OALAI,EAAiB,MAATA,EAAgB,GAAKA,EAC7BzoB,EAAE2oB,SAAQ,SAASW,GACjBtpB,EAAEqpB,OACFxN,EAASyN,EAAUb,KAClBA,EAAOC,GACH1oB,GCNLupB,GAAUtO,EAAS,QAAS,MAAO,SAAU,aAC7CuO,GAAa,GAUF,YAASjM,EAAM9B,EAAMgO,EAAIvG,EAAO5F,EAAOoM,GACpD,IAAIC,EAAYpM,EAAKqM,aACrB,GAAKD,GACA,GAAIF,KAAME,EAAW,YADVpM,EAAKqM,aAAe,IAmCtC,SAAgBrM,EAAMkM,EAAII,GACxB,IACIC,EADAH,EAAYpM,EAAKqM,aAgBrB,SAAShpB,EAAM0oB,GACb,IAAIjoB,EAAGgI,EAAG/H,EAAG6D,EAGb,GAjEmB,IAiEf0kB,EAAKE,MAAqB,OAAOV,IAErC,IAAKhoB,KAAKsoB,EAER,IADAxkB,EAAIwkB,EAAUtoB,IACRoa,OAASoO,EAAKpO,KAApB,CAKA,GAxEe,IAwEXtW,EAAE4kB,MAAmB,OAAOvC,GAAQ5mB,GAvEzB,IA0EXuE,EAAE4kB,OACJ5kB,EAAE4kB,MAzES,EA0EX5kB,EAAEqjB,MAAMa,OACRlkB,EAAE2W,GAAGpB,KAAK,YAAa6C,EAAMA,EAAKP,SAAU7X,EAAE+d,MAAO/d,EAAEmY,cAChDqM,EAAUtoB,KAITA,EAAIooB,IACZtkB,EAAE4kB,MAjFS,EAkFX5kB,EAAEqjB,MAAMa,OACRlkB,EAAE2W,GAAGpB,KAAK,SAAU6C,EAAMA,EAAKP,SAAU7X,EAAE+d,MAAO/d,EAAEmY,cAC7CqM,EAAUtoB,IAoBrB,GAZAmmB,IAAQ,WA/FS,IAgGXqC,EAAKE,QACPF,EAAKE,MAhGQ,EAiGbF,EAAKrB,MAAMG,QAAQpP,EAAMsQ,EAAKpB,MAAOoB,EAAKnB,MAC1CnP,EAAK+P,OAMTO,EAAKE,MA1Ga,EA2GlBF,EAAK/N,GAAGpB,KAAK,QAAS6C,EAAMA,EAAKP,SAAU6M,EAAK3G,MAAO2G,EAAKvM,OA3G1C,IA4GduM,EAAKE,MAAT,CAKA,IAJAF,EAAKE,MA5GY,EA+GjBD,EAAQ,IAAItoB,MAAMF,EAAIuoB,EAAKC,MAAMvoB,QAC5BF,EAAI,EAAGgI,GAAK,EAAGhI,EAAIC,IAAKD,GACvB8D,EAAI0kB,EAAKC,MAAMzoB,GAAGvC,MAAM4b,KAAK6C,EAAMA,EAAKP,SAAU6M,EAAK3G,MAAO2G,EAAKvM,UACrEwM,IAAQzgB,GAAKlE,GAGjB2kB,EAAMvoB,OAAS8H,EAAI,GAGrB,SAASkQ,EAAK+P,GAKZ,IAJA,IAAItpB,EAAIspB,EAAUO,EAAKG,SAAWH,EAAKI,KAAKvP,KAAK,KAAM4O,EAAUO,EAAKG,WAAaH,EAAKrB,MAAMG,QAAQU,GAAOQ,EAAKE,MAvHlG,EAuHkH,GAC9H1oB,GAAK,EACLC,EAAIwoB,EAAMvoB,SAELF,EAAIC,GACXwoB,EAAMzoB,GAAGqZ,KAAK6C,EAAMvd,GA5HN,IAgIZ6pB,EAAKE,QACPF,EAAK/N,GAAGpB,KAAK,MAAO6C,EAAMA,EAAKP,SAAU6M,EAAK3G,MAAO2G,EAAKvM,OAC1D+L,KAIJ,SAASA,IAIP,IAAK,IAAIhoB,KAHTwoB,EAAKE,MAtIU,EAuIfF,EAAKrB,MAAMa,cACJM,EAAUF,GACHE,EAAW,cAClBpM,EAAKqM,aA7FdD,EAAUF,GAAMI,EAChBA,EAAKrB,MAAQA,IAEb,SAAkBc,GAChBO,EAAKE,MAtDc,EAuDnBF,EAAKrB,MAAMG,QAAQ/nB,EAAOipB,EAAKpB,MAAOoB,EAAKnB,MAGvCmB,EAAKpB,OAASa,GAAS1oB,EAAM0oB,EAAUO,EAAKpB,SAPrB,EAAGoB,EAAKnB,MAxCrCne,CAAOgT,EAAMkM,EAAI,CACfhO,KAAMA,EACNyH,MAAOA,EACP5F,MAAOA,EACPxB,GAAIyN,GACJO,MAAON,GACPd,KAAMgB,EAAOhB,KACbD,MAAOiB,EAAOjB,MACduB,SAAUN,EAAOM,SACjBC,KAAMP,EAAOO,KACbzB,MAAO,KACPuB,MAvBiB,KA2Bd,SAASG,GAAK3M,EAAMkM,GACzB,IAAIU,EAAWxO,GAAI4B,EAAMkM,GACzB,GAAIU,EAASJ,MA7BM,EA6BW,MAAM,IAAI3mB,MAAM,+BAC9C,OAAO+mB,EAGF,SAASvO,GAAI2B,EAAMkM,GACxB,IAAIU,EAAWxO,GAAI4B,EAAMkM,GACzB,GAAIU,EAASJ,MAhCM,EAgCW,MAAM,IAAI3mB,MAAM,6BAC9C,OAAO+mB,EAGF,SAASxO,GAAI4B,EAAMkM,GACxB,IAAIU,EAAW5M,EAAKqM,aACpB,IAAKO,KAAcA,EAAWA,EAASV,IAAM,MAAM,IAAIrmB,MAAM,wBAC7D,OAAO+mB,EC9CM,ICAXC,GACAC,GACAC,GACAC,GDHW,YAAShN,EAAM9B,GAC5B,IACI0O,EACAK,EAEAnpB,EAJAsoB,EAAYpM,EAAKqM,aAGjBtN,GAAQ,EAGZ,GAAKqN,EAAL,CAIA,IAAKtoB,KAFLoa,EAAe,MAARA,EAAe,KAAOA,EAAO,GAE1BkO,GACHQ,EAAWR,EAAUtoB,IAAIoa,OAASA,GACvC+O,EAASL,EAASJ,MDPA,GCOoBI,EAASJ,MDJ/B,ECKhBI,EAASJ,MDJM,ECKfI,EAAS3B,MAAMa,OACfc,EAASrO,GAAGpB,KAAK8P,EAAS,YAAc,SAAUjN,EAAMA,EAAKP,SAAUmN,EAASjH,MAAOiH,EAAS7M,cACzFqM,EAAUtoB,IAL8Bib,GAAQ,EAQrDA,UAAciB,EAAKqM,e,aEtBrB9S,GAAU,IAAM/X,KAAK6X,GAEdiC,GAAW,CACpBrB,WAAY,EACZC,WAAY,EACZgT,OAAQ,EACRC,MAAO,EACPC,OAAQ,EACRC,OAAQ,GAGK,YAAS9qB,EAAGM,EAAGsB,EAAG3B,EAAGqF,EAAG8iB,GACrC,IAAIyC,EAAQC,EAAQF,EAKpB,OAJIC,EAAS5rB,KAAKwY,KAAKzX,EAAIA,EAAIM,EAAIA,MAAIN,GAAK6qB,EAAQvqB,GAAKuqB,IACrDD,EAAQ5qB,EAAI4B,EAAItB,EAAIL,KAAG2B,GAAK5B,EAAI4qB,EAAO3qB,GAAKK,EAAIsqB,IAChDE,EAAS7rB,KAAKwY,KAAK7V,EAAIA,EAAI3B,EAAIA,MAAI2B,GAAKkpB,EAAQ7qB,GAAK6qB,EAAQF,GAASE,GACtE9qB,EAAIC,EAAIK,EAAIsB,IAAG5B,GAAKA,EAAGM,GAAKA,EAAGsqB,GAASA,EAAOC,GAAUA,GACtD,CACLnT,WAAYpS,EACZqS,WAAYyQ,EACZuC,OAAQ1rB,KAAKmY,MAAM9W,EAAGN,GAAKgX,GAC3B4T,MAAO3rB,KAAKkY,KAAKyT,GAAS5T,GAC1B6T,OAAQA,EACRC,OAAQA,ICpBZ,SAASC,GAAqBC,EAAOC,EAASC,EAASC,GAErD,SAASviB,EAAImN,GACX,OAAOA,EAAEtU,OAASsU,EAAEnN,MAAQ,IAAM,GAsCpC,OAAO,SAAS5I,EAAGM,GACjB,IAAIyV,EAAI,GACJqV,EAAI,GAOR,OANAprB,EAAIgrB,EAAMhrB,GAAIM,EAAI0qB,EAAM1qB,GAtC1B,SAAmB+qB,EAAIC,EAAIC,EAAIC,EAAIzV,EAAGqV,GACpC,GAAIC,IAAOE,GAAMD,IAAOE,EAAI,CAC1B,IAAIjqB,EAAIwU,EAAExP,KAAK,aAAc,KAAM0kB,EAAS,KAAMC,GAClDE,EAAE7kB,KAAK,CAAChF,EAAGA,EAAI,EAAGQ,EAAGU,aAAO4oB,EAAIE,IAAM,CAAChqB,EAAGA,EAAI,EAAGQ,EAAGU,aAAO6oB,EAAIE,UACtDD,GAAMC,IACfzV,EAAExP,KAAK,aAAeglB,EAAKN,EAAUO,EAAKN,GAkC5CO,CAAUzrB,EAAE0X,WAAY1X,EAAE2X,WAAYrX,EAAEoX,WAAYpX,EAAEqX,WAAY5B,EAAGqV,GA9BvE,SAAgBprB,EAAGM,EAAGyV,EAAGqV,GACnBprB,IAAMM,GACJN,EAAIM,EAAI,IAAKA,GAAK,IAAcA,EAAIN,EAAI,MAAKA,GAAK,KACtDorB,EAAE7kB,KAAK,CAAChF,EAAGwU,EAAExP,KAAKqC,EAAImN,GAAK,UAAW,KAAMoV,GAAY,EAAGppB,EAAGU,aAAOzC,EAAGM,MAC/DA,GACTyV,EAAExP,KAAKqC,EAAImN,GAAK,UAAYzV,EAAI6qB,GA0BlCR,CAAO3qB,EAAE2qB,OAAQrqB,EAAEqqB,OAAQ5U,EAAGqV,GAtBhC,SAAeprB,EAAGM,EAAGyV,EAAGqV,GAClBprB,IAAMM,EACR8qB,EAAE7kB,KAAK,CAAChF,EAAGwU,EAAExP,KAAKqC,EAAImN,GAAK,SAAU,KAAMoV,GAAY,EAAGppB,EAAGU,aAAOzC,EAAGM,KAC9DA,GACTyV,EAAExP,KAAKqC,EAAImN,GAAK,SAAWzV,EAAI6qB,GAmBjCP,CAAM5qB,EAAE4qB,MAAOtqB,EAAEsqB,MAAO7U,EAAGqV,GAf7B,SAAeC,EAAIC,EAAIC,EAAIC,EAAIzV,EAAGqV,GAChC,GAAIC,IAAOE,GAAMD,IAAOE,EAAI,CAC1B,IAAIjqB,EAAIwU,EAAExP,KAAKqC,EAAImN,GAAK,SAAU,KAAM,IAAK,KAAM,KACnDqV,EAAE7kB,KAAK,CAAChF,EAAGA,EAAI,EAAGQ,EAAGU,aAAO4oB,EAAIE,IAAM,CAAChqB,EAAGA,EAAI,EAAGQ,EAAGU,aAAO6oB,EAAIE,UAC/C,IAAPD,GAAmB,IAAPC,GACrBzV,EAAExP,KAAKqC,EAAImN,GAAK,SAAWwV,EAAK,IAAMC,EAAK,KAW7C5T,CAAM5X,EAAE6qB,OAAQ7qB,EAAE8qB,OAAQxqB,EAAEuqB,OAAQvqB,EAAEwqB,OAAQ/U,EAAGqV,GACjDprB,EAAIM,EAAI,KACD,SAASJ,GAEd,IADA,IAA0BmF,EAAtB9D,GAAK,EAAGC,EAAI4pB,EAAE3pB,SACTF,EAAIC,GAAGuU,GAAG1Q,EAAI+lB,EAAE7pB,IAAIA,GAAK8D,EAAEtD,EAAE7B,GACtC,OAAO6V,EAAEkL,KAAK,MAKb,IAAIyK,GAA0BX,IFtD9B,SAAkB/rB,GACvB,MAAc,SAAVA,EAAyB+Z,IACxBuR,KAASA,GAAUhL,SAAS8C,cAAc,OAAQmI,GAAUjL,SAAS6C,gBAAiBqI,GAAUlL,SAASD,aAC9GiL,GAAQ9K,MAAM9G,UAAY1Z,EAC1BA,EAAQwrB,GAAQxK,iBAAiBuK,GAAQpN,YAAYmN,IAAU,MAAMvK,iBAAiB,aACtFwK,GAAQ9H,YAAY6H,IACpBtrB,EAAQA,EAAM6C,MAAM,GAAI,GAAG4Z,MAAM,KAC1BkQ,IAAW3sB,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,OE+Cb,OAAQ,MAAO,QACxE4sB,GAA0Bb,IF7C9B,SAAkB/rB,GACvB,OAAa,MAATA,EAAsB+Z,IACrB0R,KAASA,GAAUnL,SAAS+C,gBAAgB,6BAA8B,MAC/EoI,GAAQzL,aAAa,YAAahgB,IAC5BA,EAAQyrB,GAAQ/R,UAAUmT,QAAQC,gBACxC9sB,EAAQA,EAAM+sB,OACPJ,GAAU3sB,EAAMgB,EAAGhB,EAAMsB,EAAGtB,EAAM4C,EAAG5C,EAAMiB,EAAGjB,EAAMsG,EAAGtG,EAAMopB,IAFLrP,MEyCG,KAAM,IAAK,KC5D/E,SAASiT,GAAYrC,EAAIhO,GACvB,IAAIsQ,EAAQC,EACZ,OAAO,WACL,IAAI7B,EAAWvO,GAAI5X,KAAMylB,GACrBK,EAAQK,EAASL,MAKrB,GAAIA,IAAUiC,EAEZ,IAAK,IAAI1qB,EAAI,EAAGC,GADhB0qB,EAASD,EAASjC,GACSvoB,OAAQF,EAAIC,IAAKD,EAC1C,GAAI2qB,EAAO3qB,GAAGoa,OAASA,EAAM,EAC3BuQ,EAASA,EAAOrqB,SACTqf,OAAO3f,EAAG,GACjB,MAKN8oB,EAASL,MAAQkC,GAIrB,SAASC,GAAcxC,EAAIhO,EAAM3c,GAC/B,IAAIitB,EAAQC,EACZ,GAAqB,mBAAVltB,EAAsB,MAAM,IAAIsE,MAC3C,OAAO,WACL,IAAI+mB,EAAWvO,GAAI5X,KAAMylB,GACrBK,EAAQK,EAASL,MAKrB,GAAIA,IAAUiC,EAAQ,CACpBC,GAAUD,EAASjC,GAAOnoB,QAC1B,IAAK,IAAI3B,EAAI,CAACyb,KAAMA,EAAM3c,MAAOA,GAAQuC,EAAI,EAAGC,EAAI0qB,EAAOzqB,OAAQF,EAAIC,IAAKD,EAC1E,GAAI2qB,EAAO3qB,GAAGoa,OAASA,EAAM,CAC3BuQ,EAAO3qB,GAAKrB,EACZ,MAGAqB,IAAMC,GAAG0qB,EAAO3lB,KAAKrG,GAG3BmqB,EAASL,MAAQkC,GAsBd,SAASE,GAAWhS,EAAYuB,EAAM3c,GAC3C,IAAI2qB,EAAKvP,EAAWiS,IAOpB,OALAjS,EAAWM,MAAK,WACd,IAAI2P,EAAWvO,GAAI5X,KAAMylB,IACxBU,EAASrrB,QAAUqrB,EAASrrB,MAAQ,KAAK2c,GAAQ3c,EAAM6Z,MAAM3U,KAAMuR,cAG/D,SAASgI,GACd,OAAO5B,GAAI4B,EAAMkM,GAAI3qB,MAAM2c,I,2CC3EhB,YAAS3b,EAAGM,GACzB,IAAIsB,EACJ,OAAqB,iBAANtB,EAAiBgsB,KAC1BhsB,aAAaM,KAAQ2rB,MACpB3qB,EAAIhB,aAAMN,KAAOA,EAAIsB,EAAG2qB,MACzBC,MAAmBxsB,EAAGM,ICH9B,SAASoe,GAAW/C,GAClB,OAAO,WACLzX,KAAKya,gBAAgBhD,IAIzB,SAASiD,GAAaC,GACpB,OAAO,WACL3a,KAAK4a,kBAAkBD,EAASL,MAAOK,EAASJ,QAIpD,SAASM,GAAapD,EAAM/V,EAAa6mB,GACvC,IAAIC,EAEAC,EADAC,EAAUH,EAAS,GAEvB,OAAO,WACL,IAAII,EAAU3oB,KAAKoW,aAAaqB,GAChC,OAAOkR,IAAYD,EAAU,KACvBC,IAAYH,EAAWC,EACvBA,EAAe/mB,EAAY8mB,EAAWG,EAASJ,IAIzD,SAASxN,GAAeJ,EAAUjZ,EAAa6mB,GAC7C,IAAIC,EAEAC,EADAC,EAAUH,EAAS,GAEvB,OAAO,WACL,IAAII,EAAU3oB,KAAK8iB,eAAenI,EAASL,MAAOK,EAASJ,OAC3D,OAAOoO,IAAYD,EAAU,KACvBC,IAAYH,EAAWC,EACvBA,EAAe/mB,EAAY8mB,EAAWG,EAASJ,IAIzD,SAAStN,GAAaxD,EAAM/V,EAAa5G,GACvC,IAAI0tB,EACAI,EACAH,EACJ,OAAO,WACL,IAAIE,EAA+BD,EAAtBH,EAASztB,EAAMkF,MAC5B,GAAc,MAAVuoB,EAGJ,OAFAI,EAAU3oB,KAAKoW,aAAaqB,OAC5BiR,EAAUH,EAAS,IACU,KACvBI,IAAYH,GAAYE,IAAYE,EAAWH,GAC9CG,EAAWF,EAASD,EAAe/mB,EAAY8mB,EAAWG,EAASJ,IAL1CvoB,KAAKya,gBAAgBhD,IASzD,SAASyD,GAAeP,EAAUjZ,EAAa5G,GAC7C,IAAI0tB,EACAI,EACAH,EACJ,OAAO,WACL,IAAIE,EAA+BD,EAAtBH,EAASztB,EAAMkF,MAC5B,GAAc,MAAVuoB,EAGJ,OAFAI,EAAU3oB,KAAK8iB,eAAenI,EAASL,MAAOK,EAASJ,WACvDmO,EAAUH,EAAS,IACU,KACvBI,IAAYH,GAAYE,IAAYE,EAAWH,GAC9CG,EAAWF,EAASD,EAAe/mB,EAAY8mB,EAAWG,EAASJ,IAL1CvoB,KAAK4a,kBAAkBD,EAASL,MAAOK,EAASJ,QC5DpF,SAASsO,GAAgBpR,EAAMpa,GAC7B,OAAO,SAASrB,GACdgE,KAAK8a,aAAarD,EAAMpa,EAAEqZ,KAAK1W,KAAMhE,KAIzC,SAAS8sB,GAAkBnO,EAAUtd,GACnC,OAAO,SAASrB,GACdgE,KAAKgb,eAAeL,EAASL,MAAOK,EAASJ,MAAOld,EAAEqZ,KAAK1W,KAAMhE,KAIrE,SAAS+sB,GAAYpO,EAAU7f,GAC7B,IAAIgL,EAAI6b,EACR,SAASmE,IACP,IAAIzoB,EAAIvC,EAAM6Z,MAAM3U,KAAMuR,WAE1B,OADIlU,IAAMskB,IAAI7b,GAAM6b,EAAKtkB,IAAMyrB,GAAkBnO,EAAUtd,IACpDyI,EAGT,OADAggB,EAAMkD,OAASluB,EACRgrB,EAGT,SAASmD,GAAUxR,EAAM3c,GACvB,IAAIgL,EAAI6b,EACR,SAASmE,IACP,IAAIzoB,EAAIvC,EAAM6Z,MAAM3U,KAAMuR,WAE1B,OADIlU,IAAMskB,IAAI7b,GAAM6b,EAAKtkB,IAAMwrB,GAAgBpR,EAAMpa,IAC9CyI,EAGT,OADAggB,EAAMkD,OAASluB,EACRgrB,EC/BT,SAASoD,GAAczD,EAAI3qB,GACzB,OAAO,WACLorB,GAAKlmB,KAAMylB,GAAIhB,OAAS3pB,EAAM6Z,MAAM3U,KAAMuR,YAI9C,SAAS4X,GAAc1D,EAAI3qB,GACzB,OAAOA,GAASA,EAAO,WACrBorB,GAAKlmB,KAAMylB,GAAIhB,MAAQ3pB,GCR3B,SAASsuB,GAAiB3D,EAAI3qB,GAC5B,OAAO,WACL8c,GAAI5X,KAAMylB,GAAIO,UAAYlrB,EAAM6Z,MAAM3U,KAAMuR,YAIhD,SAAS8X,GAAiB5D,EAAI3qB,GAC5B,OAAOA,GAASA,EAAO,WACrB8c,GAAI5X,KAAMylB,GAAIO,SAAWlrB,GCR7B,SAASwuB,GAAa7D,EAAI3qB,GACxB,GAAqB,mBAAVA,EAAsB,MAAM,IAAIsE,MAC3C,OAAO,WACLwY,GAAI5X,KAAMylB,GAAIQ,KAAOnrB,GCKzB,SAASyuB,GAAW9D,EAAIhO,EAAMwH,GAC5B,IAAIuK,EAAKC,EAAKC,EAThB,SAAejS,GACb,OAAQA,EAAO,IAAI3X,OAAOyX,MAAM,SAASoS,OAAM,SAAS3tB,GACtD,IAAIqB,EAAIrB,EAAE0b,QAAQ,KAElB,OADIra,GAAK,IAAGrB,EAAIA,EAAE2B,MAAM,EAAGN,KACnBrB,GAAW,UAANA,KAKKY,CAAM6a,GAAQyO,GAAOtO,GACzC,OAAO,WACL,IAAIuO,EAAWuD,EAAI1pB,KAAMylB,GACrB3N,EAAKqO,EAASrO,GAKdA,IAAO0R,IAAMC,GAAOD,EAAM1R,GAAI1F,QAAQ0F,GAAGL,EAAMwH,GAEnDkH,EAASrO,GAAK2R,GCbH,ICNX7I,GAAYzL,GAAUjV,UAAUgG,YCiBpC,SAASmV,GAAY5D,GACnB,OAAO,WACLzX,KAAKsb,MAAMC,eAAe9D,ICrB9B,SAASmS,GAAiBnS,EAAMpa,EAAGoe,GACjC,OAAO,SAASzf,GACdgE,KAAKsb,MAAMI,YAAYjE,EAAMpa,EAAEqZ,KAAK1W,KAAMhE,GAAIyf,IAIlD,SAASoO,GAAWpS,EAAM3c,EAAO2gB,GAC/B,IAAIzf,EAAG2lB,EACP,SAASmE,IACP,IAAIzoB,EAAIvC,EAAM6Z,MAAM3U,KAAMuR,WAE1B,OADIlU,IAAMskB,IAAI3lB,GAAK2lB,EAAKtkB,IAAMusB,GAAiBnS,EAAMpa,EAAGoe,IACjDzf,EAGT,OADA8pB,EAAMkD,OAASluB,EACRgrB,ECdT,SAASgE,GAAgBzsB,GACvB,OAAO,SAASrB,GACdgE,KAAKmd,YAAc9f,EAAEqZ,KAAK1W,KAAMhE,IAIpC,SAAS+tB,GAAUjvB,GACjB,IAAIgL,EAAI6b,EACR,SAASmE,IACP,IAAIzoB,EAAIvC,EAAM6Z,MAAM3U,KAAMuR,WAE1B,OADIlU,IAAMskB,IAAI7b,GAAM6b,EAAKtkB,IAAMysB,GAAgBzsB,IACxCyI,EAGT,OADAggB,EAAMkD,OAASluB,EACRgrB,EAGM,ICIXL,GAAK,EAEF,SAASuE,GAAWnJ,EAAQC,EAASrJ,EAAMgO,GAChDzlB,KAAK+gB,QAAUF,EACf7gB,KAAKghB,SAAWF,EAChB9gB,KAAKiqB,MAAQxS,EACbzX,KAAKmoB,IAAM1C,EAON,SAASyE,KACd,QAASzE,GAGX,IAAI0E,GAAsBhV,GAAUjV,UAEpC8pB,GAAW9pB,UAVI,SAAoBuX,GACjC,OAAOtC,KAAYe,WAAWuB,IASEvX,UAAY,CAC5CgG,YAAa8jB,GACbjU,OCtCa,SAASA,GACtB,IAAI0B,EAAOzX,KAAKiqB,MACZxE,EAAKzlB,KAAKmoB,IAEQ,mBAAXpS,IAAuBA,EAASqC,EAASrC,IAEpD,IAAK,IAAI8K,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ0jB,EAAY,IAAIzjB,MAAM+G,GAAIc,EAAI,EAAGA,EAAId,IAAKc,EAC3F,IAAK,IAAiFkU,EAAM2H,EAAnF5H,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAQ4jB,EAAWF,EAAU5b,GAAK,IAAI7H,MAAMF,GAAmBD,EAAI,EAAGA,EAAIC,IAAKD,GAC9Gkc,EAAOD,EAAMjc,MAAQ6jB,EAAUnL,EAAOW,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,MAClE,aAAcC,IAAM2H,EAAQlI,SAAWO,EAAKP,UAChDmI,EAAS9jB,GAAK6jB,EACdiF,GAAShF,EAAS9jB,GAAIoa,EAAMgO,EAAIpoB,EAAG8jB,EAAUxJ,GAAI4B,EAAMkM,KAK7D,OAAO,IAAIuE,GAAW/I,EAAWjhB,KAAKghB,SAAUvJ,EAAMgO,IDuBtDpQ,UEvCa,SAASU,GACtB,IAAI0B,EAAOzX,KAAKiqB,MACZxE,EAAKzlB,KAAKmoB,IAEQ,mBAAXpS,IAAuBA,EAASqL,EAAYrL,IAEvD,IAAK,IAAI8K,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ0jB,EAAY,GAAIH,EAAU,GAAIzb,EAAI,EAAGA,EAAId,IAAKc,EAC/F,IAAK,IAAyCkU,EAArCD,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAcF,EAAI,EAAGA,EAAIC,IAAKD,EAClE,GAAIkc,EAAOD,EAAMjc,GAAI,CACnB,IAAK,IAA2D6b,EAAvDkR,EAAWrU,EAAOW,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,GAAe+Q,EAAU1S,GAAI4B,EAAMkM,GAAKnnB,EAAI,EAAGwS,EAAIsZ,EAAS7sB,OAAQe,EAAIwS,IAAKxS,GAC/H4a,EAAQkR,EAAS9rB,KACnB6nB,GAASjN,EAAOzB,EAAMgO,EAAInnB,EAAG8rB,EAAUC,GAG3CpJ,EAAU5e,KAAK+nB,GACftJ,EAAQze,KAAKkX,GAKnB,OAAO,IAAIyQ,GAAW/I,EAAWH,EAASrJ,EAAMgO,IFoBhDlP,OGzCa,SAASrX,GACD,mBAAVA,IAAsBA,EAAQmiB,EAAQniB,IAEjD,IAAK,IAAI2hB,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ0jB,EAAY,IAAIzjB,MAAM+G,GAAIc,EAAI,EAAGA,EAAId,IAAKc,EAC3F,IAAK,IAAuEkU,EAAnED,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAQ4jB,EAAWF,EAAU5b,GAAK,GAAUhI,EAAI,EAAGA,EAAIC,IAAKD,GAC3Fkc,EAAOD,EAAMjc,KAAO6B,EAAMwX,KAAK6C,EAAMA,EAAKP,SAAU3b,EAAGic,IAC1D6H,EAAS9e,KAAKkX,GAKpB,OAAO,IAAIyQ,GAAW/I,EAAWjhB,KAAKghB,SAAUhhB,KAAKiqB,MAAOjqB,KAAKmoB,MH+BjEziB,MI3Ca,SAASwQ,GACtB,GAAIA,EAAWiS,MAAQnoB,KAAKmoB,IAAK,MAAM,IAAI/oB,MAE3C,IAAK,IAAI+iB,EAAUniB,KAAK+gB,QAASqB,EAAUlM,EAAW6K,QAASsB,EAAKF,EAAQ5kB,OAAQ0U,EAAKmQ,EAAQ7kB,OAAQgH,EAAIxJ,KAAKE,IAAIonB,EAAIpQ,GAAKqQ,EAAS,IAAI9kB,MAAM6kB,GAAKhd,EAAI,EAAGA,EAAId,IAAKc,EACrK,IAAK,IAAmGkU,EAA/FgJ,EAASJ,EAAQ9c,GAAImd,EAASJ,EAAQ/c,GAAI/H,EAAIilB,EAAOhlB,OAAQmI,EAAQ4c,EAAOjd,GAAK,IAAI7H,MAAMF,GAAUD,EAAI,EAAGA,EAAIC,IAAKD,GACxHkc,EAAOgJ,EAAOllB,IAAMmlB,EAAOnlB,MAC7BqI,EAAMrI,GAAKkc,GAKjB,KAAOlU,EAAIgd,IAAMhd,EACfid,EAAOjd,GAAK8c,EAAQ9c,GAGtB,OAAO,IAAI2kB,GAAW1H,EAAQtiB,KAAKghB,SAAUhhB,KAAKiqB,MAAOjqB,KAAKmoB,MJ6B9DhT,UJ1Ca,WACb,OAAO,IAAIyL,GAAU5gB,KAAK+gB,QAAS/gB,KAAKghB,WI0CxC9K,WK5Ca,WAKb,IAJA,IAAIuB,EAAOzX,KAAKiqB,MACZK,EAAMtqB,KAAKmoB,IACXoC,EAAML,KAEDrJ,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ8H,EAAI,EAAGA,EAAId,IAAKc,EACjE,IAAK,IAAyCkU,EAArCD,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAcF,EAAI,EAAGA,EAAIC,IAAKD,EAClE,GAAIkc,EAAOD,EAAMjc,GAAI,CACnB,IAAIgtB,EAAU1S,GAAI4B,EAAM+Q,GACxBnE,GAAS5M,EAAM9B,EAAM8S,EAAKltB,EAAGic,EAAO,CAClCoL,KAAM2F,EAAQ3F,KAAO2F,EAAQ5F,MAAQ4F,EAAQrE,SAC7CvB,MAAO,EACPuB,SAAUqE,EAAQrE,SAClBC,KAAMoE,EAAQpE,OAMtB,OAAO,IAAI+D,GAAWnJ,EAAQ7gB,KAAKghB,SAAUvJ,EAAM8S,IL0BnD7T,KAAMyT,GAAoBzT,KAC1BmM,MAAOsH,GAAoBtH,MAC3BtJ,KAAM4Q,GAAoB5Q,KAC1B+H,KAAM6I,GAAoB7I,KAC1BhJ,MAAO6R,GAAoB7R,MAC3B9B,KAAM2T,GAAoB3T,KAC1BsB,GN7Ba,SAASL,EAAMwH,GAC5B,IAAIwG,EAAKzlB,KAAKmoB,IAEd,OAAO5W,UAAUhU,OAAS,EACpBoa,GAAI3X,KAAKuZ,OAAQkM,GAAI3N,GAAGA,GAAGL,GAC3BzX,KAAKwW,KAAK+S,GAAW9D,EAAIhO,EAAMwH,KMyBrCnJ,KXgBa,SAAS2B,EAAM3c,GAC5B,IAAI6f,EAAW0D,EAAU5G,GAAOpa,EAAiB,cAAbsd,EAA2BkM,GAAuBnlB,GACtF,OAAO1B,KAAKipB,UAAUxR,EAAuB,mBAAV3c,GAC5B6f,EAASJ,MAAQW,GAAiBD,IAAcN,EAAUtd,EAAG6qB,GAAWloB,KAAM,QAAUyX,EAAM3c,IACtF,MAATA,GAAiB6f,EAASJ,MAAQG,GAAeF,IAAYG,IAC5DA,EAASJ,MAAQQ,GAAiBF,IAAcF,EAAUtd,EAAGvC,KWpBpEmuB,UVpBa,SAASxR,EAAM3c,GAC5B,IAAI0L,EAAM,QAAUiR,EACpB,GAAIlG,UAAUhU,OAAS,EAAG,OAAQiJ,EAAMxG,KAAK8lB,MAAMtf,KAASA,EAAIwiB,OAChE,GAAa,MAATluB,EAAe,OAAOkF,KAAK8lB,MAAMtf,EAAK,MAC1C,GAAqB,mBAAV1L,EAAsB,MAAM,IAAIsE,MAC3C,IAAIub,EAAW0D,EAAU5G,GACzB,OAAOzX,KAAK8lB,MAAMtf,GAAMmU,EAASJ,MAAQwO,GAAcE,IAAWtO,EAAU7f,KUe5EwgB,MHWa,SAAS7D,EAAM3c,EAAO2gB,GACnC,IAAIpe,EAAqB,cAAhBoa,GAAQ,IAAsBoP,GAAuBnlB,GAC9D,OAAgB,MAAT5G,EAAgBkF,KAClB6pB,WAAWpS,EAjElB,SAAmBA,EAAM/V,GACvB,IAAI8mB,EACAI,EACAH,EACJ,OAAO,WACL,IAAIE,EAAUrN,EAAMtb,KAAMyX,GACtBiR,GAAW1oB,KAAKsb,MAAMC,eAAe9D,GAAO6D,EAAMtb,KAAMyX,IAC5D,OAAOkR,IAAYD,EAAU,KACvBC,IAAYH,GAAYE,IAAYE,EAAWH,EAC/CA,EAAe/mB,EAAY8mB,EAAWG,EAASC,EAAWF,IAwD5C8B,CAAU/S,EAAMpa,IACjCya,GAAG,aAAeL,EAAM4D,GAAY5D,IACpB,mBAAV3c,EAAuBkF,KAC7B6pB,WAAWpS,EArClB,SAAuBA,EAAM/V,EAAa5G,GACxC,IAAI0tB,EACAI,EACAH,EACJ,OAAO,WACL,IAAIE,EAAUrN,EAAMtb,KAAMyX,GACtB8Q,EAASztB,EAAMkF,MACf0oB,EAAUH,EAAS,GAEvB,OADc,MAAVA,IAAoCvoB,KAAKsb,MAAMC,eAAe9D,GAA9CiR,EAAUH,EAA2CjN,EAAMtb,KAAMyX,IAC9EkR,IAAYD,EAAU,KACvBC,IAAYH,GAAYE,IAAYE,EAAWH,GAC9CG,EAAWF,EAASD,EAAe/mB,EAAY8mB,EAAWG,EAASJ,KA0BtD5M,CAAclE,EAAMpa,EAAG6qB,GAAWloB,KAAM,SAAWyX,EAAM3c,KAC1E0b,KAvBP,SAA0BiP,EAAIhO,GAC5B,IAAI+R,EAAKC,EAAKgB,EAAwDnU,EAA7C9P,EAAM,SAAWiR,EAAMoH,EAAQ,OAASrY,EACjE,OAAO,WACL,IAAI2f,EAAWvO,GAAI5X,KAAMylB,GACrB3N,EAAKqO,EAASrO,GACdmH,EAAkC,MAAvBkH,EAASrrB,MAAM0L,GAAe8P,IAAWA,EAAS+E,GAAY5D,SAASxX,EAKlF6X,IAAO0R,GAAOiB,IAAcxL,IAAWwK,GAAOD,EAAM1R,GAAI1F,QAAQ0F,GAAG+G,EAAO4L,EAAYxL,GAE1FkH,EAASrO,GAAK2R,GAWNiB,CAAiB1qB,KAAKmoB,IAAK1Q,IACjCzX,KACC6pB,WAAWpS,EApDlB,SAAuBA,EAAM/V,EAAa6mB,GACxC,IAAIC,EAEAC,EADAC,EAAUH,EAAS,GAEvB,OAAO,WACL,IAAII,EAAUrN,EAAMtb,KAAMyX,GAC1B,OAAOkR,IAAYD,EAAU,KACvBC,IAAYH,EAAWC,EACvBA,EAAe/mB,EAAY8mB,EAAWG,EAASJ,IA4CjC/M,CAAc/D,EAAMpa,EAAGvC,GAAQ2gB,GAChD3D,GAAG,aAAeL,EAAM,OGpB7BoS,WFzCa,SAASpS,EAAM3c,EAAO2gB,GACnC,IAAIjV,EAAM,UAAYiR,GAAQ,IAC9B,GAAIlG,UAAUhU,OAAS,EAAG,OAAQiJ,EAAMxG,KAAK8lB,MAAMtf,KAASA,EAAIwiB,OAChE,GAAa,MAATluB,EAAe,OAAOkF,KAAK8lB,MAAMtf,EAAK,MAC1C,GAAqB,mBAAV1L,EAAsB,MAAM,IAAIsE,MAC3C,OAAOY,KAAK8lB,MAAMtf,EAAKqjB,GAAWpS,EAAM3c,EAAmB,MAAZ2gB,EAAmB,GAAKA,KEqCvEzF,KM5Ca,SAASlb,GACtB,OAAOkF,KAAK8lB,MAAM,OAAyB,mBAAVhrB,EARnC,SAAsBA,GACpB,OAAO,WACL,IAAIytB,EAASztB,EAAMkF,MACnBA,KAAKmd,YAAwB,MAAVoL,EAAiB,GAAKA,GAMrClL,CAAa6K,GAAWloB,KAAM,OAAQlF,IAf9C,SAAsBA,GACpB,OAAO,WACLkF,KAAKmd,YAAcriB,GAcfsiB,CAAsB,MAATtiB,EAAgB,GAAKA,EAAQ,MN0ChDivB,UD3Ca,SAASjvB,GACtB,IAAI0L,EAAM,OACV,GAAI+K,UAAUhU,OAAS,EAAG,OAAQiJ,EAAMxG,KAAK8lB,MAAMtf,KAASA,EAAIwiB,OAChE,GAAa,MAATluB,EAAe,OAAOkF,KAAK8lB,MAAMtf,EAAK,MAC1C,GAAqB,mBAAV1L,EAAsB,MAAM,IAAIsE,MAC3C,OAAOY,KAAK8lB,MAAMtf,EAAKujB,GAAUjvB,KCuCjCwb,OLrDa,WACb,OAAOtW,KAAK8X,GAAG,cATO2N,EASsBzlB,KAAKmoB,IAR1C,WACL,IAAI9hB,EAASrG,KAAKqW,WAClB,IAAK,IAAIhZ,KAAK2C,KAAK4lB,aAAc,IAAKvoB,IAAMooB,EAAI,OAC5Cpf,GAAQA,EAAOkY,YAAYve,SAJnC,IAAwBylB,GK8DtBK,MbXa,SAASrO,EAAM3c,GAC5B,IAAI2qB,EAAKzlB,KAAKmoB,IAId,GAFA1Q,GAAQ,GAEJlG,UAAUhU,OAAS,EAAG,CAExB,IADA,IACkCvB,EAD9B8pB,EAAQnO,GAAI3X,KAAKuZ,OAAQkM,GAAIK,MACxBzoB,EAAI,EAAGC,EAAIwoB,EAAMvoB,OAAWF,EAAIC,IAAKD,EAC5C,IAAKrB,EAAI8pB,EAAMzoB,IAAIoa,OAASA,EAC1B,OAAOzb,EAAElB,MAGb,OAAO,KAGT,OAAOkF,KAAKwW,MAAe,MAAT1b,EAAgBgtB,GAAcG,IAAexC,EAAIhO,EAAM3c,KaHzE2pB,MTjDa,SAAS3pB,GACtB,IAAI2qB,EAAKzlB,KAAKmoB,IAEd,OAAO5W,UAAUhU,OACXyC,KAAKwW,MAAuB,mBAAV1b,EACdouB,GACAC,IAAe1D,EAAI3qB,IACvB6c,GAAI3X,KAAKuZ,OAAQkM,GAAIhB,OS2C3BuB,SRlDa,SAASlrB,GACtB,IAAI2qB,EAAKzlB,KAAKmoB,IAEd,OAAO5W,UAAUhU,OACXyC,KAAKwW,MAAuB,mBAAV1b,EACdsuB,GACAC,IAAkB5D,EAAI3qB,IAC1B6c,GAAI3X,KAAKuZ,OAAQkM,GAAIO,UQ4C3BC,KPxDa,SAASnrB,GACtB,IAAI2qB,EAAKzlB,KAAKmoB,IAEd,OAAO5W,UAAUhU,OACXyC,KAAKwW,KAAK8S,GAAa7D,EAAI3qB,IAC3B6c,GAAI3X,KAAKuZ,OAAQkM,GAAIQ,MOoD3BppB,IOhEa,WACb,IAAI2sB,EAAKC,EAAKxR,EAAOjY,KAAMylB,EAAKxN,EAAKkQ,IAAK7G,EAAOrJ,EAAKqJ,OACtD,OAAO,IAAIqJ,SAAQ,SAASC,EAASC,GACnC,IAAIC,EAAS,CAAChwB,MAAO+vB,GACjBhuB,EAAM,CAAC/B,MAAO,WAA4B,KAATwmB,GAAYsJ,MAEjD3S,EAAKzB,MAAK,WACR,IAAI2P,EAAWvO,GAAI5X,KAAMylB,GACrB3N,EAAKqO,EAASrO,GAKdA,IAAO0R,KACTC,GAAOD,EAAM1R,GAAI1F,QACbqE,EAAEqU,OAAOzoB,KAAKyoB,GAClBrB,EAAIhT,EAAEsU,UAAU1oB,KAAKyoB,GACrBrB,EAAIhT,EAAE5Z,IAAIwF,KAAKxF,IAGjBspB,EAASrO,GAAK2R,UCjBpB,IAAIuB,GAAgB,CAClBtG,KAAM,KACND,MAAO,EACPuB,SAAU,IACVC,KCDK,SAAoBjqB,GACzB,QAASA,GAAK,IAAM,EAAIA,EAAIA,EAAIA,GAAKA,GAAK,GAAKA,EAAIA,EAAI,GAAK,IDG9D,SAASquB,GAAQ9Q,EAAMkM,GAErB,IADA,IAAIC,IACKA,EAASnM,EAAKqM,iBAAmBF,EAASA,EAAOD,KACxD,KAAMlM,EAAOA,EAAKlD,YAChB,OAAO2U,GAActG,KAAOX,KAAOiH,GAGvC,OAAOtF,EEfTvQ,GAAUjV,UAAU6qB,UCFL,SAAStT,GACtB,OAAOzX,KAAKwW,MAAK,WACfuU,GAAU/qB,KAAMyX,ODCpBtC,GAAUjV,UAAUgW,WFiBL,SAASuB,GACtB,IAAIgO,EACAC,EAEAjO,aAAgBuS,IAClBvE,EAAKhO,EAAK0Q,IAAK1Q,EAAOA,EAAKwS,QAE3BxE,EAAKyE,MAAUxE,EAASsF,IAAetG,KAAOX,KAAOtM,EAAe,MAARA,EAAe,KAAOA,EAAO,IAG3F,IAAK,IAAIoJ,EAAS7gB,KAAK+gB,QAASxc,EAAIsc,EAAOtjB,OAAQ8H,EAAI,EAAGA,EAAId,IAAKc,EACjE,IAAK,IAAyCkU,EAArCD,EAAQuH,EAAOxb,GAAI/H,EAAIgc,EAAM/b,OAAcF,EAAI,EAAGA,EAAIC,IAAKD,GAC9Dkc,EAAOD,EAAMjc,KACf8oB,GAAS5M,EAAM9B,EAAMgO,EAAIpoB,EAAGic,EAAOoM,GAAU2E,GAAQ9Q,EAAMkM,IAKjE,OAAO,IAAIuE,GAAWnJ,EAAQ7gB,KAAKghB,SAAUvJ,EAAMgO,II1BrD,SAASwF,GAAQ7pB,GACf,MAAO,EAAEA,EAAE,IAAKA,EAAE,IAGpB,SAAS8pB,GAAQ9pB,GACf,MAAO,CAAC6pB,GAAQ7pB,EAAE,IAAK6pB,GAAQ7pB,EAAE,KAWxB,CAAC,IAAK,KAAKoW,IAAIzX,IAOf,CAAC,IAAK,KAAKyX,IAAIzX,IAOf,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAAMyX,IAAIzX,IA8D5D,SAASA,GAAK/D,GACZ,MAAO,CAAC+D,KAAM/D,GC3GCjB,KAAKiY,IACLjY,KAAKoY,IACNpY,KAAK6X,GAGJ7X,KAAKC,ICLHwC,MAAM0C,UAAUvC,MCYpB,ICZXgV,GAAK5X,KAAK6X,GACVC,GAAM,EAAIF,GAEVwY,GAAatY,GADH,KAGd,SAASuY,KACPprB,KAAKqrB,IAAMrrB,KAAKsrB,IAChBtrB,KAAKurB,IAAMvrB,KAAKwrB,IAAM,KACtBxrB,KAAKyW,EAAI,GAGX,SAASrB,KACP,OAAO,IAAIgW,GAGbA,GAAKlrB,UAAYkV,GAAKlV,UAAY,CAChCgG,YAAaklB,GACbK,OAAQ,SAAS5tB,EAAG3B,GAClB8D,KAAKyW,GAAK,KAAOzW,KAAKqrB,IAAMrrB,KAAKurB,KAAO1tB,GAAK,KAAOmC,KAAKsrB,IAAMtrB,KAAKwrB,KAAOtvB,IAE7EwvB,UAAW,WACQ,OAAb1rB,KAAKurB,MACPvrB,KAAKurB,IAAMvrB,KAAKqrB,IAAKrrB,KAAKwrB,IAAMxrB,KAAKsrB,IACrCtrB,KAAKyW,GAAK,MAGdkV,OAAQ,SAAS9tB,EAAG3B,GAClB8D,KAAKyW,GAAK,KAAOzW,KAAKurB,KAAO1tB,GAAK,KAAOmC,KAAKwrB,KAAOtvB,IAEvD0vB,iBAAkB,SAAS9oB,EAAIC,EAAIlF,EAAG3B,GACpC8D,KAAKyW,GAAK,MAAQ3T,EAAM,MAAQC,EAAM,KAAO/C,KAAKurB,KAAO1tB,GAAK,KAAOmC,KAAKwrB,KAAOtvB,IAEnF2vB,cAAe,SAAS/oB,EAAIC,EAAI+oB,EAAIC,EAAIluB,EAAG3B,GACzC8D,KAAKyW,GAAK,MAAQ3T,EAAM,MAAQC,EAAM,MAAQ+oB,EAAM,MAAQC,EAAM,KAAO/rB,KAAKurB,KAAO1tB,GAAK,KAAOmC,KAAKwrB,KAAOtvB,IAE/G8vB,MAAO,SAASlpB,EAAIC,EAAI+oB,EAAIC,EAAIjvB,GAC9BgG,GAAMA,EAAIC,GAAMA,EAAI+oB,GAAMA,EAAIC,GAAMA,EAAIjvB,GAAKA,EAC7C,IAAI8F,EAAK5C,KAAKurB,IACV1oB,EAAK7C,KAAKwrB,IACVS,EAAMH,EAAKhpB,EACXopB,EAAMH,EAAKhpB,EACXopB,EAAMvpB,EAAKE,EACXspB,EAAMvpB,EAAKE,EACXspB,EAAQF,EAAMA,EAAMC,EAAMA,EAG9B,GAAItvB,EAAI,EAAG,MAAM,IAAIsC,MAAM,oBAAsBtC,GAGjD,GAAiB,OAAbkD,KAAKurB,IACPvrB,KAAKyW,GAAK,KAAOzW,KAAKurB,IAAMzoB,GAAM,KAAO9C,KAAKwrB,IAAMzoB,QAIjD,GAAMspB,EApDD,KAyDL,GAAMtxB,KAAKK,IAAIgxB,EAAMH,EAAMC,EAAMC,GAzD5B,MAyDgDrvB,EAKrD,CACH,IAAIwvB,EAAMR,EAAKlpB,EACX2pB,EAAMR,EAAKlpB,EACX2pB,EAAQP,EAAMA,EAAMC,EAAMA,EAC1BO,EAAQH,EAAMA,EAAMC,EAAMA,EAC1BG,EAAM3xB,KAAKwY,KAAKiZ,GAChBG,EAAM5xB,KAAKwY,KAAK8Y,GAChBvb,EAAIhU,EAAI/B,KAAKgV,KAAK4C,GAAK5X,KAAK6xB,MAAMJ,EAAQH,EAAQI,IAAU,EAAIC,EAAMC,KAAS,GAC/EE,EAAM/b,EAAI6b,EACVG,EAAMhc,EAAI4b,EAGV3xB,KAAKK,IAAIyxB,EAAM,GA1EX,OA2EN7sB,KAAKyW,GAAK,KAAO3T,EAAK+pB,EAAMV,GAAO,KAAOppB,EAAK8pB,EAAMT,IAGvDpsB,KAAKyW,GAAK,IAAM3Z,EAAI,IAAMA,EAAI,WAAasvB,EAAME,EAAMH,EAAMI,GAAQ,KAAOvsB,KAAKurB,IAAMzoB,EAAKgqB,EAAMb,GAAO,KAAOjsB,KAAKwrB,IAAMzoB,EAAK+pB,EAAMZ,QApBtIlsB,KAAKyW,GAAK,KAAOzW,KAAKurB,IAAMzoB,GAAM,KAAO9C,KAAKwrB,IAAMzoB,UAuBxDgqB,IAAK,SAASlvB,EAAG3B,EAAGY,EAAGsI,EAAIhC,EAAI4pB,GAC7BnvB,GAAKA,EAAG3B,GAAKA,EAAW8wB,IAAQA,EAChC,IAAIjnB,GADYjJ,GAAKA,GACR/B,KAAKiY,IAAI5N,GAClBY,EAAKlJ,EAAI/B,KAAKoY,IAAI/N,GAClBxC,EAAK/E,EAAIkI,EACTlD,EAAK3G,EAAI8J,EACTinB,EAAK,EAAID,EACTE,EAAKF,EAAM5nB,EAAKhC,EAAKA,EAAKgC,EAG9B,GAAItI,EAAI,EAAG,MAAM,IAAIsC,MAAM,oBAAsBtC,GAGhC,OAAbkD,KAAKurB,IACPvrB,KAAKyW,GAAK,IAAM7T,EAAK,IAAMC,GAIpB9H,KAAKK,IAAI4E,KAAKurB,IAAM3oB,GAnGnB,MAmGoC7H,KAAKK,IAAI4E,KAAKwrB,IAAM3oB,GAnGxD,QAoGR7C,KAAKyW,GAAK,IAAM7T,EAAK,IAAMC,GAIxB/F,IAGDowB,EAAK,IAAGA,EAAKA,EAAKra,GAAMA,IAGxBqa,EAAK/B,GACPnrB,KAAKyW,GAAK,IAAM3Z,EAAI,IAAMA,EAAI,QAAUmwB,EAAK,KAAOpvB,EAAIkI,GAAM,KAAO7J,EAAI8J,GAAM,IAAMlJ,EAAI,IAAMA,EAAI,QAAUmwB,EAAK,KAAOjtB,KAAKurB,IAAM3oB,GAAM,KAAO5C,KAAKwrB,IAAM3oB,GAIrJqqB,EAnHC,OAoHRltB,KAAKyW,GAAK,IAAM3Z,EAAI,IAAMA,EAAI,SAAWowB,GAAMva,IAAO,IAAMsa,EAAK,KAAOjtB,KAAKurB,IAAM1tB,EAAIf,EAAI/B,KAAKiY,IAAI5P,IAAO,KAAOpD,KAAKwrB,IAAMtvB,EAAIY,EAAI/B,KAAKoY,IAAI/P,OAGlJ+pB,KAAM,SAAStvB,EAAG3B,EAAGkxB,EAAGxb,GACtB5R,KAAKyW,GAAK,KAAOzW,KAAKqrB,IAAMrrB,KAAKurB,KAAO1tB,GAAK,KAAOmC,KAAKsrB,IAAMtrB,KAAKwrB,KAAOtvB,GAAK,MAAQkxB,EAAK,MAAQxb,EAAK,KAAQwb,EAAK,KAEzHvuB,SAAU,WACR,OAAOmB,KAAKyW,I,UC7HJjZ,MAAM0C,UAEOvC,MCIzB,SAAS+e,GAAI2Q,EAAMxvB,EAAG3B,EAAGH,GACvB,GAAIS,MAAMqB,IAAMrB,MAAMN,GAAI,OAAOmxB,EAEjC,IAAIhnB,EAOAinB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAtwB,EACAgI,EAbAkU,EAAO8T,EAAKO,MACZC,EAAO,CAACvY,KAAMvZ,GACd6G,EAAKyqB,EAAKhC,IACVxoB,EAAKwqB,EAAK/B,IACVxoB,EAAKuqB,EAAK9B,IACVxoB,EAAKsqB,EAAK7B,IAWd,IAAKjS,EAAM,OAAO8T,EAAKO,MAAQC,EAAMR,EAGrC,KAAO9T,EAAKhc,QAGV,IAFImwB,EAAQ7vB,IAAMyvB,GAAM1qB,EAAKE,GAAM,IAAIF,EAAK0qB,EAASxqB,EAAKwqB,GACtDK,EAASzxB,IAAMqxB,GAAM1qB,EAAKE,GAAM,IAAIF,EAAK0qB,EAASxqB,EAAKwqB,EACvDlnB,EAASkT,IAAQA,EAAOA,EAAKlc,EAAIswB,GAAU,EAAID,IAAS,OAAOrnB,EAAOhJ,GAAKwwB,EAAMR,EAMvF,GAFAG,GAAMH,EAAKS,GAAGpX,KAAK,KAAM6C,EAAKjE,MAC9BmY,GAAMJ,EAAKU,GAAGrX,KAAK,KAAM6C,EAAKjE,MAC1BzX,IAAM2vB,GAAMtxB,IAAMuxB,EAAI,OAAOI,EAAKzU,KAAOG,EAAMlT,EAASA,EAAOhJ,GAAKwwB,EAAOR,EAAKO,MAAQC,EAAMR,EAGlG,GACEhnB,EAASA,EAASA,EAAOhJ,GAAK,IAAIG,MAAM,GAAK6vB,EAAKO,MAAQ,IAAIpwB,MAAM,IAChEkwB,EAAQ7vB,IAAMyvB,GAAM1qB,EAAKE,GAAM,IAAIF,EAAK0qB,EAASxqB,EAAKwqB,GACtDK,EAASzxB,IAAMqxB,GAAM1qB,EAAKE,GAAM,IAAIF,EAAK0qB,EAASxqB,EAAKwqB,SACnDlwB,EAAIswB,GAAU,EAAID,KAAYroB,GAAKooB,GAAMF,IAAO,EAAKC,GAAMF,IACrE,OAAOjnB,EAAOhB,GAAKkU,EAAMlT,EAAOhJ,GAAKwwB,EAAMR,EC9C9B,ICAA,YAAS9T,EAAM3W,EAAIC,EAAIC,EAAIC,GACxC/C,KAAKuZ,KAAOA,EACZvZ,KAAK4C,GAAKA,EACV5C,KAAK6C,GAAKA,EACV7C,KAAK8C,GAAKA,EACV9C,KAAK+C,GAAKA,GCLL,SAASirB,GAASjyB,GACvB,OAAOA,EAAE,GCDJ,SAASkyB,GAASlyB,GACvB,OAAOA,EAAE,GCYI,SAASmyB,GAASrL,EAAOhlB,EAAG3B,GACzC,IAAImxB,EAAO,IAAIc,GAAc,MAALtwB,EAAYmwB,GAAWnwB,EAAQ,MAAL3B,EAAY+xB,GAAW/xB,EAAG8I,IAAKA,IAAKA,IAAKA,KAC3F,OAAgB,MAAT6d,EAAgBwK,EAAOA,EAAKe,OAAOvL,GAG5C,SAASsL,GAAStwB,EAAG3B,EAAG0G,EAAIC,EAAIC,EAAIC,GAClC/C,KAAK8tB,GAAKjwB,EACVmC,KAAK+tB,GAAK7xB,EACV8D,KAAKqrB,IAAMzoB,EACX5C,KAAKsrB,IAAMzoB,EACX7C,KAAKurB,IAAMzoB,EACX9C,KAAKwrB,IAAMzoB,EACX/C,KAAK4tB,WAAQ3tB,EAGf,SAASouB,GAAUR,GAEjB,IADA,IAAIzb,EAAO,CAACkD,KAAMuY,EAAKvY,MAAO8D,EAAOhH,EAC9Byb,EAAOA,EAAKzU,MAAMA,EAAOA,EAAKA,KAAO,CAAC9D,KAAMuY,EAAKvY,MACxD,OAAOlD,EAGT,IAAIkc,GAAYJ,GAAShuB,UAAYiuB,GAASjuB,UAE9CouB,GAAUlc,KAAO,WACf,IAEIyQ,EACA3J,EAHA9G,EAAO,IAAI+b,GAASnuB,KAAK8tB,GAAI9tB,KAAK+tB,GAAI/tB,KAAKqrB,IAAKrrB,KAAKsrB,IAAKtrB,KAAKurB,IAAKvrB,KAAKwrB,KACzEjS,EAAOvZ,KAAK4tB,MAIhB,IAAKrU,EAAM,OAAOnH,EAElB,IAAKmH,EAAKhc,OAAQ,OAAO6U,EAAKwb,MAAQS,GAAU9U,GAAOnH,EAGvD,IADAyQ,EAAQ,CAAC,CAAC0L,OAAQhV,EAAMiV,OAAQpc,EAAKwb,MAAQ,IAAIpwB,MAAM,KAChD+b,EAAOsJ,EAAMne,OAClB,IAAK,IAAIrH,EAAI,EAAGA,EAAI,IAAKA,GACnB6b,EAAQK,EAAKgV,OAAOlxB,MAClB6b,EAAM3b,OAAQslB,EAAMxgB,KAAK,CAACksB,OAAQrV,EAAOsV,OAAQjV,EAAKiV,OAAOnxB,GAAK,IAAIG,MAAM,KAC3E+b,EAAKiV,OAAOnxB,GAAKgxB,GAAUnV,IAKtC,OAAO9G,GAGTkc,GAAU5R,IL3DK,SAAS3gB,GACtB,IAAI8B,GAAKmC,KAAK8tB,GAAGpX,KAAK,KAAM3a,GACxBG,GAAK8D,KAAK+tB,GAAGrX,KAAK,KAAM3a,GAC5B,OAAO2gB,GAAI1c,KAAKyuB,MAAM5wB,EAAG3B,GAAI2B,EAAG3B,EAAGH,IKyDrCuyB,GAAUF,OLXH,SAAgB9Y,GACrB,IAAIvZ,EAAGsB,EACHQ,EACA3B,EAFMoB,EAAIgY,EAAK/X,OAGfmxB,EAAK,IAAIlxB,MAAMF,GACfqxB,EAAK,IAAInxB,MAAMF,GACfsF,EAAKkU,IACLjU,EAAKiU,IACLhU,GAAMgU,IACN/T,GAAM+T,IAGV,IAAKzZ,EAAI,EAAGA,EAAIC,IAAKD,EACfb,MAAMqB,GAAKmC,KAAK8tB,GAAGpX,KAAK,KAAM3a,EAAIuZ,EAAKjY,MAAQb,MAAMN,GAAK8D,KAAK+tB,GAAGrX,KAAK,KAAM3a,MACjF2yB,EAAGrxB,GAAKQ,EACR8wB,EAAGtxB,GAAKnB,EACJ2B,EAAI+E,IAAIA,EAAK/E,GACbA,EAAIiF,IAAIA,EAAKjF,GACb3B,EAAI2G,IAAIA,EAAK3G,GACbA,EAAI6G,IAAIA,EAAK7G,IAInB,GAAI0G,EAAKE,GAAMD,EAAKE,EAAI,OAAO/C,KAM/B,IAHAA,KAAKyuB,MAAM7rB,EAAIC,GAAI4rB,MAAM3rB,EAAIC,GAGxB1F,EAAI,EAAGA,EAAIC,IAAKD,EACnBqf,GAAI1c,KAAM0uB,EAAGrxB,GAAIsxB,EAAGtxB,GAAIiY,EAAKjY,IAG/B,OAAO2C,MKrBTsuB,GAAUG,MJ7DK,SAAS5wB,EAAG3B,GACzB,GAAIM,MAAMqB,GAAKA,IAAMrB,MAAMN,GAAKA,GAAI,OAAO8D,KAE3C,IAAI4C,EAAK5C,KAAKqrB,IACVxoB,EAAK7C,KAAKsrB,IACVxoB,EAAK9C,KAAKurB,IACVxoB,EAAK/C,KAAKwrB,IAKd,GAAIhvB,MAAMoG,GACRE,GAAMF,EAAK7H,KAAKG,MAAM2C,IAAM,EAC5BkF,GAAMF,EAAK9H,KAAKG,MAAMgB,IAAM,MAIzB,CAMH,IALA,IAEImK,EACAhJ,EAHA6D,EAAI4B,EAAKF,EACT2W,EAAOvZ,KAAK4tB,MAIThrB,EAAK/E,GAAKA,GAAKiF,GAAMD,EAAK3G,GAAKA,GAAK6G,GAGzC,OAFA1F,GAAKnB,EAAI2G,IAAO,EAAKhF,EAAI+E,GACzByD,EAAS,IAAI7I,MAAM,IAAWH,GAAKkc,EAAMA,EAAOlT,EAAQnF,GAAK,EACrD7D,GACN,KAAK,EAAGyF,EAAKF,EAAK1B,EAAG6B,EAAKF,EAAK3B,EAAG,MAClC,KAAK,EAAG0B,EAAKE,EAAK5B,EAAG6B,EAAKF,EAAK3B,EAAG,MAClC,KAAK,EAAG4B,EAAKF,EAAK1B,EAAG2B,EAAKE,EAAK7B,EAAG,MAClC,KAAK,EAAG0B,EAAKE,EAAK5B,EAAG2B,EAAKE,EAAK7B,EAI/BlB,KAAK4tB,OAAS5tB,KAAK4tB,MAAMrwB,SAAQyC,KAAK4tB,MAAQrU,GAOpD,OAJAvZ,KAAKqrB,IAAMzoB,EACX5C,KAAKsrB,IAAMzoB,EACX7C,KAAKurB,IAAMzoB,EACX9C,KAAKwrB,IAAMzoB,EACJ/C,MIqBTsuB,GAAUhZ,KC9DK,WACb,IAAIA,EAAO,GAIX,OAHAtV,KAAK4uB,OAAM,SAASrV,GAClB,IAAKA,EAAKhc,OAAQ,GAAG+X,EAAKjT,KAAKkX,EAAKjE,YAAciE,EAAOA,EAAKH,SAEzD9D,GD0DTgZ,GAAUO,OE/DK,SAASpY,GACtB,OAAOlF,UAAUhU,OACXyC,KAAKyuB,OAAOhY,EAAE,GAAG,IAAKA,EAAE,GAAG,IAAIgY,OAAOhY,EAAE,GAAG,IAAKA,EAAE,GAAG,IACrDja,MAAMwD,KAAKqrB,UAAOprB,EAAY,CAAC,CAACD,KAAKqrB,IAAKrrB,KAAKsrB,KAAM,CAACtrB,KAAKurB,IAAKvrB,KAAKwrB,OF6D7E8C,GAAUQ,KG9DK,SAASjxB,EAAG3B,EAAG6yB,GAC5B,IAAIzZ,EAGAxS,EACAC,EACA+oB,EACAC,EAKA7E,EACA7pB,EAXAuF,EAAK5C,KAAKqrB,IACVxoB,EAAK7C,KAAKsrB,IAKV0D,EAAKhvB,KAAKurB,IACV0D,EAAKjvB,KAAKwrB,IACV0D,EAAQ,GACR3V,EAAOvZ,KAAK4tB,MAYhB,IARIrU,GAAM2V,EAAM7sB,KAAK,IAAI8sB,GAAK5V,EAAM3W,EAAIC,EAAImsB,EAAIC,IAClC,MAAVF,EAAgBA,EAASjY,KAE3BlU,EAAK/E,EAAIkxB,EAAQlsB,EAAK3G,EAAI6yB,EAC1BC,EAAKnxB,EAAIkxB,EAAQE,EAAK/yB,EAAI6yB,EAC1BA,GAAUA,GAGL7H,EAAIgI,EAAMxqB,OAGf,OAAM6U,EAAO2N,EAAE3N,QACPzW,EAAKokB,EAAEtkB,IAAMosB,IACbjsB,EAAKmkB,EAAErkB,IAAMosB,IACbnD,EAAK5E,EAAEpkB,IAAMF,IACbmpB,EAAK7E,EAAEnkB,IAAMF,GAGrB,GAAI0W,EAAKhc,OAAQ,CACf,IAAI+vB,GAAMxqB,EAAKgpB,GAAM,EACjByB,GAAMxqB,EAAKgpB,GAAM,EAErBmD,EAAM7sB,KACJ,IAAI8sB,GAAK5V,EAAK,GAAI+T,EAAIC,EAAIzB,EAAIC,GAC9B,IAAIoD,GAAK5V,EAAK,GAAIzW,EAAIyqB,EAAID,EAAIvB,GAC9B,IAAIoD,GAAK5V,EAAK,GAAI+T,EAAIvqB,EAAI+oB,EAAIyB,GAC9B,IAAI4B,GAAK5V,EAAK,GAAIzW,EAAIC,EAAIuqB,EAAIC,KAI5BlwB,GAAKnB,GAAKqxB,IAAO,EAAK1vB,GAAKyvB,KAC7BpG,EAAIgI,EAAMA,EAAM3xB,OAAS,GACzB2xB,EAAMA,EAAM3xB,OAAS,GAAK2xB,EAAMA,EAAM3xB,OAAS,EAAIF,GACnD6xB,EAAMA,EAAM3xB,OAAS,EAAIF,GAAK6pB,OAK7B,CACH,IAAInhB,EAAKlI,GAAKmC,KAAK8tB,GAAGpX,KAAK,KAAM6C,EAAKjE,MAClCtP,EAAK9J,GAAK8D,KAAK+tB,GAAGrX,KAAK,KAAM6C,EAAKjE,MAClC8Z,EAAKrpB,EAAKA,EAAKC,EAAKA,EACxB,GAAIopB,EAAKL,EAAQ,CACf,IAAIhzB,EAAIhB,KAAKwY,KAAKwb,EAASK,GAC3BxsB,EAAK/E,EAAI9B,EAAG8G,EAAK3G,EAAIH,EACrBizB,EAAKnxB,EAAI9B,EAAGkzB,EAAK/yB,EAAIH,EACrBuZ,EAAOiE,EAAKjE,MAKlB,OAAOA,GHHTgZ,GAAUhY,OIjEK,SAASva,GACtB,GAAIS,MAAMqB,GAAKmC,KAAK8tB,GAAGpX,KAAK,KAAM3a,KAAOS,MAAMN,GAAK8D,KAAK+tB,GAAGrX,KAAK,KAAM3a,IAAK,OAAOiE,KAEnF,IAAIqG,EAEAgpB,EACA3N,EACAtI,EAKAvb,EACA3B,EACAoxB,EACAC,EACAG,EACAC,EACAtwB,EACAgI,EAfAkU,EAAOvZ,KAAK4tB,MAIZhrB,EAAK5C,KAAKqrB,IACVxoB,EAAK7C,KAAKsrB,IACVxoB,EAAK9C,KAAKurB,IACVxoB,EAAK/C,KAAKwrB,IAWd,IAAKjS,EAAM,OAAOvZ,KAIlB,GAAIuZ,EAAKhc,OAAQ,OAAa,CAG5B,IAFImwB,EAAQ7vB,IAAMyvB,GAAM1qB,EAAKE,GAAM,IAAIF,EAAK0qB,EAASxqB,EAAKwqB,GACtDK,EAASzxB,IAAMqxB,GAAM1qB,EAAKE,GAAM,IAAIF,EAAK0qB,EAASxqB,EAAKwqB,EACrDlnB,EAASkT,IAAMA,EAAOA,EAAKlc,EAAIswB,GAAU,EAAID,IAAS,OAAO1tB,KACnE,IAAKuZ,EAAKhc,OAAQ,OACd8I,EAAQhJ,EAAI,EAAK,IAAMgJ,EAAQhJ,EAAI,EAAK,IAAMgJ,EAAQhJ,EAAI,EAAK,MAAIgyB,EAAWhpB,EAAQhB,EAAIhI,GAIhG,KAAOkc,EAAKjE,OAASvZ,GAAG,GAAM2lB,EAAWnI,IAAMA,EAAOA,EAAKH,MAAO,OAAOpZ,KAIzE,OAHIoZ,EAAOG,EAAKH,cAAaG,EAAKH,KAG9BsI,GAAkBtI,EAAOsI,EAAStI,KAAOA,SAAcsI,EAAStI,KAAOpZ,MAGtEqG,GAGL+S,EAAO/S,EAAOhJ,GAAK+b,SAAc/S,EAAOhJ,IAGnCkc,EAAOlT,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,KACnDkT,KAAUlT,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,MACvDkT,EAAKhc,SACP8xB,EAAUA,EAAShqB,GAAKkU,EACvBvZ,KAAK4tB,MAAQrU,GAGbvZ,OAbaA,KAAK4tB,MAAQxU,EAAMpZ,OJwBzCsuB,GAAUgB,UIRH,SAAmBha,GACxB,IAAK,IAAIjY,EAAI,EAAGC,EAAIgY,EAAK/X,OAAQF,EAAIC,IAAKD,EAAG2C,KAAKsW,OAAOhB,EAAKjY,IAC9D,OAAO2C,MJOTsuB,GAAU3N,KKnEK,WACb,OAAO3gB,KAAK4tB,OLmEdU,GAAUhN,KMpEK,WACb,IAAIA,EAAO,EAIX,OAHAthB,KAAK4uB,OAAM,SAASrV,GAClB,IAAKA,EAAKhc,OAAQ,KAAK+jB,QAAa/H,EAAOA,EAAKH,SAE3CkI,GNgETgN,GAAUM,MOnEK,SAAS/W,GACtB,IAAgBqP,EAAsBhO,EAAOtW,EAAIC,EAAIC,EAAIC,EAArDmsB,EAAQ,GAAO3V,EAAOvZ,KAAK4tB,MAE/B,IADIrU,GAAM2V,EAAM7sB,KAAK,IAAI8sB,GAAK5V,EAAMvZ,KAAKqrB,IAAKrrB,KAAKsrB,IAAKtrB,KAAKurB,IAAKvrB,KAAKwrB,MAChEtE,EAAIgI,EAAMxqB,OACf,IAAKmT,EAAS0B,EAAO2N,EAAE3N,KAAM3W,EAAKskB,EAAEtkB,GAAIC,EAAKqkB,EAAErkB,GAAIC,EAAKokB,EAAEpkB,GAAIC,EAAKmkB,EAAEnkB,KAAOwW,EAAKhc,OAAQ,CACvF,IAAI+vB,GAAM1qB,EAAKE,GAAM,EAAGyqB,GAAM1qB,EAAKE,GAAM,GACrCmW,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOoU,EAAIC,EAAIzqB,EAAIC,KACxDmW,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOtW,EAAI2qB,EAAID,EAAIvqB,KACxDmW,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOoU,EAAIzqB,EAAIC,EAAIyqB,KACxDrU,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOtW,EAAIC,EAAIyqB,EAAIC,IAGhE,OAAOvtB,MPwDTsuB,GAAUiB,WQpEK,SAAS1X,GACtB,IAA2BqP,EAAvBgI,EAAQ,GAAI9V,EAAO,GAEvB,IADIpZ,KAAK4tB,OAAOsB,EAAM7sB,KAAK,IAAI8sB,GAAKnvB,KAAK4tB,MAAO5tB,KAAKqrB,IAAKrrB,KAAKsrB,IAAKtrB,KAAKurB,IAAKvrB,KAAKwrB,MAC5EtE,EAAIgI,EAAMxqB,OAAO,CACtB,IAAI6U,EAAO2N,EAAE3N,KACb,GAAIA,EAAKhc,OAAQ,CACf,IAAI2b,EAAOtW,EAAKskB,EAAEtkB,GAAIC,EAAKqkB,EAAErkB,GAAIC,EAAKokB,EAAEpkB,GAAIC,EAAKmkB,EAAEnkB,GAAIuqB,GAAM1qB,EAAKE,GAAM,EAAGyqB,GAAM1qB,EAAKE,GAAM,GACxFmW,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOtW,EAAIC,EAAIyqB,EAAIC,KACxDrU,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOoU,EAAIzqB,EAAIC,EAAIyqB,KACxDrU,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOtW,EAAI2qB,EAAID,EAAIvqB,KACxDmW,EAAQK,EAAK,KAAI2V,EAAM7sB,KAAK,IAAI8sB,GAAKjW,EAAOoU,EAAIC,EAAIzqB,EAAIC,IAE9DqW,EAAK/W,KAAK6kB,GAEZ,KAAOA,EAAI9N,EAAK1U,OACdmT,EAASqP,EAAE3N,KAAM2N,EAAEtkB,GAAIskB,EAAErkB,GAAIqkB,EAAEpkB,GAAIokB,EAAEnkB,IAEvC,OAAO/C,MRoDTsuB,GAAUzwB,EFnEK,SAAS4Y,GACtB,OAAOlF,UAAUhU,QAAUyC,KAAK8tB,GAAKrX,EAAGzW,MAAQA,KAAK8tB,IEmEvDQ,GAAUpyB,EDpEK,SAASua,GACtB,OAAOlF,UAAUhU,QAAUyC,KAAK+tB,GAAKtX,EAAGzW,MAAQA,KAAK+tB,IUQpChzB,KAAK6X,GAAU7X,KAAKwY,KAAK,GAD5C,I,0BCZe,cACb,OAAOxY,KAAKy0B,UCCC,ICAA,SAAUC,EAAoBlB,GAC3C,SAASmB,EAAcz0B,EAAKD,GAK1B,OAJAC,EAAa,MAAPA,EAAc,GAAKA,EACzBD,EAAa,MAAPA,EAAc,GAAKA,EACA,IAArBuW,UAAUhU,QAAcvC,EAAMC,EAAKA,EAAM,GACxCD,GAAOC,EACL,WACL,OAAOszB,IAAWvzB,EAAMC,GAM5B,OAFAy0B,EAAcnB,OAASkB,EAEhBC,EAbM,CAcZC,IDdY,SAAUC,EAAmBrB,GAC1C,SAASsB,EAAaC,EAAIC,GACxB,IAAIlyB,EAAGf,EAGP,OAFAgzB,EAAW,MAANA,EAAa,GAAKA,EACvBC,EAAiB,MAATA,EAAgB,GAAKA,EACtB,WACL,IAAI7zB,EAGJ,GAAS,MAAL2B,EAAW3B,EAAI2B,EAAGA,EAAI,UAGrB,GACHA,EAAe,EAAX0wB,IAAe,EACnBryB,EAAe,EAAXqyB,IAAe,EACnBzxB,EAAIe,EAAIA,EAAI3B,EAAIA,SACRY,GAAKA,EAAI,GAEnB,OAAOgzB,EAAKC,EAAQ7zB,EAAInB,KAAKwY,MAAM,EAAIxY,KAAKuY,IAAIxW,GAAKA,IAMzD,OAFA+yB,EAAatB,OAASqB,EAEfC,EAxBM,CAyBZF,KEzBY,ICCA,SAAUK,EAAsBzB,GAC7C,SAAS0B,IACP,IAAIJ,EAAeK,GAAO3B,OAAOA,GAAQ5Z,MAAM3U,KAAMuR,WACrD,OAAO,WACL,OAAOxW,KAAKsY,IAAIwc,MAMpB,OAFAI,EAAgB1B,OAASyB,EAElBC,EAVM,CAWZN,IDZY,SAAUQ,EAAsB5B,GAC7C,SAAS6B,EAAgB9yB,GACvB,OAAO,WACL,IAAK,IAAI+yB,EAAM,EAAGhzB,EAAI,EAAGA,EAAIC,IAAKD,EAAGgzB,GAAO9B,IAC5C,OAAO8B,GAMX,OAFAD,EAAgB7B,OAAS4B,EAElBC,EAVM,CAWZT,K,IEVY,SAAUW,EAAkB/B,GACzC,SAASgC,EAAYjzB,GACnB,IAAI8yB,EAAkBI,GAAUjC,OAAOA,EAAjBiC,CAAyBlzB,GAC/C,OAAO,WACL,OAAO8yB,IAAoB9yB,GAM/B,OAFAizB,EAAYhC,OAAS+B,EAEdC,EAVM,CAWZZ,ICZY,SAAUc,EAAwBlC,GAC/C,SAASmC,EAAkBC,GACzB,OAAO,WACL,OAAQ51B,KAAKuY,IAAI,EAAIib,KAAYoC,GAMrC,OAFAD,EAAkBnC,OAASkC,EAEpBC,EATM,CAUZf,I,WCVY,YAASvX,GACtB,MAA2B,iBAAbA,EACR,IAAIwI,GAAU,CAACxF,SAAS7C,iBAAiBH,IAAY,CAACgD,SAAS6C,kBAC/D,IAAI2C,GAAU,CAAa,MAAZxI,EAAmB,GAAKA,GAAWuI,KCL1D,SAASiQ,KACP5wB,KAAKyW,EAAI,KAGJ,SAASoa,GAAatX,GAC3BA,EAAKuX,EACLvX,EAAKwX,EACLxX,EAAKyX,EACLzX,EAAK0X,EACL1X,EAAK2X,EACL3X,EAAK4X,EAAI,KAuLX,SAASC,GAAmB/D,EAAM9T,GAChC,IAAIjY,EAAIiY,EACJ2N,EAAI3N,EAAK0X,EACT5qB,EAAS/E,EAAEwvB,EAEXzqB,EACEA,EAAO2qB,IAAM1vB,EAAG+E,EAAO2qB,EAAI9J,EAC1B7gB,EAAO4qB,EAAI/J,EAEhBmG,EAAK5W,EAAIyQ,EAGXA,EAAE4J,EAAIzqB,EACN/E,EAAEwvB,EAAI5J,EACN5lB,EAAE2vB,EAAI/J,EAAE8J,EACJ1vB,EAAE2vB,IAAG3vB,EAAE2vB,EAAEH,EAAIxvB,GACjB4lB,EAAE8J,EAAI1vB,EAGR,SAAS+vB,GAAoBhE,EAAM9T,GACjC,IAAIjY,EAAIiY,EACJ2N,EAAI3N,EAAKyX,EACT3qB,EAAS/E,EAAEwvB,EAEXzqB,EACEA,EAAO2qB,IAAM1vB,EAAG+E,EAAO2qB,EAAI9J,EAC1B7gB,EAAO4qB,EAAI/J,EAEhBmG,EAAK5W,EAAIyQ,EAGXA,EAAE4J,EAAIzqB,EACN/E,EAAEwvB,EAAI5J,EACN5lB,EAAE0vB,EAAI9J,EAAE+J,EACJ3vB,EAAE0vB,IAAG1vB,EAAE0vB,EAAEF,EAAIxvB,GACjB4lB,EAAE+J,EAAI3vB,EAGR,SAASgwB,GAAc/X,GACrB,KAAOA,EAAKyX,GAAGzX,EAAOA,EAAKyX,EAC3B,OAAOzX,EA5NTqX,GAAa1wB,UAAY,CACvBgG,YAAa0qB,GAEb3a,OAAQ,SAASsb,EAAOhY,GACtB,IAAIlT,EAAQmrB,EAASC,EAErB,GAAIF,EAAO,CAKT,GAJAhY,EAAK2X,EAAIK,EACThY,EAAK4X,EAAII,EAAMJ,EACXI,EAAMJ,IAAGI,EAAMJ,EAAED,EAAI3X,GACzBgY,EAAMJ,EAAI5X,EACNgY,EAAMN,EAAG,CAEX,IADAM,EAAQA,EAAMN,EACPM,EAAMP,GAAGO,EAAQA,EAAMP,EAC9BO,EAAMP,EAAIzX,OAEVgY,EAAMN,EAAI1X,EAEZlT,EAASkrB,OACAvxB,KAAKyW,GACd8a,EAAQD,GAActxB,KAAKyW,GAC3B8C,EAAK2X,EAAI,KACT3X,EAAK4X,EAAII,EACTA,EAAML,EAAIK,EAAMP,EAAIzX,EACpBlT,EAASkrB,IAEThY,EAAK2X,EAAI3X,EAAK4X,EAAI,KAClBnxB,KAAKyW,EAAI8C,EACTlT,EAAS,MAOX,IALAkT,EAAKyX,EAAIzX,EAAK0X,EAAI,KAClB1X,EAAKuX,EAAIzqB,EACTkT,EAAKwX,GAAI,EAETQ,EAAQhY,EACDlT,GAAUA,EAAO0qB,GAElB1qB,KADJmrB,EAAUnrB,EAAOyqB,GACME,GACrBS,EAAQD,EAAQP,IACHQ,EAAMV,GACjB1qB,EAAO0qB,EAAIU,EAAMV,GAAI,EACrBS,EAAQT,GAAI,EACZQ,EAAQC,IAEJD,IAAUlrB,EAAO4qB,IACnBG,GAAmBpxB,KAAMqG,GAEzBA,GADAkrB,EAAQlrB,GACOyqB,GAEjBzqB,EAAO0qB,GAAI,EACXS,EAAQT,GAAI,EACZM,GAAoBrxB,KAAMwxB,KAG5BC,EAAQD,EAAQR,IACHS,EAAMV,GACjB1qB,EAAO0qB,EAAIU,EAAMV,GAAI,EACrBS,EAAQT,GAAI,EACZQ,EAAQC,IAEJD,IAAUlrB,EAAO2qB,IACnBK,GAAoBrxB,KAAMqG,GAE1BA,GADAkrB,EAAQlrB,GACOyqB,GAEjBzqB,EAAO0qB,GAAI,EACXS,EAAQT,GAAI,EACZK,GAAmBpxB,KAAMwxB,IAG7BnrB,EAASkrB,EAAMT,EAEjB9wB,KAAKyW,EAAEsa,GAAI,GAGbza,OAAQ,SAASiD,GACXA,EAAK4X,IAAG5X,EAAK4X,EAAED,EAAI3X,EAAK2X,GACxB3X,EAAK2X,IAAG3X,EAAK2X,EAAEC,EAAI5X,EAAK4X,GAC5B5X,EAAK4X,EAAI5X,EAAK2X,EAAI,KAElB,IACIQ,EAGAtY,EACAtK,EALAzI,EAASkT,EAAKuX,EAEda,EAAOpY,EAAKyX,EACZtD,EAAQnU,EAAK0X,EAsCjB,GAhCK7X,EAFAuY,EACKjE,EACE4D,GAAc5D,GADFiE,EADNjE,EAIdrnB,EACEA,EAAO2qB,IAAMzX,EAAMlT,EAAO2qB,EAAI5X,EAC7B/S,EAAO4qB,EAAI7X,EAEhBpZ,KAAKyW,EAAI2C,EAGPuY,GAAQjE,GACV5e,EAAMsK,EAAK2X,EACX3X,EAAK2X,EAAIxX,EAAKwX,EACd3X,EAAK4X,EAAIW,EACTA,EAAKb,EAAI1X,EACLA,IAASsU,GACXrnB,EAAS+S,EAAK0X,EACd1X,EAAK0X,EAAIvX,EAAKuX,EACdvX,EAAOH,EAAK6X,EACZ5qB,EAAO2qB,EAAIzX,EACXH,EAAK6X,EAAIvD,EACTA,EAAMoD,EAAI1X,IAEVA,EAAK0X,EAAIzqB,EACTA,EAAS+S,EACTG,EAAOH,EAAK6X,KAGdniB,EAAMyK,EAAKwX,EACXxX,EAAOH,GAGLG,IAAMA,EAAKuX,EAAIzqB,IACfyI,EACJ,GAAIyK,GAAQA,EAAKwX,EAAKxX,EAAKwX,GAAI,MAA/B,CAEA,EAAG,CACD,GAAIxX,IAASvZ,KAAKyW,EAAG,MACrB,GAAI8C,IAASlT,EAAO2qB,GAQlB,IAPAU,EAAUrrB,EAAO4qB,GACLF,IACVW,EAAQX,GAAI,EACZ1qB,EAAO0qB,GAAI,EACXK,GAAmBpxB,KAAMqG,GACzBqrB,EAAUrrB,EAAO4qB,GAEdS,EAAQV,GAAKU,EAAQV,EAAED,GACpBW,EAAQT,GAAKS,EAAQT,EAAEF,EAAI,CAC5BW,EAAQT,GAAMS,EAAQT,EAAEF,IAC3BW,EAAQV,EAAED,GAAI,EACdW,EAAQX,GAAI,EACZM,GAAoBrxB,KAAM0xB,GAC1BA,EAAUrrB,EAAO4qB,GAEnBS,EAAQX,EAAI1qB,EAAO0qB,EACnB1qB,EAAO0qB,EAAIW,EAAQT,EAAEF,GAAI,EACzBK,GAAmBpxB,KAAMqG,GACzBkT,EAAOvZ,KAAKyW,EACZ,YAUF,IAPAib,EAAUrrB,EAAO2qB,GACLD,IACVW,EAAQX,GAAI,EACZ1qB,EAAO0qB,GAAI,EACXM,GAAoBrxB,KAAMqG,GAC1BqrB,EAAUrrB,EAAO2qB,GAEdU,EAAQV,GAAKU,EAAQV,EAAED,GACtBW,EAAQT,GAAKS,EAAQT,EAAEF,EAAI,CAC1BW,EAAQV,GAAMU,EAAQV,EAAED,IAC3BW,EAAQT,EAAEF,GAAI,EACdW,EAAQX,GAAI,EACZK,GAAmBpxB,KAAM0xB,GACzBA,EAAUrrB,EAAO2qB,GAEnBU,EAAQX,EAAI1qB,EAAO0qB,EACnB1qB,EAAO0qB,EAAIW,EAAQV,EAAED,GAAI,EACzBM,GAAoBrxB,KAAMqG,GAC1BkT,EAAOvZ,KAAKyW,EACZ,MAGJib,EAAQX,GAAI,EACZxX,EAAOlT,EACPA,EAASA,EAAOyqB,SACRvX,EAAKwX,GAEXxX,IAAMA,EAAKwX,GAAI,MA+CRH,UC1OR,SAASgB,GAAWD,EAAMjE,EAAOnyB,EAAIC,GAC1C,IAAIq2B,EAAO,CAAC,KAAM,MACd3S,EAAQ4S,GAAMzvB,KAAKwvB,GAAQ,EAO/B,OANAA,EAAKF,KAAOA,EACZE,EAAKnE,MAAQA,EACTnyB,GAAIw2B,GAAWF,EAAMF,EAAMjE,EAAOnyB,GAClCC,GAAIu2B,GAAWF,EAAMnE,EAAOiE,EAAMn2B,GACtCw2B,GAAML,EAAKzS,OAAO+S,UAAU5vB,KAAK6c,GACjC8S,GAAMtE,EAAMxO,OAAO+S,UAAU5vB,KAAK6c,GAC3B2S,EAGF,SAASK,GAAiBP,EAAMp2B,EAAIC,GACzC,IAAIq2B,EAAO,CAACt2B,EAAIC,GAEhB,OADAq2B,EAAKF,KAAOA,EACLE,EAGF,SAASE,GAAWF,EAAMF,EAAMjE,EAAOyE,GACvCN,EAAK,IAAOA,EAAK,GAIXA,EAAKF,OAASjE,EACvBmE,EAAK,GAAKM,EAEVN,EAAK,GAAKM,GANVN,EAAK,GAAKM,EACVN,EAAKF,KAAOA,EACZE,EAAKnE,MAAQA,GASjB,SAAS0E,GAASP,EAAMjvB,EAAIC,EAAIC,EAAIC,GAClC,IAUIjG,EAVAhB,EAAI+1B,EAAK,GACTz1B,EAAIy1B,EAAK,GACTjsB,EAAK9J,EAAE,GACP+J,EAAK/J,EAAE,GAGPgK,EAAK,EACLxK,EAAK,EACLyK,EAJK3J,EAAE,GAIGwJ,EACVI,EAJK5J,EAAE,GAIGyJ,EAId,GADA/I,EAAI8F,EAAKgD,EACJG,KAAMjJ,EAAI,GAAf,CAEA,GADAA,GAAKiJ,EACDA,EAAK,EAAG,CACV,GAAIjJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,QACZ,GAAIiJ,EAAK,EAAG,CACjB,GAAIjJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,GAInB,GADAA,EAAIgG,EAAK8C,EACJG,KAAMjJ,EAAI,GAAf,CAEA,GADAA,GAAKiJ,EACDA,EAAK,EAAG,CACV,GAAIjJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,QACZ,GAAIiJ,EAAK,EAAG,CACjB,GAAIjJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,GAInB,GADAA,EAAI+F,EAAKgD,EACJG,KAAMlJ,EAAI,GAAf,CAEA,GADAA,GAAKkJ,EACDA,EAAK,EAAG,CACV,GAAIlJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,QACZ,GAAIkJ,EAAK,EAAG,CACjB,GAAIlJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,GAInB,GADAA,EAAIiG,EAAK8C,EACJG,KAAMlJ,EAAI,GAAf,CAEA,GADAA,GAAKkJ,EACDA,EAAK,EAAG,CACV,GAAIlJ,EAAIxB,EAAI,OACRwB,EAAIgJ,IAAIA,EAAKhJ,QACZ,GAAIkJ,EAAK,EAAG,CACjB,GAAIlJ,EAAIgJ,EAAI,OACRhJ,EAAIxB,IAAIA,EAAKwB,GAGnB,QAAMgJ,EAAK,GAAQxK,EAAK,KAEpBwK,EAAK,IAAG+rB,EAAK,GAAK,CAACjsB,EAAKE,EAAKC,EAAIF,EAAKC,EAAKE,IAC3C1K,EAAK,IAAGu2B,EAAK,GAAK,CAACjsB,EAAKtK,EAAKyK,EAAIF,EAAKvK,EAAK0K,KACxC,OAGT,SAASqsB,GAAYR,EAAMjvB,EAAIC,EAAIC,EAAIC,GACrC,IAAIvH,EAAKq2B,EAAK,GACd,GAAIr2B,EAAI,OAAO,EAEf,IASI82B,EACAC,EAVAh3B,EAAKs2B,EAAK,GACVF,EAAOE,EAAKF,KACZjE,EAAQmE,EAAKnE,MACb8E,EAAKb,EAAK,GACVc,EAAKd,EAAK,GACVe,EAAKhF,EAAM,GACXiF,EAAKjF,EAAM,GACXkF,GAAMJ,EAAKE,GAAM,EACjBG,GAAMJ,EAAKE,GAAM,EAIrB,GAAIA,IAAOF,EAAI,CACb,GAAIG,EAAKhwB,GAAMgwB,GAAM9vB,EAAI,OACzB,GAAI0vB,EAAKE,EAAI,CACX,GAAKn3B,GACA,GAAIA,EAAG,IAAMwH,EAAI,YADbxH,EAAK,CAACq3B,EAAI/vB,GAEnBrH,EAAK,CAACo3B,EAAI7vB,OACL,CACL,GAAKxH,GACA,GAAIA,EAAG,GAAKsH,EAAI,YADZtH,EAAK,CAACq3B,EAAI7vB,GAEnBvH,EAAK,CAACo3B,EAAI/vB,SAKZ,GADA0vB,EAAKM,GADLP,GAAME,EAAKE,IAAOC,EAAKF,IACRG,EACXN,GAAM,GAAKA,EAAK,EAClB,GAAIE,EAAKE,EAAI,CACX,GAAKn3B,GACA,GAAIA,EAAG,IAAMwH,EAAI,YADbxH,EAAK,EAAEsH,EAAK0vB,GAAMD,EAAIzvB,GAE/BrH,EAAK,EAAEuH,EAAKwvB,GAAMD,EAAIvvB,OACjB,CACL,GAAKxH,GACA,GAAIA,EAAG,GAAKsH,EAAI,YADZtH,EAAK,EAAEwH,EAAKwvB,GAAMD,EAAIvvB,GAE/BvH,EAAK,EAAEqH,EAAK0vB,GAAMD,EAAIzvB,QAGxB,GAAI4vB,EAAKE,EAAI,CACX,GAAKp3B,GACA,GAAIA,EAAG,IAAMuH,EAAI,YADbvH,EAAK,CAACqH,EAAI0vB,EAAK1vB,EAAK2vB,GAE7B/2B,EAAK,CAACsH,EAAIwvB,EAAKxvB,EAAKyvB,OACf,CACL,GAAKh3B,GACA,GAAIA,EAAG,GAAKqH,EAAI,YADZrH,EAAK,CAACuH,EAAIwvB,EAAKxvB,EAAKyvB,GAE7B/2B,EAAK,CAACoH,EAAI0vB,EAAK1vB,EAAK2vB,GAO1B,OAFAV,EAAK,GAAKt2B,EACVs2B,EAAK,GAAKr2B,GACH,EC9IT,SAASs3B,GAAkBC,EAAMlB,GAC/B,IAAImB,EAAOD,EAAKC,KACZC,EAAKpB,EAAKF,KACVuB,EAAKrB,EAAKnE,MAEd,OADIsF,IAASE,IAAIA,EAAKD,EAAIA,EAAKD,GAC3BE,EAAWn4B,KAAKmY,MAAMggB,EAAG,GAAKD,EAAG,GAAIC,EAAG,GAAKD,EAAG,KAChDD,IAASC,GAAIA,EAAKpB,EAAK,GAAIqB,EAAKrB,EAAK,KACpCoB,EAAKpB,EAAK,GAAIqB,EAAKrB,EAAK,IACtB92B,KAAKmY,MAAM+f,EAAG,GAAKC,EAAG,GAAIA,EAAG,GAAKD,EAAG,KAGvC,SAASE,GAAkBJ,EAAMlB,GACtC,OAAOA,IAAOA,EAAKF,OAASoB,EAAKC,OAG5B,SAASI,GAAgBL,EAAMlB,GACpC,OAAOA,IAAOA,EAAKF,OAASoB,EAAKC,OCvBnC,IAEWK,GAFPC,GAAa,GAIjB,SAASC,KACP1C,GAAa7wB,MACbA,KAAKnC,EACLmC,KAAK9D,EACL8D,KAAK+sB,IACL/sB,KAAKgzB,KACLhzB,KAAKwzB,GAAK,KAGL,SAASC,GAAa1G,GAC3B,IAAI2G,EAAO3G,EAAImE,EACXyC,EAAO5G,EAAIoE,EAEf,GAAKuC,GAASC,EAAd,CAEA,IAAIC,EAAQF,EAAKV,KACba,EAAQ9G,EAAIiG,KACZc,EAAQH,EAAKX,KAEjB,GAAIY,IAAUE,EAAd,CAEA,IAAIC,EAAKF,EAAM,GACXG,EAAKH,EAAM,GACXjuB,EAAKguB,EAAM,GAAKG,EAChBluB,EAAK+tB,EAAM,GAAKI,EAChBC,EAAKH,EAAM,GAAKC,EAChBP,EAAKM,EAAM,GAAKE,EAEhBj4B,EAAI,GAAK6J,EAAK4tB,EAAK3tB,EAAKouB,GAC5B,KAAIl4B,IAAMm4B,IAAV,CAEA,IAAIC,EAAKvuB,EAAKA,EAAKC,EAAKA,EACpBuuB,EAAKH,EAAKA,EAAKT,EAAKA,EACpB31B,GAAK21B,EAAKW,EAAKtuB,EAAKuuB,GAAMr4B,EAC1BG,GAAK0J,EAAKwuB,EAAKH,EAAKE,GAAMp4B,EAE1Bs4B,EAASf,GAAW5uB,OAAS,IAAI6uB,GACrCc,EAAOtH,IAAMA,EACbsH,EAAOrB,KAAOa,EACdQ,EAAOx2B,EAAIA,EAAIk2B,EACfM,EAAOn4B,GAAKm4B,EAAOb,GAAKt3B,EAAI83B,GAAMj5B,KAAKwY,KAAK1V,EAAIA,EAAI3B,EAAIA,GAExD6wB,EAAIsH,OAASA,EAKb,IAHA,IAAIlR,EAAS,KACT5J,EAAO+a,GAAQ7d,EAEZ8C,GACL,GAAI8a,EAAOn4B,EAAIqd,EAAKrd,GAAMm4B,EAAOn4B,IAAMqd,EAAKrd,GAAKm4B,EAAOx2B,GAAK0b,EAAK1b,EAAI,CACpE,IAAI0b,EAAKyX,EACJ,CAAE7N,EAAS5J,EAAK2X,EAAG,MADZ3X,EAAOA,EAAKyX,MAEnB,CACL,IAAIzX,EAAK0X,EACJ,CAAE9N,EAAS5J,EAAM,MADVA,EAAOA,EAAK0X,EAK5BqD,GAAQre,OAAOkN,EAAQkR,GAClBlR,IAAQkQ,GAAcgB,MAGtB,SAASE,GAAaxH,GAC3B,IAAIsH,EAAStH,EAAIsH,OACbA,IACGA,EAAOnD,IAAGmC,GAAcgB,EAAOlD,GACpCmD,GAAQhe,OAAO+d,GACff,GAAWjxB,KAAKgyB,GAChBxD,GAAawD,GACbtH,EAAIsH,OAAS,MCrEjB,IAAIG,GAAY,GAEhB,SAASC,KACP5D,GAAa7wB,MACbA,KAAK6xB,KACL7xB,KAAKgzB,KACLhzB,KAAKq0B,OAAS,KAGhB,SAASK,GAAY1B,GACnB,IAAI2B,EAAQH,GAAU9vB,OAAS,IAAI+vB,GAEnC,OADAE,EAAM3B,KAAOA,EACN2B,EAGT,SAASC,GAAYD,GACnBJ,GAAaI,GACbE,GAAQve,OAAOqe,GACfH,GAAUnyB,KAAKsyB,GACf9D,GAAa8D,GAGR,SAASG,GAAYH,GAC1B,IAAIN,EAASM,EAAMN,OACfx2B,EAAIw2B,EAAOx2B,EACX3B,EAAIm4B,EAAOb,GACXrB,EAAS,CAACt0B,EAAG3B,GACbwlB,EAAWiT,EAAMzD,EACjB9X,EAAOub,EAAMxD,EACb4D,EAAe,CAACJ,GAEpBC,GAAYD,GAGZ,IADA,IAAIjB,EAAOhS,EACJgS,EAAKW,QACLt5B,KAAKK,IAAIyC,EAAI61B,EAAKW,OAAOx2B,GAAKqE,IAC9BnH,KAAKK,IAAIc,EAAIw3B,EAAKW,OAAOb,IAAMtxB,IACpCwf,EAAWgS,EAAKxC,EAChB6D,EAAaC,QAAQtB,GACrBkB,GAAYlB,GACZA,EAAOhS,EAGTqT,EAAaC,QAAQtB,GACrBa,GAAab,GAGb,IADA,IAAIC,EAAOva,EACJua,EAAKU,QACLt5B,KAAKK,IAAIyC,EAAI81B,EAAKU,OAAOx2B,GAAKqE,IAC9BnH,KAAKK,IAAIc,EAAIy3B,EAAKU,OAAOb,IAAMtxB,IACpCkX,EAAOua,EAAKxC,EACZ4D,EAAa1yB,KAAKsxB,GAClBiB,GAAYjB,GACZA,EAAOva,EAGT2b,EAAa1yB,KAAKsxB,GAClBY,GAAaZ,GAEb,IACIsB,EADAC,EAAQH,EAAax3B,OAEzB,IAAK03B,EAAO,EAAGA,EAAOC,IAASD,EAC7BtB,EAAOoB,EAAaE,GACpBvB,EAAOqB,EAAaE,EAAO,GAC3BlD,GAAW4B,EAAK9B,KAAM6B,EAAKV,KAAMW,EAAKX,KAAMb,GAG9CuB,EAAOqB,EAAa,IACpBpB,EAAOoB,EAAaG,EAAQ,IACvBrD,KAAOD,GAAW8B,EAAKV,KAAMW,EAAKX,KAAM,KAAMb,GAEnDsB,GAAaC,GACbD,GAAaE,GAGR,SAASwB,GAASnC,GASvB,IARA,IAEIU,EACAC,EACAyB,EACAC,EALAx3B,EAAIm1B,EAAK,GACTsC,EAAYtC,EAAK,GAKjBzZ,EAAOsb,GAAQpe,EAEZ8C,GAEL,IADA6b,EAAMG,GAAehc,EAAM+b,GAAaz3B,GAC9BqE,GAASqX,EAAOA,EAAKyX,MAAQ,CAErC,MADAqE,EAAMx3B,EAAI23B,GAAgBjc,EAAM+b,IACtBpzB,IAMH,CACDkzB,GAAOlzB,IACTwxB,EAAOna,EAAK2X,EACZyC,EAAOpa,GACE8b,GAAOnzB,IAChBwxB,EAAOna,EACPoa,EAAOpa,EAAK4X,GAEZuC,EAAOC,EAAOpa,EAEhB,MAfA,IAAKA,EAAK0X,EAAG,CACXyC,EAAOna,EACP,MAEFA,EAAOA,EAAK0X,GFhGb,SAAoB+B,GAClBhB,GAAMgB,EAAK9T,OAAS,CACzB8T,KAAMA,EACNf,UAAW,IE6GbwD,CAAWzC,GACX,IAAI0C,EAAShB,GAAY1B,GAGzB,GAFA6B,GAAQ5e,OAAOyd,EAAMgC,GAEhBhC,GAASC,EAAd,CAEA,GAAID,IAASC,EAOX,OANAY,GAAab,GACbC,EAAOe,GAAYhB,EAAKV,MACxB6B,GAAQ5e,OAAOyf,EAAQ/B,GACvB+B,EAAO7D,KAAO8B,EAAK9B,KAAOD,GAAW8B,EAAKV,KAAM0C,EAAO1C,MACvDS,GAAaC,QACbD,GAAaE,GAIf,GAAKA,EAAL,CAMAY,GAAab,GACba,GAAaZ,GAEb,IAAIC,EAAQF,EAAKV,KACbptB,EAAKguB,EAAM,GACX/tB,EAAK+tB,EAAM,GACXG,EAAKf,EAAK,GAAKptB,EACfouB,EAAKhB,EAAK,GAAKntB,EACfiuB,EAAQH,EAAKX,KACbiB,EAAKH,EAAM,GAAKluB,EAChB4tB,EAAKM,EAAM,GAAKjuB,EAChB9J,EAAI,GAAKg4B,EAAKP,EAAKQ,EAAKC,GACxB0B,EAAK5B,EAAKA,EAAKC,EAAKA,EACpBI,EAAKH,EAAKA,EAAKT,EAAKA,EACpBrB,EAAS,EAAEqB,EAAKmC,EAAK3B,EAAKI,GAAMr4B,EAAI6J,GAAKmuB,EAAKK,EAAKH,EAAK0B,GAAM55B,EAAI8J,GAEtEksB,GAAW4B,EAAK9B,KAAM+B,EAAOE,EAAO3B,GACpCuD,EAAO7D,KAAOD,GAAWgC,EAAOZ,EAAM,KAAMb,GAC5CwB,EAAK9B,KAAOD,GAAWoB,EAAMc,EAAO,KAAM3B,GAC1CsB,GAAaC,GACbD,GAAaE,QAzBX+B,EAAO7D,KAAOD,GAAW8B,EAAKV,KAAM0C,EAAO1C,OA4B/C,SAASuC,GAAexI,EAAKuI,GAC3B,IAAItC,EAAOjG,EAAIiG,KACX4C,EAAQ5C,EAAK,GACb6C,EAAQ7C,EAAK,GACb8C,EAAOD,EAAQP,EAEnB,IAAKQ,EAAM,OAAOF,EAElB,IAAIlC,EAAO3G,EAAImE,EACf,IAAKwC,EAAM,OAAQ5c,IAGnB,IAAIif,GADJ/C,EAAOU,EAAKV,MACK,GACbgD,EAAQhD,EAAK,GACbiD,EAAQD,EAAQV,EAEpB,IAAKW,EAAO,OAAOF,EAEnB,IAAIG,EAAKH,EAAQH,EACbO,EAAO,EAAIL,EAAO,EAAIG,EACtB75B,EAAI85B,EAAKD,EAEb,OAAIE,IAAe/5B,EAAIrB,KAAKwY,KAAKnX,EAAIA,EAAI,EAAI+5B,GAAQD,EAAKA,IAAO,EAAID,GAASD,EAAQC,EAAQ,EAAIJ,EAAQC,EAAO,KAAOK,EAAOP,GAEvHA,EAAQG,GAAS,EAG3B,SAASP,GAAgBzI,EAAKuI,GAC5B,IAAI3B,EAAO5G,EAAIoE,EACf,GAAIwC,EAAM,OAAO4B,GAAe5B,EAAM2B,GACtC,IAAItC,EAAOjG,EAAIiG,KACf,OAAOA,EAAK,KAAOsC,EAAYtC,EAAK,GAAKlc,ICzLpC,IAEI+d,GACA7C,GACAsC,GACAxC,GALA5vB,GAAU,KACVgyB,GAAW,MAUtB,SAASkC,GAAct6B,EAAGM,GACxB,OAAOA,EAAE,GAAKN,EAAE,IACTM,EAAE,GAAKN,EAAE,GAGH,SAASu6B,GAAQC,EAAOzH,GACrC,IACIhxB,EACA3B,EACAm4B,EAHArB,EAAOsD,EAAMh0B,KAAK8zB,IAAe1xB,MAUrC,IALAotB,GAAQ,GACRE,GAAQ,IAAIx0B,MAAM84B,EAAM/4B,QACxBs3B,GAAU,IAAIjE,GACd0D,GAAU,IAAI1D,KAIZ,GADAyD,EAAShB,GACLL,KAAUqB,GAAUrB,EAAK,GAAKqB,EAAOn4B,GAAM82B,EAAK,KAAOqB,EAAOn4B,GAAK82B,EAAK,GAAKqB,EAAOx2B,GAClFm1B,EAAK,KAAOn1B,GAAKm1B,EAAK,KAAO92B,IAC/Bi5B,GAASnC,GACTn1B,EAAIm1B,EAAK,GAAI92B,EAAI82B,EAAK,IAExBA,EAAOsD,EAAM5xB,UACR,KAAI2vB,EAGT,MAFAS,GAAYT,EAAOtH,KAQvB,GHrBK,WACL,IAAK,IAA6BgG,EAAMd,EAAW5sB,EAAGd,EAA7ClH,EAAI,EAAGC,EAAI00B,GAAMz0B,OAA+BF,EAAIC,IAAKD,EAChE,IAAK01B,EAAOf,GAAM30B,MAAQkH,GAAK0tB,EAAYc,EAAKd,WAAW10B,QAAS,CAClE,IAAI2hB,EAAQ,IAAI1hB,MAAM+G,GAClB7B,EAAQ,IAAIlF,MAAM+G,GACtB,IAAKc,EAAI,EAAGA,EAAId,IAAKc,EAAG6Z,EAAM7Z,GAAKA,EAAG3C,EAAM2C,GAAKytB,GAAkBC,EAAMjB,GAAMG,EAAU5sB,KAEzF,IADA6Z,EAAM5c,MAAK,SAASjF,EAAGgI,GAAK,OAAO3C,EAAM2C,GAAK3C,EAAMrF,MAC/CgI,EAAI,EAAGA,EAAId,IAAKc,EAAG3C,EAAM2C,GAAK4sB,EAAU/S,EAAM7Z,IACnD,IAAKA,EAAI,EAAGA,EAAId,IAAKc,EAAG4sB,EAAU5sB,GAAK3C,EAAM2C,IGWjDkxB,GAEI1H,EAAQ,CACV,IAAIjsB,GAAMisB,EAAO,GAAG,GAChBhsB,GAAMgsB,EAAO,GAAG,GAChB/rB,GAAM+rB,EAAO,GAAG,GAChB9rB,GAAM8rB,EAAO,GAAG,IJqGjB,SAAmBjsB,EAAIC,EAAIC,EAAIC,GAIpC,IAHA,IACI8uB,EADAx0B,EAAIy0B,GAAMv0B,OAGPF,KACAg1B,GAAYR,EAAOC,GAAMz0B,GAAIuF,EAAIC,EAAIC,EAAIC,IACtCqvB,GAASP,EAAMjvB,EAAIC,EAAIC,EAAIC,KAC1BhI,KAAKK,IAAIy2B,EAAK,GAAG,GAAKA,EAAK,GAAG,IAAM3vB,IAClCnH,KAAKK,IAAIy2B,EAAK,GAAG,GAAKA,EAAK,GAAG,IAAM3vB,YACtC4vB,GAAMz0B,GI7Gfm5B,CAAU5zB,EAAIC,EAAIC,EAAIC,GHbnB,SAAmBH,EAAIC,EAAIC,EAAIC,GACpC,IACI0zB,EACA1D,EACAC,EACA0D,EACAzE,EACA0E,EACA/5B,EACAg6B,EACAC,EACAh6B,EACAi6B,EACAC,EAZAC,EAAShF,GAAMz0B,OAafkxB,GAAQ,EAEZ,IAAKgI,EAAQ,EAAGA,EAAQO,IAAUP,EAChC,GAAI1D,EAAOf,GAAMyE,GAAQ,CAMvB,IALAzD,EAAOD,EAAKC,KAEZ0D,GADAzE,EAAYc,EAAKd,WACK10B,OAGfm5B,KACA5E,GAAMG,EAAUyE,KACnBzE,EAAUjV,OAAO0Z,EAAW,GAMhC,IADAA,EAAY,EAAGC,EAAa1E,EAAU10B,OAC/Bm5B,EAAYC,GACyCG,GAA1Dj6B,EAAMu2B,GAAgBL,EAAMjB,GAAMG,EAAUyE,MAAyB,GAAIK,EAAOl6B,EAAI,GACP+5B,GAA7Eh6B,EAAQu2B,GAAkBJ,EAAMjB,GAAMG,IAAYyE,EAAYC,MAA8B,GAAIE,EAASj6B,EAAM,IAC3G7B,KAAKK,IAAI07B,EAAOF,GAAU10B,IAAWnH,KAAKK,IAAI27B,EAAOF,GAAU30B,MACjE+vB,EAAUjV,OAAO0Z,EAAW,EAAG5E,GAAMzvB,KAAK6vB,GAAiBc,EAAMn2B,EAC7D9B,KAAKK,IAAI07B,EAAOl0B,GAAMV,IAAWa,EAAKg0B,EAAO70B,GAAU,CAACU,EAAI7H,KAAKK,IAAIw7B,EAASh0B,GAAMV,GAAU20B,EAAS9zB,GACrGhI,KAAKK,IAAI27B,EAAOh0B,GAAMb,IAAWY,EAAKg0B,EAAO50B,GAAU,CAACnH,KAAKK,IAAIy7B,EAAS9zB,GAAMb,GAAU00B,EAAS9zB,EAAIC,GACvGhI,KAAKK,IAAI07B,EAAOh0B,GAAMZ,IAAW60B,EAAOl0B,EAAKX,GAAU,CAACY,EAAI/H,KAAKK,IAAIw7B,EAAS9zB,GAAMZ,GAAU20B,EAASh0B,GACvG9H,KAAKK,IAAI27B,EAAOl0B,GAAMX,IAAW40B,EAAOl0B,EAAKV,GAAU,CAACnH,KAAKK,IAAIy7B,EAASh0B,GAAMX,GAAU00B,EAASh0B,EAAIC,GACvG,OAAS,KACb8zB,GAIFA,IAAYlI,GAAQ,GAM5B,GAAIA,EAAO,CACT,IAAI1oB,EAAIC,EAAIopB,EAAI6H,EAAKngB,IAErB,IAAK2f,EAAQ,EAAGhI,EAAQ,KAAMgI,EAAQO,IAAUP,GAC1C1D,EAAOf,GAAMyE,MAIfrH,GAFArpB,GADAitB,EAAOD,EAAKC,MACF,GAAKpwB,GAELmD,GADVC,EAAKgtB,EAAK,GAAKnwB,GACKmD,GACXixB,IAAIA,EAAK7H,EAAIX,EAAQsE,GAIlC,GAAItE,EAAO,CACT,IAAIyI,EAAM,CAACt0B,EAAIC,GAAKs0B,EAAM,CAACv0B,EAAIG,GAAKq0B,EAAM,CAACt0B,EAAIC,GAAKs0B,EAAM,CAACv0B,EAAID,GAC/D4rB,EAAMwD,UAAU5vB,KACdyvB,GAAMzvB,KAAK6vB,GAAiBc,EAAOvE,EAAMuE,KAAMkE,EAAKC,IAAQ,EAC5DrF,GAAMzvB,KAAK6vB,GAAiBc,EAAMmE,EAAKC,IAAQ,EAC/CtF,GAAMzvB,KAAK6vB,GAAiBc,EAAMoE,EAAKC,IAAQ,EAC/CvF,GAAMzvB,KAAK6vB,GAAiBc,EAAMqE,EAAKH,IAAQ,IAMrD,IAAKT,EAAQ,EAAGA,EAAQO,IAAUP,GAC5B1D,EAAOf,GAAMyE,MACV1D,EAAKd,UAAU10B,eACXy0B,GAAMyE,IGjEjBa,CAAU10B,EAAIC,EAAIC,EAAIC,GAGxB/C,KAAK8xB,MAAQA,GACb9xB,KAAKgyB,MAAQA,GAEb6C,GACAP,GACAxC,GACAE,GAAQ,KAGVqE,GAAQn2B,UAAY,CAClBgG,YAAamwB,GAEbkB,SAAU,WACR,IAAIzF,EAAQ9xB,KAAK8xB,MAEjB,OAAO9xB,KAAKgyB,MAAMxa,KAAI,SAASub,GAC7B,IAAItvB,EAAUsvB,EAAKd,UAAUza,KAAI,SAASna,GAAK,OAAO81B,GAAkBJ,EAAMjB,EAAMz0B,OAEpF,OADAoG,EAAQ6R,KAAOyd,EAAKC,KAAK1d,KAClB7R,MAIX+zB,UAAW,WACT,IAAIA,EAAY,GACZ1F,EAAQ9xB,KAAK8xB,MAsBjB,OApBA9xB,KAAKgyB,MAAMlwB,SAAQ,SAASixB,EAAM11B,GAChC,GAAMkH,GAAK0tB,EAAYc,EAAKd,WAAW10B,OASvC,IARA,IACI00B,EAEA1tB,EACAkzB,EA9EY37B,EAAGM,EAAGsB,EA0ElBs1B,EAAOD,EAAKC,KAEZ3tB,GAAK,EAGLqyB,EAAK5F,EAAMG,EAAU1tB,EAAI,IACzBozB,EAAKD,EAAG/F,OAASqB,EAAO0E,EAAGhK,MAAQgK,EAAG/F,OAEjCtsB,EAAId,GACXkzB,EAAKE,EAELA,GADAD,EAAK5F,EAAMG,EAAU5sB,KACbssB,OAASqB,EAAO0E,EAAGhK,MAAQgK,EAAG/F,KAClC8F,GAAME,GAAMt6B,EAAIo6B,EAAGvY,OAAS7hB,EAAIs6B,EAAGzY,QAtFtB9iB,EAsFkDq7B,EAtF/C/5B,EAsFmDi6B,IAtFzD77B,EAsF+Ck3B,GArFzD,GAAKt1B,EAAE,KAAOtB,EAAE,GAAKN,EAAE,KAAOA,EAAE,GAAKM,EAAE,KAAOsB,EAAE,GAAK5B,EAAE,IAqFkB,IAC3E07B,EAAUn1B,KAAK,CAAC2wB,EAAK1d,KAAMmiB,EAAGniB,KAAMqiB,EAAGriB,UAKtCkiB,GAGTI,MAAO,WACL,OAAO53B,KAAK8xB,MAAMvb,QAAO,SAASsb,GAChC,OAAOA,EAAKnE,SACXlW,KAAI,SAASqa,GACd,MAAO,CACLtD,OAAQsD,EAAKF,KAAKrc,KAClBkZ,OAAQqD,EAAKnE,MAAMpY,UAKzBwZ,KAAM,SAASjxB,EAAG3B,EAAG6yB,GAInB,IAHA,IAAiBpN,EAAkDoR,EAA/D9a,EAAOjY,KAAU4hB,EAAK3J,EAAK4f,QAAU,EAAGv6B,EAAI2a,EAAK+Z,MAAMz0B,SAGlDw1B,EAAO9a,EAAK+Z,MAAMpQ,KAAM,KAAMA,GAAMtkB,EAAG,OAAO,KACvD,IAAIyI,EAAKlI,EAAIk1B,EAAKC,KAAK,GAAIhtB,EAAK9J,EAAI62B,EAAKC,KAAK,GAAI5D,EAAKrpB,EAAKA,EAAKC,EAAKA,EAGtE,GACE+sB,EAAO9a,EAAK+Z,MAAMrQ,EAAKC,GAAKA,EAAK,KACjCmR,EAAKd,UAAUnwB,SAAQ,SAASV,GAC9B,IAAIywB,EAAO5Z,EAAK6Z,MAAM1wB,GAAIC,EAAIwwB,EAAKF,KACnC,GAAKtwB,IAAM0xB,EAAKC,MAAS3xB,IAAQA,EAAIwwB,EAAKnE,OAA1C,CACA,IAAIoK,EAAKj6B,EAAIwD,EAAE,GAAI02B,EAAK77B,EAAImF,EAAE,GAAI5F,EAAKq8B,EAAKA,EAAKC,EAAKA,EAClDt8B,EAAK2zB,IAAIA,EAAK3zB,EAAImmB,EAAKvgB,EAAE6d,iBAEjB,OAAP0C,GAIT,OAFA3J,EAAK4f,OAASlW,EAEG,MAAVoN,GAAkBK,GAAML,EAASA,EAASgE,EAAKC,KAAO,OC3IvDj4B,KAAKi9B,MCAR,SAASC,GAAU35B,EAAGT,EAAG3B,GAC9B8D,KAAK1B,EAAIA,EACT0B,KAAKnC,EAAIA,EACTmC,KAAK9D,EAAIA,EAGX+7B,GAAU/3B,UAAY,CACpBgG,YAAa+xB,GACbvkB,MAAO,SAASpV,GACd,OAAa,IAANA,EAAU0B,KAAO,IAAIi4B,GAAUj4B,KAAK1B,EAAIA,EAAG0B,KAAKnC,EAAGmC,KAAK9D,IAEjEqrB,UAAW,SAAS1pB,EAAG3B,GACrB,OAAa,IAAN2B,EAAgB,IAAN3B,EAAU8D,KAAO,IAAIi4B,GAAUj4B,KAAK1B,EAAG0B,KAAKnC,EAAImC,KAAK1B,EAAIT,EAAGmC,KAAK9D,EAAI8D,KAAK1B,EAAIpC,IAEjGyY,MAAO,SAAS7T,GACd,MAAO,CAACA,EAAM,GAAKd,KAAK1B,EAAI0B,KAAKnC,EAAGiD,EAAM,GAAKd,KAAK1B,EAAI0B,KAAK9D,IAE/Dg8B,OAAQ,SAASr6B,GACf,OAAOA,EAAImC,KAAK1B,EAAI0B,KAAKnC,GAE3Bs6B,OAAQ,SAASj8B,GACf,OAAOA,EAAI8D,KAAK1B,EAAI0B,KAAK9D,GAE3Bk8B,OAAQ,SAASC,GACf,MAAO,EAAEA,EAAS,GAAKr4B,KAAKnC,GAAKmC,KAAK1B,GAAI+5B,EAAS,GAAKr4B,KAAK9D,GAAK8D,KAAK1B,IAEzEg6B,QAAS,SAASz6B,GAChB,OAAQA,EAAImC,KAAKnC,GAAKmC,KAAK1B,GAE7Bi6B,QAAS,SAASr8B,GAChB,OAAQA,EAAI8D,KAAK9D,GAAK8D,KAAK1B,GAE7Bk6B,SAAU,SAAS36B,GACjB,OAAOA,EAAEuU,OAAOwC,OAAO/W,EAAEkX,QAAQyC,IAAIxX,KAAKs4B,QAASt4B,MAAMwX,IAAI3Z,EAAEu6B,OAAQv6B,KAEzE46B,SAAU,SAASv8B,GACjB,OAAOA,EAAEkW,OAAOwC,OAAO1Y,EAAE6Y,QAAQyC,IAAIxX,KAAKu4B,QAASv4B,MAAMwX,IAAItb,EAAEk8B,OAAQl8B,KAEzE2C,SAAU,WACR,MAAO,aAAemB,KAAKnC,EAAI,IAAMmC,KAAK9D,EAAI,WAAa8D,KAAK1B,EAAI,MAIlD,IAAI25B,GAAU,EAAG,EAAG,GAEpBA,GAAU/3B,W,oBCpC/B,SAASggB,EAAQ9E,GAClB,aAKA,GAAI,yBAA0B8E,GAC1B,8BAA+BA,GAC/B,sBAAuBA,EAAOwY,0BAA0Bx4B,UAIpD,mBAAoBggB,EAAOwY,0BAA0Bx4B,WACzDoG,OAAOqyB,eAAezY,EAAOwY,0BAA0Bx4B,UACrD,iBAAkB,CAClByX,IAAK,WACH,OAAO3X,KAAK44B,kBAAoB,SAVxC,CAwBA,IAAIC,EAAW,GA+EfC,EAAqB54B,UAAU64B,iBAAmB,IAQlDD,EAAqB54B,UAAU84B,cAAgB,KAM/CF,EAAqB54B,UAAU+4B,uBAAwB,EAQvDH,EAAqB54B,UAAUg5B,QAAU,SAAS1K,GAKhD,IAJ8BxuB,KAAKm5B,oBAAoBC,MAAK,SAASC,GACnE,OAAOA,EAAKC,SAAW9K,KAGzB,CAIA,IAAMA,GAA6B,GAAnBA,EAAO+K,SACrB,MAAM,IAAIn6B,MAAM,6BAGlBY,KAAKw5B,oBACLx5B,KAAKm5B,oBAAoB92B,KAAK,CAACi3B,QAAS9K,EAAQvtB,MAAO,OACvDjB,KAAKy5B,wBACLz5B,KAAK05B,2BAQPZ,EAAqB54B,UAAUy5B,UAAY,SAASnL,GAClDxuB,KAAKm5B,oBACDn5B,KAAKm5B,oBAAoB5iB,QAAO,SAAS8iB,GAE3C,OAAOA,EAAKC,SAAW9K,KAEpBxuB,KAAKm5B,oBAAoB57B,SAC5ByC,KAAK45B,0BACL55B,KAAK65B,wBAQTf,EAAqB54B,UAAU45B,WAAa,WAC1C95B,KAAKm5B,oBAAsB,GAC3Bn5B,KAAK45B,0BACL55B,KAAK65B,uBAUPf,EAAqB54B,UAAU65B,YAAc,WAC3C,IAAIC,EAAUh6B,KAAKi6B,eAAet8B,QAElC,OADAqC,KAAKi6B,eAAiB,GACfD,GAaTlB,EAAqB54B,UAAUg6B,gBAAkB,SAASC,GACxD,IAAIC,EAAYD,GAAiB,CAAC,GAGlC,OAFK38B,MAAMmB,QAAQy7B,KAAYA,EAAY,CAACA,IAErCA,EAAU93B,OAAOiU,QAAO,SAASva,EAAGqB,EAAGvB,GAC5C,GAAgB,iBAALE,GAAiBQ,MAAMR,IAAMA,EAAI,GAAKA,EAAI,EACnD,MAAM,IAAIoD,MAAM,0DAElB,OAAOpD,IAAMF,EAAEuB,EAAI,OAgBvBy7B,EAAqB54B,UAAUm6B,iBAAmB,SAASC,GACzD,IACIC,GADeD,GAAkB,OACV/iB,MAAM,OAAOC,KAAI,SAASgjB,GACnD,IAAIC,EAAQ,wBAAwBt7B,KAAKq7B,GACzC,IAAKC,EACH,MAAM,IAAIr7B,MAAM,qDAElB,MAAO,CAACtE,MAAO4/B,WAAWD,EAAM,IAAKE,KAAMF,EAAM,OAQnD,OAJAF,EAAQ,GAAKA,EAAQ,IAAMA,EAAQ,GACnCA,EAAQ,GAAKA,EAAQ,IAAMA,EAAQ,GACnCA,EAAQ,GAAKA,EAAQ,IAAMA,EAAQ,GAE5BA,GASTzB,EAAqB54B,UAAUu5B,sBAAwB,WAChDz5B,KAAK46B,2BACR56B,KAAK46B,0BAA2B,EAI5B56B,KAAKg5B,cACPh5B,KAAK66B,oBAAsB1V,YACvBnlB,KAAK05B,uBAAwB15B,KAAKg5B,gBAGtC8B,EAAS5a,EAAQ,SAAUlgB,KAAK05B,wBAAwB,GACxDoB,EAAS1f,EAAU,SAAUpb,KAAK05B,wBAAwB,GAEtD15B,KAAKi5B,uBAAyB,qBAAsB/Y,IACtDlgB,KAAK+6B,aAAe,IAAIC,iBAAiBh7B,KAAK05B,wBAC9C15B,KAAK+6B,aAAa7B,QAAQ9d,EAAU,CAClC6f,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,SAAS,QAYnBtC,EAAqB54B,UAAU05B,wBAA0B,WACnD55B,KAAK46B,2BACP56B,KAAK46B,0BAA2B,EAEhC1V,cAAcllB,KAAK66B,qBACnB76B,KAAK66B,oBAAsB,KAE3BQ,EAAYnb,EAAQ,SAAUlgB,KAAK05B,wBAAwB,GAC3D2B,EAAYjgB,EAAU,SAAUpb,KAAK05B,wBAAwB,GAEzD15B,KAAK+6B,eACP/6B,KAAK+6B,aAAajB,aAClB95B,KAAK+6B,aAAe,QAY1BjC,EAAqB54B,UAAUw5B,uBAAyB,WACtD,IAAI4B,EAAct7B,KAAKu7B,eACnBC,EAAWF,EAAct7B,KAAKy7B,eAyW3B,CACLC,IAAK,EACL/N,OAAQ,EACRgE,KAAM,EACNjE,MAAO,EACP/tB,MAAO,EACPg8B,OAAQ,GA7WV37B,KAAKm5B,oBAAoBr3B,SAAQ,SAASu3B,GACxC,IAAI7K,EAAS6K,EAAKC,QACdsC,EAAaC,EAAsBrN,GACnCsN,EAAqB97B,KAAK+7B,oBAAoBvN,GAC9CwN,EAAW3C,EAAKp4B,MAChBg7B,EAAmBX,GAAeQ,GAClC97B,KAAKk8B,kCAAkC1N,EAAQgN,GAE/CW,EAAW9C,EAAKp4B,MAAQ,IAAIy3B,EAA0B,CACxDhU,KAiOGxE,EAAO4D,aAAeA,YAAYC,KAAOD,YAAYC,MAhOxDyK,OAAQA,EACR4N,mBAAoBR,EACpBS,WAAYb,EACZS,iBAAkBA,IAGfD,EAEMV,GAAeQ,EAGpB97B,KAAKs8B,qBAAqBN,EAAUG,IACtCn8B,KAAKi6B,eAAe53B,KAAK85B,GAMvBH,GAAYA,EAASO,gBACvBv8B,KAAKi6B,eAAe53B,KAAK85B,GAZ3Bn8B,KAAKi6B,eAAe53B,KAAK85B,KAe1Bn8B,MAECA,KAAKi6B,eAAe18B,QACtByC,KAAKw8B,UAAUx8B,KAAK+5B,cAAe/5B,OAiBvC84B,EAAqB54B,UAAUg8B,kCAC3B,SAAS1N,EAAQgN,GAGnB,GAA+C,QAA3Ctb,EAAOpE,iBAAiB0S,GAAQiO,QAApC,CAOA,IALA,IAoP+BC,EAAOC,EAClCjB,EACA/N,EACAgE,EACAjE,EACA/tB,EACAg8B,EAzPAM,EADaJ,EAAsBrN,GAEnCnoB,EAASu2B,EAAcpO,GACvBqO,GAAS,GAELA,GAAQ,CACd,IAAIC,EAAa,KACbC,EAAyC,GAAnB12B,EAAOkzB,SAC7BrZ,EAAOpE,iBAAiBzV,GAAU,GAGtC,GAAmC,QAA/B02B,EAAoBN,QAAmB,OAmB3C,GAjBIp2B,GAAUrG,KAAK2gB,MAAQta,GAAU+U,GACnCyhB,GAAS,EACTC,EAAatB,GAMTn1B,GAAU+U,EAAS4hB,MACnB32B,GAAU+U,EAAS6C,iBACa,WAAhC8e,EAAoBE,WACtBH,EAAajB,EAAsBx1B,IAMnCy2B,IAsNyBJ,EArNgBI,EAqNTH,EArNqBV,EAsNvDP,SACA/N,SACAgE,SACAjE,SACA/tB,SACAg8B,SALAD,EAAM3gC,KAAKC,IAAI0hC,EAAMhB,IAAKiB,EAAMjB,KAChC/N,EAAS5yB,KAAKE,IAAIyhC,EAAM/O,OAAQgP,EAAMhP,QACtCgE,EAAO52B,KAAKC,IAAI0hC,EAAM/K,KAAMgL,EAAMhL,MAClCjE,EAAQ3yB,KAAKE,IAAIyhC,EAAMhP,MAAOiP,EAAMjP,OAEpCiO,EAAShO,EAAS+N,IA3NlBO,GA0NAt8B,EAAQ+tB,EAAQiE,IAGH,GAAKgK,GAAU,GAAM,CACpCD,IAAKA,EACL/N,OAAQA,EACRgE,KAAMA,EACNjE,MAAOA,EACP/tB,MAAOA,EACPg8B,OAAQA,KAjOiB,MAEzBt1B,EAASu2B,EAAcv2B,GAEzB,OAAO41B,IASTnD,EAAqB54B,UAAUu7B,aAAe,WAC5C,IAAID,EACJ,GAAIx7B,KAAK2gB,KACP6a,EAAWK,EAAsB77B,KAAK2gB,UACjC,CAEL,IAAIsC,EAAO7H,EAAS6C,gBAChB+e,EAAO5hB,EAAS4hB,KACpBxB,EAAW,CACTE,IAAK,EACL/J,KAAM,EACNjE,MAAOzK,EAAKia,aAAeF,EAAKE,YAChCv9B,MAAOsjB,EAAKia,aAAeF,EAAKE,YAChCvP,OAAQ1K,EAAKka,cAAgBH,EAAKG,aAClCxB,OAAQ1Y,EAAKka,cAAgBH,EAAKG,cAGtC,OAAOn9B,KAAKo9B,wBAAwB5B,IAUtC1C,EAAqB54B,UAAUk9B,wBAA0B,SAASjQ,GAChE,IAAIoN,EAAUv6B,KAAKq9B,kBAAkB7lB,KAAI,SAASgjB,EAAQn9B,GACxD,MAAsB,MAAfm9B,EAAOG,KAAeH,EAAO1/B,MAChC0/B,EAAO1/B,OAASuC,EAAI,EAAI8vB,EAAKxtB,MAAQwtB,EAAKwO,QAAU,OAEtD2B,EAAU,CACZ5B,IAAKvO,EAAKuO,IAAMnB,EAAQ,GACxB7M,MAAOP,EAAKO,MAAQ6M,EAAQ,GAC5B5M,OAAQR,EAAKQ,OAAS4M,EAAQ,GAC9B5I,KAAMxE,EAAKwE,KAAO4I,EAAQ,IAK5B,OAHA+C,EAAQ39B,MAAQ29B,EAAQ5P,MAAQ4P,EAAQ3L,KACxC2L,EAAQ3B,OAAS2B,EAAQ3P,OAAS2P,EAAQ5B,IAEnC4B,GAcTxE,EAAqB54B,UAAUo8B,qBAC3B,SAASN,EAAUG,GAIrB,IAAIoB,EAAWvB,GAAYA,EAASO,eAChCP,EAASpD,mBAAqB,GAAK,EACnC4E,EAAWrB,EAASI,eACpBJ,EAASvD,mBAAqB,GAAK,EAGvC,GAAI2E,IAAaC,EAEjB,IAAK,IAAIngC,EAAI,EAAGA,EAAI2C,KAAKy9B,WAAWlgC,OAAQF,IAAK,CAC/C,IAAI+8B,EAAYp6B,KAAKy9B,WAAWpgC,GAIhC,GAAI+8B,GAAamD,GAAYnD,GAAaoD,GACtCpD,EAAYmD,GAAanD,EAAYoD,EACvC,OAAO,IAWb1E,EAAqB54B,UAAUq7B,aAAe,WAC5C,OAAQv7B,KAAK2gB,MAAQ+c,EAAatiB,EAAUpb,KAAK2gB,OAUnDmY,EAAqB54B,UAAU67B,oBAAsB,SAASvN,GAC5D,OAAOkP,EAAa19B,KAAK2gB,MAAQvF,EAAUoT,IAS7CsK,EAAqB54B,UAAUs5B,kBAAoB,WAC7CX,EAASnhB,QAAQ1X,MAAQ,GAC3B64B,EAASx2B,KAAKrC,OASlB84B,EAAqB54B,UAAU25B,oBAAsB,WACnD,IAAI3a,EAAQ2Z,EAASnhB,QAAQ1X,OACf,GAAVkf,GAAa2Z,EAAS7b,OAAOkC,EAAO,IAqL1CgB,EAAO4Y,qBAAuBA,EAC9B5Y,EAAOwY,0BAA4BA,EAnqBnC,SAASA,EAA0Bz3B,GACjCjB,KAAK0kB,KAAOzjB,EAAMyjB,KAClB1kB,KAAKwuB,OAASvtB,EAAMutB,OACpBxuB,KAAKq8B,WAAap7B,EAAMo7B,WACxBr8B,KAAKo8B,mBAAqBn7B,EAAMm7B,mBAChCp8B,KAAKi8B,iBAAmBh7B,EAAMg7B,kBA+mBvB,CACLP,IAAK,EACL/N,OAAQ,EACRgE,KAAM,EACNjE,MAAO,EACP/tB,MAAO,EACPg8B,OAAQ,GApnBV37B,KAAKu8B,iBAAmBt7B,EAAMg7B,iBAG9B,IAAIL,EAAa57B,KAAKo8B,mBAClBuB,EAAa/B,EAAWj8B,MAAQi8B,EAAWD,OAC3CM,EAAmBj8B,KAAKi8B,iBACxB2B,EAAmB3B,EAAiBt8B,MAAQs8B,EAAiBN,OAM/D37B,KAAK44B,kBAHH+E,EAGuBE,QAAQD,EAAmBD,GAAYG,QAAQ,IAG/C99B,KAAKu8B,eAAiB,EAAI,EAcvD,SAASzD,EAAqBjhB,EAAUkmB,GAEtC,IA8dgBC,EAAIxa,EAChBgB,EA/dAyZ,EAAUF,GAAe,GAE7B,GAAuB,mBAAZlmB,EACT,MAAM,IAAIzY,MAAM,+BAGlB,GAAI6+B,EAAQtd,MAAiC,GAAzBsd,EAAQtd,KAAK4Y,SAC/B,MAAM,IAAIn6B,MAAM,2BAIlBY,KAAK05B,wBAmdWsE,EAldZh+B,KAAK05B,uBAAuBnY,KAAKvhB,MAkdjBwjB,EAldwBxjB,KAAK+4B,iBAmd7CvU,EAAQ,KACL,WACAA,IACHA,EAAQL,YAAW,WACjB6Z,IACAxZ,EAAQ,OACPhB,MAtdPxjB,KAAKw8B,UAAY3kB,EACjB7X,KAAKm5B,oBAAsB,GAC3Bn5B,KAAKi6B,eAAiB,GACtBj6B,KAAKq9B,kBAAoBr9B,KAAKq6B,iBAAiB4D,EAAQC,YAGvDl+B,KAAKy9B,WAAaz9B,KAAKk6B,gBAAgB+D,EAAQ7D,WAC/Cp6B,KAAK2gB,KAAOsd,EAAQtd,MAAQ,KAC5B3gB,KAAKk+B,WAAal+B,KAAKq9B,kBAAkB7lB,KAAI,SAASgjB,GACpD,OAAOA,EAAO1/B,MAAQ0/B,EAAOG,QAC5B5d,KAAK,KA0dV,SAAS+d,EAASvhB,EAAMsF,EAAOmf,EAAIG,GACG,mBAAzB5kB,EAAKwG,iBACdxG,EAAKwG,iBAAiBlB,EAAOmf,EAAIG,IAAkB,GAEjB,mBAApB5kB,EAAK6kB,aACnB7kB,EAAK6kB,YAAY,KAAOvf,EAAOmf,GAanC,SAAS3C,EAAY9hB,EAAMsF,EAAOmf,EAAIG,GACG,mBAA5B5kB,EAAKoG,oBACdpG,EAAKoG,oBAAoBd,EAAOmf,EAAIG,IAAkB,GAEnB,mBAArB5kB,EAAK8kB,cACnB9kB,EAAK8kB,aAAa,KAAOxf,EAAOmf,GAoCpC,SAASnC,EAAsByC,GAC7B,IAAInR,EAEJ,IACEA,EAAOmR,EAAGzC,wBACV,MAAO0C,IAKT,OAAKpR,GAGCA,EAAKxtB,OAASwtB,EAAKwO,SACvBxO,EAAO,CACLuO,IAAKvO,EAAKuO,IACVhO,MAAOP,EAAKO,MACZC,OAAQR,EAAKQ,OACbgE,KAAMxE,EAAKwE,KACXhyB,MAAOwtB,EAAKO,MAAQP,EAAKwE,KACzBgK,OAAQxO,EAAKQ,OAASR,EAAKuO,MAGxBvO,GAUA,CACLuO,IAAK,EACL/N,OAAQ,EACRgE,KAAM,EACNjE,MAAO,EACP/tB,MAAO,EACPg8B,OAAQ,GAWZ,SAAS+B,EAAar3B,EAAQ6S,GAE5B,IADA,IAAIK,EAAOL,EACJK,GAAM,CACX,GAAIA,GAAQlT,EAAQ,OAAO,EAE3BkT,EAAOqjB,EAAcrjB,GAEvB,OAAO,EAUT,SAASqjB,EAAcrjB,GACrB,IAAIlT,EAASkT,EAAKlD,WAElB,OAAIhQ,GAA6B,IAAnBA,EAAOkzB,UAAkBlzB,EAAOm4B,KAErCn4B,EAAOm4B,KAETn4B,GApsBR,CA4sBC6Z,OAAQ9E,W,kGCltBV,SAASqjB,EAAIC,EAAYC,EAAW7/B,GAClC,IAAI+C,EAAO68B,EAAWE,YAAcF,EAAWE,aAM/C,OALAF,EAAWhrB,MAAM,KAAK6T,UAAU,CAAC,EAAG,IACxB,MAAR1lB,GAAc68B,EAAWE,WAAW,MACxCC,YAAU//B,EAAQ4/B,EAAW/8B,OAAOoV,MACpC4nB,EAAU5nB,IAAalS,UACX,MAARhD,GAAc68B,EAAWE,WAAW/8B,GACjC68B,EAGF,SAASI,EAAUJ,EAAY7P,EAAQ/vB,GAC5C,OAAO2/B,EAAIC,GAAY,SAAStiC,GAC9B,IAAIgxB,EAAIyB,EAAO,GAAG,GAAKA,EAAO,GAAG,GAC7Bjd,EAAIid,EAAO,GAAG,GAAKA,EAAO,GAAG,GAC7BvwB,EAAIvD,KAAKE,IAAImyB,GAAKhxB,EAAE,GAAG,GAAKA,EAAE,GAAG,IAAKwV,GAAKxV,EAAE,GAAG,GAAKA,EAAE,GAAG,KAC1DyB,GAAKgxB,EAAO,GAAG,IAAMzB,EAAI9uB,GAAKlC,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACpDF,GAAK2yB,EAAO,GAAG,IAAMjd,EAAItT,GAAKlC,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACxDsiC,EAAWhrB,MAAM,IAAMpV,GAAGipB,UAAU,CAAC1pB,EAAG3B,MACvC4C,G,gBCfU,eACb,IACeyE,EAAIw7B,EACJl8B,EAAIC,EAAIC,EASnBi8B,EACAC,EAZA3gC,EAAI,EAAG4gC,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAAGC,EAAK,EACpCC,EAAQ,EACR18B,EAAK,KACL28B,EAAK,EAAGC,EAAK,EACbhrB,EAAYirB,YAAY,CACtB3+B,MAAO,SAASjD,EAAG3B,GACjB,IAAIoF,EAAIo9B,EAAW,CAAC7gC,EAAG3B,IACvB8D,KAAK2B,OAAOb,MAAMQ,EAAE,GAAIA,EAAE,OAG9Bo+B,EAAW7qB,IAIf,SAAS8qB,IAIP,OAHAJ,EAAKjhC,EAAI8gC,EACTI,EAAKlhC,EAAI+gC,EACTL,EAAQC,EAAc,KACfP,EAGT,SAASA,EAAYp9B,GACnB,IAAIzD,EAAIyD,EAAE,GAAKi+B,EAAIrjC,EAAIoF,EAAE,GAAKk+B,EAC9B,GAAIF,EAAO,CACT,IAAItjC,EAAIE,EAAIqH,EAAK1F,EAAIkhC,EACrBlhC,EAAIA,EAAI0F,EAAKrH,EAAI6iC,EACjB7iC,EAAIF,EAEN,MAAO,CAAC6B,EAAIqhC,EAAIhjC,EAAIijC,GAgDtB,OA9CAT,EAAWtG,OAAS,SAAS92B,GAC3B,IAAIzD,EAAIyD,EAAE,GAAK49B,EAAIhjC,EAAIoF,EAAE,GAAK69B,EAC9B,GAAIG,EAAO,CACT,IAAItjC,EAAIE,EAAIqH,EAAK1F,EAAIkhC,EACrBlhC,EAAIA,EAAI0F,EAAKrH,EAAI6iC,EACjB7iC,EAAIF,EAEN,MAAO,CAAC6B,EAAI0hC,EAAIrjC,EAAIsjC,IAEtBd,EAAW/8B,OAAS,SAASA,GAC3B,OAAOq9B,GAASC,IAAgBt9B,EAASq9B,EAAQA,EAAQxqB,EAAUkrB,EAAST,EAAct9B,KAE5F+8B,EAAWgB,SAAW,SAASjpB,GAC7B,OAAOlF,UAAUhU,QAAUmiC,EAAWjpB,EAAG7T,EAAKC,EAAKC,EAAKC,EAAK,KAAM48B,KAAWD,GAEhFhB,EAAWE,WAAa,SAASnoB,GAC/B,OAAOlF,UAAUhU,QAAUmiC,EAAgB,MAALjpB,GAAa7T,EAAKC,EAAKC,EAAKC,EAAK,KAAM8R,KAAYlS,YAAcC,GAAM6T,EAAE,GAAG,GAAI5T,GAAM4T,EAAE,GAAG,GAAI3T,GAAM2T,EAAE,GAAG,GAAI1T,GAAM0T,EAAE,GAAG,IAAKkpB,KAAiB,MAAN/8B,EAAa,KAAO,CAAC,CAACA,EAAIC,GAAK,CAACC,EAAIC,KAErN27B,EAAWhrB,MAAQ,SAAS+C,GAC1B,OAAOlF,UAAUhU,QAAUe,GAAKmY,EAAGkpB,KAAWrhC,GAEhDogC,EAAWnX,UAAY,SAAS9Q,GAC9B,OAAOlF,UAAUhU,QAAU2hC,GAAMzoB,EAAE,GAAI0oB,GAAM1oB,EAAE,GAAIkpB,KAAW,CAACT,EAAIC,IAErET,EAAWkB,MAAQ,SAASnpB,GAC1B,OAAOlF,UAAUhU,QAAU+hC,EAAQ7oB,EAAI,IAAM1D,IAASgsB,EAAK5rB,YAAImsB,GAAQ/7B,EAAKyP,YAAIssB,GAAQK,KAAWL,EAAQxsB,KAE7G4rB,EAAWmB,SAAW,SAASppB,GAC7B,OAAOlF,UAAUhU,QAAU6hC,EAAK3oB,GAAK,EAAI,EAAGkpB,KAAWP,EAAK,GAE9DV,EAAWoB,SAAW,SAASrpB,GAC7B,OAAOlF,UAAUhU,QAAU8hC,EAAK5oB,GAAK,EAAI,EAAGkpB,KAAWN,EAAK,GAE9DX,EAAWI,UAAY,SAASjQ,EAAQ/vB,GACtC,OAAOggC,EAAUJ,EAAY7P,EAAQ/vB,IAEvC4/B,EAAWqB,QAAU,SAASze,EAAMxiB,GAClC,ODlDG,SAAiB4/B,EAAYpd,EAAMxiB,GACxC,OAAOggC,EAAUJ,EAAY,CAAC,CAAC,EAAG,GAAIpd,GAAOxiB,GCiDpCihC,CAAQrB,EAAYpd,EAAMxiB,IAEnC4/B,EAAWsB,SAAW,SAASrgC,EAAOb,GACpC,ODjDG,SAAkB4/B,EAAY/+B,EAAOb,GAC1C,OAAO2/B,EAAIC,GAAY,SAAStiC,GAC9B,IAAIgxB,GAAKztB,EACLrB,EAAI8uB,GAAKhxB,EAAE,GAAG,GAAKA,EAAE,GAAG,IACxByB,GAAKuvB,EAAI9uB,GAAKlC,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACpCF,GAAKoC,EAAIlC,EAAE,GAAG,GAClBsiC,EAAWhrB,MAAM,IAAMpV,GAAGipB,UAAU,CAAC1pB,EAAG3B,MACvC4C,GC0CMkhC,CAAStB,EAAY/+B,EAAOb,IAErC4/B,EAAWuB,UAAY,SAAStE,EAAQ78B,GACtC,OD1CG,SAAmB4/B,EAAY/C,EAAQ78B,GAC5C,OAAO2/B,EAAIC,GAAY,SAAStiC,GAC9B,IAAIwV,GAAK+pB,EACLr9B,EAAIsT,GAAKxV,EAAE,GAAG,GAAKA,EAAE,GAAG,IACxByB,GAAKS,EAAIlC,EAAE,GAAG,GACdF,GAAK0V,EAAItT,GAAKlC,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACxCsiC,EAAWhrB,MAAM,IAAMpV,GAAGipB,UAAU,CAAC1pB,EAAG3B,MACvC4C,GCmCMmhC,CAAUvB,EAAY/C,EAAQ78B,IAGhC4/B,I,wICjFT,SAASwB,KAkDT,SAAS1oB,EAAI1Y,EAAQolB,GACnB,IAAI1M,EAAM,IAAI0oB,EAGd,GAAIphC,aAAkBohC,EAAKphC,EAAO0X,MAAK,SAAS1b,EAAO0L,GAAOgR,EAAII,IAAIpR,EAAK1L,WAGtE,GAAI0C,MAAMmB,QAAQG,GAAS,CAC9B,IAEIqC,EAFA9D,GAAK,EACLC,EAAIwB,EAAOvB,OAGf,GAAS,MAAL2mB,EAAW,OAAS7mB,EAAIC,GAAGka,EAAII,IAAIva,EAAGyB,EAAOzB,SAC5C,OAASA,EAAIC,GAAGka,EAAII,IAAIsM,EAAE/iB,EAAIrC,EAAOzB,GAAIA,EAAGyB,GAASqC,QAIvD,GAAIrC,EAAQ,IAAK,IAAI0H,KAAO1H,EAAQ0Y,EAAII,IAAIpR,EAAK1H,EAAO0H,IAE7D,OAAOgR,EAnET0oB,EAAIhgC,UAAYsX,EAAItX,UAAY,CAC9BgG,YAAag6B,EACbC,IAAK,SAAS35B,GACZ,MAPgB,IAOCA,KAAQxG,MAE3B2X,IAAK,SAASnR,GACZ,OAAOxG,KAVS,IAUKwG,IAEvBoR,IAAK,SAASpR,EAAK1L,GAEjB,OADAkF,KAbgB,IAaFwG,GAAO1L,EACdkF,MAETsW,OAAQ,SAAS9P,GACf,IAAIuc,EAjBY,IAiBQvc,EACxB,OAAOuc,KAAY/iB,aAAeA,KAAK+iB,IAEzCqd,MAAO,WACL,IAAK,IAAIrd,KAAY/iB,KArBL,MAqBe+iB,EAAS,WAAsB/iB,KAAK+iB,IAErEsd,KAAM,WACJ,IAAIA,EAAO,GACX,IAAK,IAAItd,KAAY/iB,KAzBL,MAyBe+iB,EAAS,IAAesd,EAAKh+B,KAAK0gB,EAASplB,MAAM,IAChF,OAAO0iC,GAET5iC,OAAQ,WACN,IAAIA,EAAS,GACb,IAAK,IAAIslB,KAAY/iB,KA9BL,MA8Be+iB,EAAS,IAAetlB,EAAO4E,KAAKrC,KAAK+iB,IACxE,OAAOtlB,GAET6iC,QAAS,WACP,IAAIA,EAAU,GACd,IAAK,IAAIvd,KAAY/iB,KAnCL,MAmCe+iB,EAAS,IAAeud,EAAQj+B,KAAK,CAACmE,IAAKuc,EAASplB,MAAM,GAAI7C,MAAOkF,KAAK+iB,KACzG,OAAOud,GAEThf,KAAM,WACJ,IAAIA,EAAO,EACX,IAAK,IAAIyB,KAAY/iB,KAxCL,MAwCe+iB,EAAS,MAAiBzB,EACzD,OAAOA,GAEThJ,MAAO,WACL,IAAK,IAAIyK,KAAY/iB,KAAM,GA5CX,MA4Ce+iB,EAAS,GAAe,OAAO,EAC9D,OAAO,GAETvM,KAAM,SAAS0N,GACb,IAAK,IAAInB,KAAY/iB,KAhDL,MAgDe+iB,EAAS,IAAemB,EAAElkB,KAAK+iB,GAAWA,EAASplB,MAAM,GAAIqC,QA0BjFwX,QCxEf,SAAS+oB,KAET,IAAIC,EAAQhpB,EAAItX,UAkBhB,SAAS0X,EAAI9Y,EAAQolB,GACnB,IAAItM,EAAM,IAAI2oB,EAGd,GAAIzhC,aAAkByhC,EAAKzhC,EAAO0X,MAAK,SAAS1b,GAAS8c,EAAI8E,IAAI5hB,WAG5D,GAAIgE,EAAQ,CACf,IAAIzB,GAAK,EAAGC,EAAIwB,EAAOvB,OACvB,GAAS,MAAL2mB,EAAW,OAAS7mB,EAAIC,GAAGsa,EAAI8E,IAAI5d,EAAOzB,SACzC,OAASA,EAAIC,GAAGsa,EAAI8E,IAAIwH,EAAEplB,EAAOzB,GAAIA,EAAGyB,IAG/C,OAAO8Y,EA7BT2oB,EAAIrgC,UAAY0X,EAAI1X,UAAY,CAC9BgG,YAAaq6B,EACbJ,IAAKK,EAAML,IACXzjB,IAAK,SAAS5hB,GAGZ,OADAkF,KDXgB,KCUhBlF,GAAS,KACcA,EAChBkF,MAETsW,OAAQkqB,EAAMlqB,OACd8pB,MAAOI,EAAMJ,MACb3iC,OAAQ+iC,EAAMH,KACd/e,KAAMkf,EAAMlf,KACZhJ,MAAOkoB,EAAMloB,MACb9B,KAAMgqB,EAAMhqB,MAmBCoB,QCtCA,WAASJ,GACtB,IAAI8oB,EAAU,GACd,IAAK,IAAI95B,KAAOgR,EAAK8oB,EAAQj+B,KAAK,CAACmE,IAAKA,EAAK1L,MAAO0c,EAAIhR,KACxD,OAAO85B,I,kCCHT,gBAEIG,EAAM,8CACNC,EAAM,IAAI35B,OAAO05B,EAAIlS,OAAQ,KAclB,aAASzyB,EAAGM,GACzB,IACIukC,EACAC,EACAC,EAHAC,EAAKL,EAAIM,UAAYL,EAAIK,UAAY,EAIrC1jC,GAAK,EACLwU,EAAI,GACJqV,EAAI,GAMR,IAHAprB,GAAQ,GAAIM,GAAQ,IAGZukC,EAAKF,EAAIthC,KAAKrD,MACd8kC,EAAKF,EAAIvhC,KAAK/C,MACfykC,EAAKD,EAAG1hB,OAAS4hB,IACpBD,EAAKzkC,EAAEuB,MAAMmjC,EAAID,GACbhvB,EAAExU,GAAIwU,EAAExU,IAAMwjC,EACbhvB,IAAIxU,GAAKwjC,IAEXF,EAAKA,EAAG,OAASC,EAAKA,EAAG,IACxB/uB,EAAExU,GAAIwU,EAAExU,IAAMujC,EACb/uB,IAAIxU,GAAKujC,GAEd/uB,IAAIxU,GAAK,KACT6pB,EAAE7kB,KAAK,CAAChF,EAAGA,EAAGQ,EAAGU,YAAOoiC,EAAIC,MAE9BE,EAAKJ,EAAIK,UAYX,OARID,EAAK1kC,EAAEmB,SACTsjC,EAAKzkC,EAAEuB,MAAMmjC,GACTjvB,EAAExU,GAAIwU,EAAExU,IAAMwjC,EACbhvB,IAAIxU,GAAKwjC,GAKThvB,EAAEtU,OAAS,EAAK2pB,EAAE,GA7C3B,SAAa9qB,GACX,OAAO,SAASJ,GACd,OAAOI,EAAEJ,GAAK,IA4CVglC,CAAI9Z,EAAE,GAAGrpB,GApDjB,SAAczB,GACZ,OAAO,WACL,OAAOA,GAmDHsD,CAAKtD,IACJA,EAAI8qB,EAAE3pB,OAAQ,SAASvB,GACtB,IAAK,IAAWmF,EAAP9D,EAAI,EAAMA,EAAIjB,IAAKiB,EAAGwU,GAAG1Q,EAAI+lB,EAAE7pB,IAAIA,GAAK8D,EAAEtD,EAAE7B,GACrD,OAAO6V,EAAEkL,KAAK,Q,kCC7DT,SAASvY,KAAxB,mC,kCCAA,yG,oCCAA,gBAEe,aAAS3G,GACtB,OAAOA,EAAIojC,YAAmBlmC,KAAKK,IAAIyC,KAASA,EAAE,GAAKmH,M,kCCMlD,SAASi8B,EAAmBpjC,EAAGyD,GACpC,IAAKjE,GAAKQ,EAAIyD,EAAIzD,EAAEqjC,cAAc5/B,EAAI,GAAKzD,EAAEqjC,iBAAiBxpB,QAAQ,MAAQ,EAAG,OAAO,KACxF,IAAIra,EAAG8jC,EAActjC,EAAEF,MAAM,EAAGN,GAIhC,MAAO,CACL8jC,EAAY5jC,OAAS,EAAI4jC,EAAY,GAAKA,EAAYxjC,MAAM,GAAKwjC,GAChEtjC,EAAEF,MAAMN,EAAI,IAjBjB,kCAAe,aAASQ,GACtB,OAAO9C,KAAKK,IAAIyC,EAAI9C,KAAK4W,MAAM9T,KAAO,KAChCA,EAAEujC,eAAe,MAAMC,QAAQ,KAAM,IACrCxjC,EAAEgB,SAAS,M,kCCHnB,qD,sCCEWyiC,E,oCCAI,WAASzjC,EAAGyD,GACzB,IAAIvF,EAAIklC,YAAmBpjC,EAAGyD,GAC9B,IAAKvF,EAAG,OAAO8B,EAAI,GACnB,IAAIsjC,EAAcplC,EAAE,GAChBZ,EAAWY,EAAE,GACjB,OAAOZ,EAAW,EAAI,KAAO,IAAIqC,OAAOrC,GAAU4hB,KAAK,KAAOokB,EACxDA,EAAY5jC,OAASpC,EAAW,EAAIgmC,EAAYxjC,MAAM,EAAGxC,EAAW,GAAK,IAAMgmC,EAAYxjC,MAAMxC,EAAW,GAC5GgmC,EAAc,IAAI3jC,MAAMrC,EAAWgmC,EAAY5jC,OAAS,GAAGwf,KAAK,MCLzD,GACb,IAAK,SAASlf,EAAGyD,GAAK,OAAY,IAAJzD,GAASigC,QAAQx8B,IAC/C,EAAK,SAASzD,GAAK,OAAO9C,KAAK4W,MAAM9T,GAAGgB,SAAS,IACjD,EAAK,SAAShB,GAAK,OAAOA,EAAI,IAC9B,EAAK0jC,IACL,EAAK,SAAS1jC,EAAGyD,GAAK,OAAOzD,EAAEqjC,cAAc5/B,IAC7C,EAAK,SAASzD,EAAGyD,GAAK,OAAOzD,EAAEigC,QAAQx8B,IACvC,EAAK,SAASzD,EAAGyD,GAAK,OAAOzD,EAAE2jC,YAAYlgC,IAC3C,EAAK,SAASzD,GAAK,OAAO9C,KAAK4W,MAAM9T,GAAGgB,SAAS,IACjD,EAAK,SAAShB,EAAGyD,GAAK,OAAOmgC,EAAkB,IAAJ5jC,EAASyD,IACpD,EAAKmgC,EACL,EFXa,SAAS5jC,EAAGyD,GACzB,IAAIvF,EAAIklC,YAAmBpjC,EAAGyD,GAC9B,IAAKvF,EAAG,OAAO8B,EAAI,GACnB,IAAIsjC,EAAcplC,EAAE,GAChBZ,EAAWY,EAAE,GACbsB,EAAIlC,GAAYmmC,EAAuE,EAAtDvmC,KAAKC,KAAK,EAAGD,KAAKE,IAAI,EAAGF,KAAKG,MAAMC,EAAW,MAAY,EAC5FmC,EAAI6jC,EAAY5jC,OACpB,OAAOF,IAAMC,EAAI6jC,EACX9jC,EAAIC,EAAI6jC,EAAc,IAAI3jC,MAAMH,EAAIC,EAAI,GAAGyf,KAAK,KAChD1f,EAAI,EAAI8jC,EAAYxjC,MAAM,EAAGN,GAAK,IAAM8jC,EAAYxjC,MAAMN,GAC1D,KAAO,IAAIG,MAAM,EAAIH,GAAG0f,KAAK,KAAOkkB,YAAmBpjC,EAAG9C,KAAKC,IAAI,EAAGsG,EAAIjE,EAAI,IAAI,IEExF,EAAK,SAASQ,GAAK,OAAO9C,KAAK4W,MAAM9T,GAAGgB,SAAS,IAAI6iC,eACrD,EAAK,SAAS7jC,GAAK,OAAO9C,KAAK4W,MAAM9T,GAAGgB,SAAS,MCjBpC,WAAShB,GACtB,OAAOA,GCQL2Z,EAAMha,MAAM0C,UAAUsX,IACtBmqB,EAAW,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAEhE,aAASxhC,GACtB,ICbsBM,EAAUD,EDa5B8Y,OAA4BrZ,IAApBE,EAAOM,eAA+CR,IAArBE,EAAOK,UAA0BqU,GCbxDpU,EDa+E+W,EAAId,KAAKvW,EAAOM,SAAUo9B,QCb/Fr9B,EDawGL,EAAOK,UAAY,GCZpJ,SAAS1F,EAAO6E,GAOrB,IANA,IAAItC,EAAIvC,EAAMyC,OACVvB,EAAI,GACJqJ,EAAI,EACJrI,EAAIyD,EAAS,GACblD,EAAS,EAENF,EAAI,GAAKL,EAAI,IACdO,EAASP,EAAI,EAAI2C,IAAO3C,EAAIjC,KAAKC,IAAI,EAAG2E,EAAQpC,IACpDvB,EAAEqG,KAAKvH,EAAM8mC,UAAUvkC,GAAKL,EAAGK,EAAIL,OAC9BO,GAAUP,EAAI,GAAK2C,KACxB3C,EAAIyD,EAAS4E,GAAKA,EAAI,GAAK5E,EAASlD,QAGtC,OAAOvB,EAAE6lC,UAAU9kB,KAAKvc,KDDtBshC,OAAqC7hC,IAApBE,EAAOO,SAAyB,GAAKP,EAAOO,SAAS,GAAK,GAC3EqhC,OAAqC9hC,IAApBE,EAAOO,SAAyB,GAAKP,EAAOO,SAAS,GAAK,GAC3EH,OAA6BN,IAAnBE,EAAOI,QAAwB,IAAMJ,EAAOI,QAAU,GAChEyhC,OAA+B/hC,IAApBE,EAAO6hC,SAAyBntB,EEjBlC,SAASmtB,GACtB,OAAO,SAASlnC,GACd,OAAOA,EAAMumC,QAAQ,UAAU,SAAShkC,GACtC,OAAO2kC,GAAU3kC,OFcqC4kC,CAAezqB,EAAId,KAAKvW,EAAO6hC,SAAUE,SAC/FC,OAA6BliC,IAAnBE,EAAOgiC,QAAwB,IAAMhiC,EAAOgiC,QAAU,GAChExhC,OAAyBV,IAAjBE,EAAOQ,MAAsB,IAAMR,EAAOQ,MAAQ,GAC1DyhC,OAAqBniC,IAAfE,EAAOiiC,IAAoB,MAAQjiC,EAAOiiC,IAAM,GAE1D,SAASC,EAAUpjC,GAGjB,IAAIK,GAFJL,EAAYD,YAAgBC,IAEPK,KACjBC,EAAQN,EAAUM,MAClBC,EAAOP,EAAUO,KACjBC,EAASR,EAAUQ,OACnBC,EAAOT,EAAUS,KACjBC,EAAQV,EAAUU,MAClBC,EAAQX,EAAUW,MAClBC,EAAYZ,EAAUY,UACtBC,EAAOb,EAAUa,KACjBC,EAAOd,EAAUc,KAGR,MAATA,GAAcH,GAAQ,EAAMG,EAAO,KAG7BuiC,EAAYviC,UAAqBE,IAAdJ,IAA4BA,EAAY,IAAKC,GAAO,EAAMC,EAAO,MAG1FL,GAAkB,MAATJ,GAA0B,MAAVC,KAAgBG,GAAO,EAAMJ,EAAO,IAAKC,EAAQ,KAI9E,IAAI6a,EAAoB,MAAX3a,EAAiBqiC,EAA4B,MAAXriC,GAAkB,SAASyX,KAAKnX,GAAQ,IAAMA,EAAKgR,cAAgB,GAC9GwxB,EAAoB,MAAX9iC,EAAiBsiC,EAAiB,OAAO7qB,KAAKnX,GAAQoiC,EAAU,GAKzEK,EAAaF,EAAYviC,GACzB0iC,EAAc,aAAavrB,KAAKnX,GAUpC,SAASK,EAAOtF,GACd,IAEIuC,EAAGC,EAAGI,EAFNglC,EAActoB,EACduoB,EAAcJ,EAGlB,GAAa,MAATxiC,EACF4iC,EAAcH,EAAW1nC,GAAS6nC,EAClC7nC,EAAQ,OACH,CAIL,IAAI8nC,GAHJ9nC,GAASA,GAGmB,GAAK,EAAIA,EAAQ,EAiB7C,GAdAA,EAAQ0B,MAAM1B,GAASsnC,EAAMI,EAAWznC,KAAKK,IAAIN,GAAQ+E,GAGrDC,IAAMhF,EGjFH,SAAS+W,GACtBgxB,EAAK,IAAK,IAAkCjhB,EAA9BtkB,EAAIuU,EAAEtU,OAAQF,EAAI,EAAGskB,GAAM,EAAOtkB,EAAIC,IAAKD,EACvD,OAAQwU,EAAExU,IACR,IAAK,IAAKskB,EAAKC,EAAKvkB,EAAG,MACvB,IAAK,IAAgB,IAAPskB,IAAUA,EAAKtkB,GAAGukB,EAAKvkB,EAAG,MACxC,QAAS,KAAMwU,EAAExU,GAAI,MAAMwlC,EAASlhB,EAAK,IAAGA,EAAK,GAGrD,OAAOA,EAAK,EAAI9P,EAAElU,MAAM,EAAGgkB,GAAM9P,EAAElU,MAAMikB,EAAK,GAAK/P,EHyE3BixB,CAAWhoC,IAGzB8nC,GAA4B,IAAV9nC,GAAwB,MAAT0E,IAAcojC,GAAgB,GAGnEF,GAAeE,EAA0B,MAATpjC,EAAeA,EAAOmB,EAAkB,MAATnB,GAAyB,MAATA,EAAe,GAAKA,GAAQkjC,EAC3GC,GAAwB,MAAT5iC,EAAe4hC,EAAS,EAAIL,EAAiB,GAAK,IAAMqB,GAAeC,GAA0B,MAATpjC,EAAe,IAAM,IAIxHijC,EAEF,IADAplC,GAAK,EAAGC,EAAIxC,EAAMyC,SACTF,EAAIC,GACX,GAA6B,IAAzBI,EAAI5C,EAAMioC,WAAW1lC,KAAcK,EAAI,GAAI,CAC7CilC,GAAqB,KAANjlC,EAAW6C,EAAUzF,EAAM6C,MAAMN,EAAI,GAAKvC,EAAM6C,MAAMN,IAAMslC,EAC3E7nC,EAAQA,EAAM6C,MAAM,EAAGN,GACvB,OAOJuC,IAAUF,IAAM5E,EAAQwe,EAAMxe,EAAOgc,MAGzC,IAAIvZ,EAASmlC,EAAYnlC,OAASzC,EAAMyC,OAASolC,EAAYplC,OACzDylC,EAAUzlC,EAASoC,EAAQ,IAAInC,MAAMmC,EAAQpC,EAAS,GAAGwf,KAAKzd,GAAQ,GAM1E,OAHIM,GAASF,IAAM5E,EAAQwe,EAAM0pB,EAAUloC,EAAOkoC,EAAQzlC,OAASoC,EAAQgjC,EAAYplC,OAASuZ,KAAWksB,EAAU,IAG7GzjC,GACN,IAAK,IAAKzE,EAAQ4nC,EAAc5nC,EAAQ6nC,EAAcK,EAAS,MAC/D,IAAK,IAAKloC,EAAQ4nC,EAAcM,EAAUloC,EAAQ6nC,EAAa,MAC/D,IAAK,IAAK7nC,EAAQkoC,EAAQrlC,MAAM,EAAGJ,EAASylC,EAAQzlC,QAAU,GAAKmlC,EAAc5nC,EAAQ6nC,EAAcK,EAAQrlC,MAAMJ,GAAS,MAC9H,QAASzC,EAAQkoC,EAAUN,EAAc5nC,EAAQ6nC,EAGnD,OAAOX,EAASlnC,GAOlB,OAtEA+E,OAA0BI,IAAdJ,EAA0B,EAChC,SAASqX,KAAKnX,GAAQhF,KAAKC,IAAI,EAAGD,KAAKE,IAAI,GAAI4E,IAC/C9E,KAAKC,IAAI,EAAGD,KAAKE,IAAI,GAAI4E,IAgE/BO,EAAOvB,SAAW,WAChB,OAAOI,EAAY,IAGdmB,EAaT,MAAO,CACLA,OAAQiiC,EACRhiC,aAZF,SAAsBpB,EAAWnE,GAC/B,IAAIopB,EAAIme,IAAWpjC,EAAYD,YAAgBC,IAAsBc,KAAO,IAAKd,IAC7EmC,EAAiE,EAA7DrG,KAAKC,KAAK,EAAGD,KAAKE,IAAI,EAAGF,KAAKG,MAAMC,YAASL,GAAS,KAC1DwD,EAAIvD,KAAKsB,IAAI,IAAK+E,GAClBgZ,EAASunB,EAAS,EAAIvgC,EAAI,GAC9B,OAAO,SAAStG,GACd,OAAOopB,EAAE5lB,EAAIxD,GAASsf,O,kCI3I5B,kCAMO,SAASqlB,EAAYwD,GAC1B,OAAO,SAASthC,GACd,IAAIkQ,EAAI,IAAIqxB,EACZ,IAAK,IAAI18B,KAAOy8B,EAASpxB,EAAErL,GAAOy8B,EAAQz8B,GAE1C,OADAqL,EAAElQ,OAASA,EACJkQ,GAIX,SAASqxB,KAETA,EAAgBhjC,UAAY,CAC1BgG,YAAag9B,EACbpiC,MAAO,SAASjD,EAAG3B,GAAK8D,KAAK2B,OAAOb,MAAMjD,EAAG3B,IAC7CinC,OAAQ,WAAanjC,KAAK2B,OAAOwhC,UACjChhC,UAAW,WAAanC,KAAK2B,OAAOQ,aACpCC,QAAS,WAAapC,KAAK2B,OAAOS,WAClC6C,aAAc,WAAajF,KAAK2B,OAAOsD,gBACvCC,WAAY,WAAalF,KAAK2B,OAAOuD,gB,kCCxBvC,SAASk+B,EAAeC,EAAU1hC,GAC5B0hC,GAAYC,EAAmBjyB,eAAegyB,EAAStjC,OACzDujC,EAAmBD,EAAStjC,MAAMsjC,EAAU1hC,GAIhD,IAAI4hC,EAAmB,CACrBC,QAAS,SAAS1kC,EAAQ6C,GACxByhC,EAAetkC,EAAOukC,SAAU1hC,IAElC8hC,kBAAmB,SAAS3kC,EAAQ6C,GAElC,IADA,IAAI+hC,EAAW5kC,EAAO4kC,SAAUrmC,GAAK,EAAGC,EAAIomC,EAASnmC,SAC5CF,EAAIC,GAAG8lC,EAAeM,EAASrmC,GAAGgmC,SAAU1hC,KAIrD2hC,EAAqB,CACvBK,OAAQ,SAAS7kC,EAAQ6C,GACvBA,EAAOwhC,UAETS,MAAO,SAAS9kC,EAAQ6C,GACtB7C,EAASA,EAAO+kC,YAChBliC,EAAOb,MAAMhC,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAE5CglC,WAAY,SAAShlC,EAAQ6C,GAE3B,IADA,IAAIkiC,EAAc/kC,EAAO+kC,YAAaxmC,GAAK,EAAGC,EAAIumC,EAAYtmC,SACrDF,EAAIC,GAAGwB,EAAS+kC,EAAYxmC,GAAIsE,EAAOb,MAAMhC,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAErFilC,WAAY,SAASjlC,EAAQ6C,GAC3BqiC,EAAWllC,EAAO+kC,YAAaliC,EAAQ,IAEzCsiC,gBAAiB,SAASnlC,EAAQ6C,GAEhC,IADA,IAAIkiC,EAAc/kC,EAAO+kC,YAAaxmC,GAAK,EAAGC,EAAIumC,EAAYtmC,SACrDF,EAAIC,GAAG0mC,EAAWH,EAAYxmC,GAAIsE,EAAQ,IAErDuiC,QAAS,SAASplC,EAAQ6C,GACxBwiC,EAAcrlC,EAAO+kC,YAAaliC,IAEpCyiC,aAAc,SAAStlC,EAAQ6C,GAE7B,IADA,IAAIkiC,EAAc/kC,EAAO+kC,YAAaxmC,GAAK,EAAGC,EAAIumC,EAAYtmC,SACrDF,EAAIC,GAAG6mC,EAAcN,EAAYxmC,GAAIsE,IAEhD0iC,mBAAoB,SAASvlC,EAAQ6C,GAEnC,IADA,IAAI2iC,EAAaxlC,EAAOwlC,WAAYjnC,GAAK,EAAGC,EAAIgnC,EAAW/mC,SAClDF,EAAIC,GAAG8lC,EAAekB,EAAWjnC,GAAIsE,KAIlD,SAASqiC,EAAWH,EAAaliC,EAAQ4iC,GACvC,IAA6CC,EAAzCnnC,GAAK,EAAGC,EAAIumC,EAAYtmC,OAASgnC,EAErC,IADA5iC,EAAOQ,cACE9E,EAAIC,GAAGknC,EAAaX,EAAYxmC,GAAIsE,EAAOb,MAAM0jC,EAAW,GAAIA,EAAW,GAAIA,EAAW,IACnG7iC,EAAOS,UAGT,SAAS+hC,EAAcN,EAAaliC,GAClC,IAAItE,GAAK,EAAGC,EAAIumC,EAAYtmC,OAE5B,IADAoE,EAAOsD,iBACE5H,EAAIC,GAAG0mC,EAAWH,EAAYxmC,GAAIsE,EAAQ,GACnDA,EAAOuD,aAGM,aAASpG,EAAQ6C,GAC1B7C,GAAUykC,EAAiBlyB,eAAevS,EAAOiB,MACnDwjC,EAAiBzkC,EAAOiB,MAAMjB,EAAQ6C,GAEtCyhC,EAAetkC,EAAQ6C,K,0bClEZ,eAAS7F,EAAGM,GACzB,OAAON,EAAIM,GAAK,EAAIN,EAAIM,EAAI,EAAIN,GAAKM,EAAI,EAAI4I,KCChC,WAASyd,GA0BxB,IAA6ByB,EAxB3B,OADuB,IAAnBzB,EAAQllB,SAyBe2mB,EAzB6BzB,EAA9BA,EA0BnB,SAAS1mB,EAAG8B,GACjB,OAAOic,EAAUoK,EAAEnoB,GAAI8B,KA1BlB,CACL8zB,KAAM,SAAS71B,EAAG+B,EAAG4mC,EAAIC,GAGvB,IAFU,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAK5oC,EAAEyB,QAChBknC,EAAKC,GAAI,CACd,IAAIC,EAAMF,EAAKC,IAAO,EAClBjiB,EAAQ3mB,EAAE6oC,GAAM9mC,GAAK,EAAG4mC,EAAKE,EAAM,EAClCD,EAAKC,EAEZ,OAAOF,GAET/W,MAAO,SAAS5xB,EAAG+B,EAAG4mC,EAAIC,GAGxB,IAFU,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAK5oC,EAAEyB,QAChBknC,EAAKC,GAAI,CACd,IAAIC,EAAMF,EAAKC,IAAO,EAClBjiB,EAAQ3mB,EAAE6oC,GAAM9mC,GAAK,EAAG6mC,EAAKC,EAC5BF,EAAKE,EAAM,EAElB,OAAOF,KCpBb,IAAIG,EAAkBC,EAAS/qB,GACpBgrB,EAAcF,EAAgBlX,MAE1BoX,GADSF,EAAgBjT,KACzBmT,GCJA,ICFA,WAASjnC,GACtB,OAAa,OAANA,EAAamH,KAAOnH,GCDd,WAASJ,EAAQsnC,GAC9B,IAEIjqC,EACAG,EACAD,EAJAsC,EAAIG,EAAOF,OACXF,GAAK,EAKT,GAAe,MAAX0nC,GACF,OAAS1nC,EAAIC,GACX,GAA2B,OAAtBxC,EAAQ2C,EAAOJ,KAAevC,GAASA,EAE1C,IADAG,EAAMD,EAAMF,IACHuC,EAAIC,GACgB,OAAtBxC,EAAQ2C,EAAOJ,MACdpC,EAAMH,IAAOG,EAAMH,GACnBE,EAAMF,IAAOE,EAAMF,SAQ/B,OAASuC,EAAIC,GACX,GAA+C,OAA1CxC,EAAQiqC,EAAQtnC,EAAOJ,GAAIA,EAAGI,KAAoB3C,GAASA,EAE9D,IADAG,EAAMD,EAAMF,IACHuC,EAAIC,GACoC,OAA1CxC,EAAQiqC,EAAQtnC,EAAOJ,GAAIA,EAAGI,MAC7BxC,EAAMH,IAAOG,EAAMH,GACnBE,EAAMF,IAAOE,EAAMF,IAOjC,MAAO,CAACG,EAAKD,ICnCX0H,EAAQlF,MAAM0C,UCAH,GDEIwC,EAAM/E,MACR+E,EAAM8U,ICHR,SAAS5a,EAAOyoB,EAAMxqB,GACnC+B,GAASA,EAAOyoB,GAAQA,EAAMxqB,GAAQyC,EAAIiU,UAAUhU,QAAU,GAAK8nB,EAAOzoB,EAAOA,EAAQ,EAAG,GAAKU,EAAI,EAAI,GAAKzC,EAM9G,IAJA,IAAIwC,GAAK,EACLC,EAAoD,EAAhDvC,KAAKC,IAAI,EAAGD,KAAKqY,MAAMiS,EAAOzoB,GAAS/B,IAC3Cka,EAAQ,IAAIvX,MAAMF,KAEbD,EAAIC,GACXyX,EAAM1X,GAAKT,EAAQS,EAAIxC,EAGzB,OAAOka,ICXLiwB,EAAMjqC,KAAKwY,KAAK,IAChB0xB,EAAKlqC,KAAKwY,KAAK,IACf2xB,EAAKnqC,KAAKwY,KAAK,GAEJ,WAAS3W,EAAOyoB,EAAM8f,GACnC,IAAItD,EAEAvkC,EACAoX,EACA7Z,EAHAwC,GAAK,EAMT,GAD8B8nC,GAASA,GAAzBvoC,GAASA,MAAvByoB,GAAQA,IACc8f,EAAQ,EAAG,MAAO,CAACvoC,GAEzC,IADIilC,EAAUxc,EAAOzoB,KAAOU,EAAIV,EAAOA,EAAQyoB,EAAMA,EAAO/nB,GACT,KAA9CzC,EAAOuqC,EAAcxoC,EAAOyoB,EAAM8f,MAAkBhvB,SAAStb,GAAO,MAAO,GAEhF,GAAIA,EAAO,EAIT,IAHA+B,EAAQ7B,KAAKqY,KAAKxW,EAAQ/B,GAC1BwqB,EAAOtqB,KAAKG,MAAMmqB,EAAOxqB,GACzB6Z,EAAQ,IAAIlX,MAAMF,EAAIvC,KAAKqY,KAAKiS,EAAOzoB,EAAQ,MACtCS,EAAIC,GAAGoX,EAAMrX,IAAMT,EAAQS,GAAKxC,OAKzC,IAHA+B,EAAQ7B,KAAKG,MAAM0B,EAAQ/B,GAC3BwqB,EAAOtqB,KAAKqY,KAAKiS,EAAOxqB,GACxB6Z,EAAQ,IAAIlX,MAAMF,EAAIvC,KAAKqY,KAAKxW,EAAQyoB,EAAO,MACtChoB,EAAIC,GAAGoX,EAAMrX,IAAMT,EAAQS,GAAKxC,EAK3C,OAFIgnC,GAASntB,EAAMmtB,UAEZntB,GAGF,SAAS0wB,EAAcxoC,EAAOyoB,EAAM8f,GACzC,IAAItqC,GAAQwqB,EAAOzoB,GAAS7B,KAAKC,IAAI,EAAGmqC,GACpCE,EAAQtqC,KAAKG,MAAMH,KAAKuY,IAAIzY,GAAQE,KAAKuqC,MACzCC,EAAQ1qC,EAAOE,KAAKsB,IAAI,GAAIgpC,GAChC,OAAOA,GAAS,GACTE,GAASP,EAAM,GAAKO,GAASN,EAAK,EAAIM,GAASL,EAAK,EAAI,GAAKnqC,KAAKsB,IAAI,GAAIgpC,IAC1EtqC,KAAKsB,IAAI,IAAKgpC,IAAUE,GAASP,EAAM,GAAKO,GAASN,EAAK,EAAIM,GAASL,EAAK,EAAI,GAGlF,SAASM,EAAS5oC,EAAOyoB,EAAM8f,GACpC,IAAIM,EAAQ1qC,KAAKK,IAAIiqB,EAAOzoB,GAAS7B,KAAKC,IAAI,EAAGmqC,GAC7CO,EAAQ3qC,KAAKsB,IAAI,GAAItB,KAAKG,MAAMH,KAAKuY,IAAImyB,GAAS1qC,KAAKuqC,OACvDC,EAAQE,EAAQC,EAIpB,OAHIH,GAASP,EAAKU,GAAS,GAClBH,GAASN,EAAIS,GAAS,EACtBH,GAASL,IAAIQ,GAAS,GACxBrgB,EAAOzoB,GAAS8oC,EAAQA,ECjDlB,eAASjoC,GACtB,OAAO1C,KAAKqY,KAAKrY,KAAKuY,IAAI7V,EAAOF,QAAUxC,KAAK4qC,KAAO,GCC1C,WAASloC,EAAQ6D,EAAGyjC,GAEjC,GADe,MAAXA,IAAiBA,EAAUxmC,GACzBjB,EAAIG,EAAOF,OAAjB,CACA,IAAK+D,GAAKA,IAAM,GAAKhE,EAAI,EAAG,OAAQynC,EAAQtnC,EAAO,GAAI,EAAGA,GAC1D,GAAI6D,GAAK,EAAG,OAAQyjC,EAAQtnC,EAAOH,EAAI,GAAIA,EAAI,EAAGG,GAClD,IAAIH,EACAD,GAAKC,EAAI,GAAKgE,EACdqgB,EAAK5mB,KAAKG,MAAMmC,GAChBuoC,GAAUb,EAAQtnC,EAAOkkB,GAAKA,EAAIlkB,GAEtC,OAAOmoC,IADOb,EAAQtnC,EAAOkkB,EAAK,GAAIA,EAAK,EAAGlkB,GACpBmoC,IAAWvoC,EAAIskB,KCZ5B,WAASlkB,EAAQsnC,GAC9B,IAEIjqC,EACAE,EAHAsC,EAAIG,EAAOF,OACXF,GAAK,EAIT,GAAe,MAAX0nC,GACF,OAAS1nC,EAAIC,GACX,GAA2B,OAAtBxC,EAAQ2C,EAAOJ,KAAevC,GAASA,EAE1C,IADAE,EAAMF,IACGuC,EAAIC,GACgB,OAAtBxC,EAAQ2C,EAAOJ,KAAevC,EAAQE,IACzCA,EAAMF,QAQd,OAASuC,EAAIC,GACX,GAA+C,OAA1CxC,EAAQiqC,EAAQtnC,EAAOJ,GAAIA,EAAGI,KAAoB3C,GAASA,EAE9D,IADAE,EAAMF,IACGuC,EAAIC,GACoC,OAA1CxC,EAAQiqC,EAAQtnC,EAAOJ,GAAIA,EAAGI,KAAoB3C,EAAQE,IAC7DA,EAAMF,GAOhB,OAAOE,GChCM,WAAS6qC,GAQtB,IAPA,IACIthC,EAGAuhC,EACApjC,EALApF,EAAIuoC,EAAOtoC,OAEXF,GAAK,EACLgI,EAAI,IAIChI,EAAIC,GAAG+H,GAAKwgC,EAAOxoC,GAAGE,OAG/B,IAFAuoC,EAAS,IAAItoC,MAAM6H,KAEV/H,GAAK,GAGZ,IADAiH,GADA7B,EAAQmjC,EAAOvoC,IACLC,SACDgH,GAAK,GACZuhC,IAASzgC,GAAK3C,EAAM6B,GAIxB,OAAOuhC,I,8DCZM,aACb,OAAO,IAAIC,GAGb,SAASA,IACP/lC,KAAK2/B,QAGPoG,EAAM7lC,UAAY,CAChBgG,YAAa6/B,EACbpG,MAAO,WACL3/B,KAAK6R,EACL7R,KAAKhE,EAAI,GAEX0gB,IAAK,SAASxgB,GACZwgB,EAAIspB,EAAM9pC,EAAG8D,KAAKhE,GAClB0gB,EAAI1c,KAAMgmC,EAAKn0B,EAAG7R,KAAK6R,GACnB7R,KAAK6R,EAAG7R,KAAKhE,GAAKgqC,EAAKhqC,EACtBgE,KAAK6R,EAAIm0B,EAAKhqC,GAErB4C,QAAS,WACP,OAAOoB,KAAK6R,IAIhB,IAAIm0B,EAAO,IAAID,EAEf,SAASrpB,EAAIupB,EAAOnqC,EAAGM,GACrB,IAAIyB,EAAIooC,EAAMp0B,EAAI/V,EAAIM,EAClB8pC,EAAKroC,EAAI/B,EACTqqC,EAAKtoC,EAAIqoC,EACbD,EAAMjqC,EAAKF,EAAIqqC,GAAO/pC,EAAI8pC,G,IChCxBE,EACAC,EACAzjC,EACAC,E,wBALAyjC,EAAUL,IACVM,EAAcN,IAMdO,EAAa,CACf1lC,MAAO0D,IACPrC,UAAWqC,IACXpC,QAASoC,IACTS,aAAc,WACZuhC,EAAWrkC,UAAYskC,EACvBD,EAAWpkC,QAAUskC,GAEvBxhC,WAAY,WACVshC,EAAWrkC,UAAYqkC,EAAWpkC,QAAUokC,EAAW1lC,MAAQ0D,IAC/D8hC,EAAQ5pB,IAAIthB,YAAImrC,IAChBA,EAAY5G,SAEd96B,OAAQ,WACN,IAAI8hC,EAAOL,EAAU,EAErB,OADAA,EAAQ3G,QACDgH,IAIX,SAASF,IACPD,EAAW1lC,MAAQ8lC,EAGrB,SAASA,EAAe/oC,EAAG3B,GACzBsqC,EAAW1lC,MAAQ+lC,EACnBT,EAAMxjC,EAAK/E,EAAGwoC,EAAMxjC,EAAK3G,EAG3B,SAAS2qC,EAAUhpC,EAAG3B,GACpBqqC,EAAY7pB,IAAI7Z,EAAKhF,EAAI+E,EAAK1G,GAC9B0G,EAAK/E,EAAGgF,EAAK3G,EAGf,SAASwqC,IACPG,EAAUT,EAAKC,GAGFG,ICpCXJ,EACAC,EACAzjC,EACAC,EDiCW2jC,I,YC7CXM,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EAMLC,EAAiB,CACnBzmC,MAAO0mC,EACPrlC,UAAWslC,EACXrlC,QAASslC,EACTziC,aAAc,WACZsiC,EAAeplC,UAAYwlC,EAC3BJ,EAAenlC,QAAUwlC,GAE3B1iC,WAAY,WACVqiC,EAAezmC,MAAQ0mC,EACvBD,EAAeplC,UAAYslC,EAC3BF,EAAenlC,QAAUslC,GAE3B7iC,OAAQ,WACN,IAAIgjC,EAAWP,EAAK,CAACF,EAAKE,EAAID,EAAKC,GAC7BH,EAAK,CAACF,EAAKE,EAAID,EAAKC,GACpBH,EAAK,CAACF,EAAKE,EAAID,EAAKC,GACpB,CAAChiC,IAAKA,KAIZ,OAHA8hC,EAAKC,EAAKC,EACVC,EAAKC,EAAKC,EACVC,EAAKC,EAAKC,EAAK,EACRO,IAIX,SAASL,EAAc3pC,EAAG3B,GACxB4qC,GAAMjpC,EACNkpC,GAAM7qC,IACJ8qC,EAGJ,SAASS,IACPF,EAAezmC,MAAQgnC,EAGzB,SAASA,EAAuBjqC,EAAG3B,GACjCqrC,EAAezmC,MAAQinC,EACvBP,EAAc5kC,EAAK/E,EAAGgF,EAAK3G,GAG7B,SAAS6rC,EAAkBlqC,EAAG3B,GAC5B,IAAI6J,EAAKlI,EAAI+E,EAAIoD,EAAK9J,EAAI2G,EAAI3B,EAAIqS,YAAKxN,EAAKA,EAAKC,EAAKA,GACtDihC,GAAM/lC,GAAK0B,EAAK/E,GAAK,EACrBqpC,GAAMhmC,GAAK2B,EAAK3G,GAAK,EACrBirC,GAAMjmC,EACNsmC,EAAc5kC,EAAK/E,EAAGgF,EAAK3G,GAG7B,SAASwrC,IACPH,EAAezmC,MAAQ0mC,EAGzB,SAASG,IACPJ,EAAezmC,MAAQknC,EAGzB,SAASJ,IACPK,EAAkB7B,EAAKC,GAGzB,SAAS2B,EAAuBnqC,EAAG3B,GACjCqrC,EAAezmC,MAAQmnC,EACvBT,EAAcpB,EAAMxjC,EAAK/E,EAAGwoC,EAAMxjC,EAAK3G,GAGzC,SAAS+rC,EAAkBpqC,EAAG3B,GAC5B,IAAI6J,EAAKlI,EAAI+E,EACToD,EAAK9J,EAAI2G,EACT3B,EAAIqS,YAAKxN,EAAKA,EAAKC,EAAKA,GAE5BihC,GAAM/lC,GAAK0B,EAAK/E,GAAK,EACrBqpC,GAAMhmC,GAAK2B,EAAK3G,GAAK,EACrBirC,GAAMjmC,EAGNkmC,IADAlmC,EAAI2B,EAAKhF,EAAI+E,EAAK1G,IACP0G,EAAK/E,GAChBwpC,GAAMnmC,GAAK2B,EAAK3G,GAChBorC,GAAU,EAAJpmC,EACNsmC,EAAc5kC,EAAK/E,EAAGgF,EAAK3G,GAGdqrC,QChGA,SAASW,EAAYzzB,GAClCzU,KAAKmoC,SAAW1zB,EAGlByzB,EAAYhoC,UAAY,CACtBkoC,QAAS,IACTC,YAAa,SAAS5xB,GACpB,OAAOzW,KAAKooC,QAAU3xB,EAAGzW,MAE3BiF,aAAc,WACZjF,KAAKsoC,MAAQ,GAEfpjC,WAAY,WACVlF,KAAKsoC,MAAQtjC,KAEf7C,UAAW,WACTnC,KAAKuoC,OAAS,GAEhBnmC,QAAS,WACY,IAAfpC,KAAKsoC,OAAatoC,KAAKmoC,SAASzc,YACpC1rB,KAAKuoC,OAASvjC,KAEhBlE,MAAO,SAASjD,EAAG3B,GACjB,OAAQ8D,KAAKuoC,QACX,KAAK,EACHvoC,KAAKmoC,SAAS1c,OAAO5tB,EAAG3B,GACxB8D,KAAKuoC,OAAS,EACd,MAEF,KAAK,EACHvoC,KAAKmoC,SAASxc,OAAO9tB,EAAG3B,GACxB,MAEF,QACE8D,KAAKmoC,SAAS1c,OAAO5tB,EAAImC,KAAKooC,QAASlsC,GACvC8D,KAAKmoC,SAASpb,IAAIlvB,EAAG3B,EAAG8D,KAAKooC,QAAS,EAAGv1B,OAK/ChO,OAAQL,KCvCV,IACIgkC,EACApC,EACAC,EACAzjC,EACAC,EALA4lC,GAAYxC,IAOZyC,GAAe,CACjB5nC,MAAO0D,IACPrC,UAAW,WACTumC,GAAa5nC,MAAQ6nC,IAEvBvmC,QAAS,WACHomC,GAAYI,GAAYxC,EAAKC,GACjCqC,GAAa5nC,MAAQ0D,KAEvBS,aAAc,WACZujC,GAAa,GAEftjC,WAAY,WACVsjC,EAAa,MAEf3jC,OAAQ,WACN,IAAItH,GAAUkrC,GAEd,OADAA,GAAU9I,QACHpiC,IAIX,SAASorC,GAAiB9qC,EAAG3B,GAC3BwsC,GAAa5nC,MAAQ8nC,GACrBxC,EAAMxjC,EAAK/E,EAAGwoC,EAAMxjC,EAAK3G,EAG3B,SAAS0sC,GAAY/qC,EAAG3B,GACtB0G,GAAM/E,EAAGgF,GAAM3G,EACfusC,GAAU/rB,IAAInJ,YAAK3Q,EAAKA,EAAKC,EAAKA,IAClCD,EAAK/E,EAAGgF,EAAK3G,EAGAwsC,UC5CA,SAASG,KACtB7oC,KAAK8oC,QAAU,GAoDjB,SAASzU,GAAOtF,GACd,MAAO,MAAQA,EACT,IAAMA,EAAS,IAAMA,EAAS,aAAe,EAAIA,EACjD,IAAMA,EAAS,IAAMA,EAAS,YAAc,EAAIA,EAChD,IArDR8Z,GAAW3oC,UAAY,CACrBkoC,QAAS,IACTW,QAAS1U,GAAO,KAChBgU,YAAa,SAAS5xB,GAEpB,OADKA,GAAKA,KAAOzW,KAAKooC,UAASpoC,KAAKooC,QAAU3xB,EAAGzW,KAAK+oC,QAAU,MACzD/oC,MAETiF,aAAc,WACZjF,KAAKsoC,MAAQ,GAEfpjC,WAAY,WACVlF,KAAKsoC,MAAQtjC,KAEf7C,UAAW,WACTnC,KAAKuoC,OAAS,GAEhBnmC,QAAS,WACY,IAAfpC,KAAKsoC,OAAatoC,KAAK8oC,QAAQzmC,KAAK,KACxCrC,KAAKuoC,OAASvjC,KAEhBlE,MAAO,SAASjD,EAAG3B,GACjB,OAAQ8D,KAAKuoC,QACX,KAAK,EACHvoC,KAAK8oC,QAAQzmC,KAAK,IAAKxE,EAAG,IAAK3B,GAC/B8D,KAAKuoC,OAAS,EACd,MAEF,KAAK,EACHvoC,KAAK8oC,QAAQzmC,KAAK,IAAKxE,EAAG,IAAK3B,GAC/B,MAEF,QACsB,MAAhB8D,KAAK+oC,UAAiB/oC,KAAK+oC,QAAU1U,GAAOr0B,KAAKooC,UACrDpoC,KAAK8oC,QAAQzmC,KAAK,IAAKxE,EAAG,IAAK3B,EAAG8D,KAAK+oC,WAK7ClkC,OAAQ,WACN,GAAI7E,KAAK8oC,QAAQvrC,OAAQ,CACvB,IAAIsH,EAAS7E,KAAK8oC,QAAQ/rB,KAAK,IAE/B,OADA/c,KAAK8oC,QAAU,GACRjkC,EAEP,OAAO,OCvCE,aAAS65B,EAAYjqB,GAClC,IACIu0B,EACAC,EAFAZ,EAAc,IAIlB,SAASjzB,EAAKtW,GAKZ,OAJIA,IACyB,mBAAhBupC,GAA4BY,EAAcZ,aAAaA,EAAY1zB,MAAM3U,KAAMuR,YAC1F5P,YAAO7C,EAAQkqC,EAAiBC,KAE3BA,EAAcpkC,SAwCvB,OArCAuQ,EAAKuxB,KAAO,SAAS7nC,GAEnB,OADA6C,YAAO7C,EAAQkqC,EAAiBE,IACzBA,EAASrkC,UAGlBuQ,EAAK+zB,QAAU,SAASrqC,GAEtB,OADA6C,YAAO7C,EAAQkqC,EAAiBI,KACzBA,GAAYvkC,UAGrBuQ,EAAK4B,OAAS,SAASlY,GAErB,OADA6C,YAAO7C,EAAQkqC,EAAiBK,MACzBA,IAAWxkC,UAGpBuQ,EAAKyyB,SAAW,SAAS/oC,GAEvB,OADA6C,YAAO7C,EAAQkqC,EAAiBM,IACzBA,EAAazkC,UAGtBuQ,EAAKspB,WAAa,SAASjoB,GACzB,OAAOlF,UAAUhU,QAAUyrC,EAAwB,MAALvyB,GAAaioB,EAAa,KAAM7pB,MAAa6pB,EAAajoB,GAAG9U,OAAQyT,GAAQspB,GAG7HtpB,EAAKX,QAAU,SAASgC,GACtB,OAAKlF,UAAUhU,QACf0rC,EAAqB,MAALxyB,GAAahC,EAAU,KAAM,IAAIo0B,IAAc,IAAIX,EAAYzzB,EAAUgC,GAC9D,mBAAhB4xB,GAA4BY,EAAcZ,YAAYA,GAC1DjzB,GAHuBX,GAMhCW,EAAKizB,YAAc,SAAS5xB,GAC1B,OAAKlF,UAAUhU,QACf8qC,EAA2B,mBAAN5xB,EAAmBA,GAAKwyB,EAAcZ,aAAa5xB,IAAKA,GACtErB,GAFuBizB,GAKzBjzB,EAAKspB,WAAWA,GAAYjqB,QAAQA,K,kCC3D9B,aAAS5W,GACtB,OAAO,WACL,OAAOA,K,sHCFJ,SAAS0rC,EAAU30B,EAAQG,GAChC,OAAQxD,UAAUhU,QAChB,KAAK,EAAG,MACR,KAAK,EAAGyC,KAAK+U,MAAMH,GAAS,MAC5B,QAAS5U,KAAK+U,MAAMA,GAAOH,OAAOA,GAEpC,OAAO5U,K,gBCNL0C,EAAQlF,MAAM0C,UAEPsX,EAAM9U,EAAM8U,IACZ7Z,EAAQ+E,EAAM/E,MCCd6rC,EAAW,CAAC/xB,KAAM,YAEd,SAASgyB,IACtB,IAAIvqB,EAAQ1H,cACR5C,EAAS,GACTG,EAAQ,GACR20B,EAAUF,EAEd,SAAS91B,EAAM3X,GACb,IAAIyK,EAAMzK,EAAI,GAAIsB,EAAI6hB,EAAMvH,IAAInR,GAChC,IAAKnJ,EAAG,CACN,GAAIqsC,IAAYF,EAAU,OAAOE,EACjCxqB,EAAMtH,IAAIpR,EAAKnJ,EAAIuX,EAAOvS,KAAKtG,IAEjC,OAAOgZ,GAAO1X,EAAI,GAAK0X,EAAMxX,QAyB/B,OAtBAmW,EAAMkB,OAAS,SAAS6B,GACtB,IAAKlF,UAAUhU,OAAQ,OAAOqX,EAAOjX,QACrCiX,EAAS,GAAIsK,EAAQ1H,cAErB,IADA,IAA0Bzb,EAAGyK,EAAzBnJ,GAAK,EAAGC,EAAImZ,EAAElZ,SACTF,EAAIC,GAAQ4hB,EAAMihB,IAAI35B,GAAOzK,EAAI0a,EAAEpZ,IAAM,KAAK6hB,EAAMtH,IAAIpR,EAAKoO,EAAOvS,KAAKtG,IAClF,OAAO2X,GAGTA,EAAMqB,MAAQ,SAAS0B,GACrB,OAAOlF,UAAUhU,QAAUwX,EAAQpX,EAAM+Y,KAAKD,GAAI/C,GAASqB,EAAMpX,SAGnE+V,EAAMg2B,QAAU,SAASjzB,GACvB,OAAOlF,UAAUhU,QAAUmsC,EAAUjzB,EAAG/C,GAASg2B,GAGnDh2B,EAAMtB,KAAO,WACX,OAAOq3B,EAAQ70B,EAAQG,GAAO20B,QAAQA,IAGxCH,EAAU50B,MAAMjB,EAAOnC,WAEhBmC,ECvCM,SAASi2B,IACtB,IAII9uC,EACAgZ,EALAH,EAAQ+1B,IAAUC,aAAQzpC,GAC1B2U,EAASlB,EAAMkB,OACfg1B,EAAel2B,EAAMqB,MACrBA,EAAQ,CAAC,EAAG,GAGZpD,GAAQ,EACRk4B,EAAe,EACfC,EAAe,EACfvqC,EAAQ,GAIZ,SAASwqC,IACP,IAAIzsC,EAAIsX,IAASrX,OACbskC,EAAU9sB,EAAM,GAAKA,EAAM,GAC3BnY,EAAQmY,EAAM8sB,EAAU,GACxBxc,EAAOtQ,EAAM,EAAI8sB,GACrBhnC,GAAQwqB,EAAOzoB,GAAS7B,KAAKC,IAAI,EAAGsC,EAAIusC,EAA8B,EAAfC,GACnDn4B,IAAO9W,EAAOE,KAAKG,MAAML,IAC7B+B,IAAUyoB,EAAOzoB,EAAQ/B,GAAQyC,EAAIusC,IAAiBtqC,EACtDsU,EAAYhZ,GAAQ,EAAIgvC,GACpBl4B,IAAO/U,EAAQ7B,KAAK4W,MAAM/U,GAAQiX,EAAY9Y,KAAK4W,MAAMkC,IAC7D,IAAIpW,EAASusC,YAAS1sC,GAAGka,KAAI,SAASna,GAAK,OAAOT,EAAQ/B,EAAOwC,KACjE,OAAOusC,EAAa/H,EAAUpkC,EAAOokC,UAAYpkC,GAmDnD,cAhEOiW,EAAMg2B,QAgBbh2B,EAAMkB,OAAS,SAAS6B,GACtB,OAAOlF,UAAUhU,QAAUqX,EAAO6B,GAAIszB,KAAan1B,KAGrDlB,EAAMqB,MAAQ,SAAS0B,GACrB,OAAOlF,UAAUhU,QAAUwX,EAAQ,EAAE0B,EAAE,IAAKA,EAAE,IAAKszB,KAAah1B,EAAMpX,SAGxE+V,EAAMu2B,WAAa,SAASxzB,GAC1B,OAAO1B,EAAQ,EAAE0B,EAAE,IAAKA,EAAE,IAAK9E,GAAQ,EAAMo4B,KAG/Cr2B,EAAMG,UAAY,WAChB,OAAOA,GAGTH,EAAM7Y,KAAO,WACX,OAAOA,GAGT6Y,EAAM/B,MAAQ,SAAS8E,GACrB,OAAOlF,UAAUhU,QAAUoU,IAAU8E,EAAGszB,KAAap4B,GAGvD+B,EAAMsvB,QAAU,SAASvsB,GACvB,OAAOlF,UAAUhU,QAAUssC,EAAe9uC,KAAKE,IAAI,EAAG6uC,GAAgBrzB,GAAIszB,KAAaF,GAGzFn2B,EAAMm2B,aAAe,SAASpzB,GAC5B,OAAOlF,UAAUhU,QAAUssC,EAAe9uC,KAAKE,IAAI,EAAGwb,GAAIszB,KAAaF,GAGzEn2B,EAAMo2B,aAAe,SAASrzB,GAC5B,OAAOlF,UAAUhU,QAAUusC,GAAgBrzB,EAAGszB,KAAaD,GAG7Dp2B,EAAMnU,MAAQ,SAASkX,GACrB,OAAOlF,UAAUhU,QAAUgC,EAAQxE,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGwb,IAAKszB,KAAaxqC,GAG/EmU,EAAMtB,KAAO,WACX,OAAOu3B,EAAK/0B,IAAUG,GACjBpD,MAAMA,GACNk4B,aAAaA,GACbC,aAAaA,GACbvqC,MAAMA,IAGNgqC,EAAU50B,MAAMo1B,IAAWx4B,W,4BChFrB,WAASzV,EAAGM,GACzB,OAAON,GAAKA,EAAGM,GAAKA,EAAG,SAASJ,GAC9B,OAAOjB,KAAK4W,MAAM7V,GAAK,EAAIE,GAAKI,EAAIJ,KCFzB,WAAS6B,GACtB,OAAQA,GCKN88B,EAAO,CAAC,EAAG,GAER,SAAS9lB,EAAShX,GACvB,OAAOA,EAGT,SAASqsC,EAAUpuC,EAAGM,GACpB,OAAQA,GAAMN,GAAKA,GACb,SAAS+B,GAAK,OAAQA,EAAI/B,GAAKM,ICdfyB,EDePrB,MAAMJ,GAAK4I,IAAM,GCdzB,WACL,OAAOnH,IAFI,IAASA,EDkBxB,SAASssC,EAAQv1B,GACf,IAAkD5Y,EAA9CF,EAAI8Y,EAAO,GAAIxY,EAAIwY,EAAOA,EAAOrX,OAAS,GAE9C,OADIzB,EAAIM,IAAGJ,EAAIF,EAAGA,EAAIM,EAAGA,EAAIJ,GACtB,SAAS6B,GAAK,OAAO9C,KAAKC,IAAIc,EAAGf,KAAKE,IAAImB,EAAGyB,KAKtD,SAASusC,EAAMx1B,EAAQG,EAAOrT,GAC5B,IAAI2oC,EAAKz1B,EAAO,GAAI01B,EAAK11B,EAAO,GAAI21B,EAAKx1B,EAAM,GAAIy1B,EAAKz1B,EAAM,GAG9D,OAFIu1B,EAAKD,GAAIA,EAAKH,EAAUI,EAAID,GAAKE,EAAK7oC,EAAY8oC,EAAID,KACrDF,EAAKH,EAAUG,EAAIC,GAAKC,EAAK7oC,EAAY6oC,EAAIC,IAC3C,SAAS3sC,GAAK,OAAO0sC,EAAGF,EAAGxsC,KAGpC,SAAS4sC,EAAQ71B,EAAQG,EAAOrT,GAC9B,IAAI2D,EAAItK,KAAKE,IAAI2Z,EAAOrX,OAAQwX,EAAMxX,QAAU,EAC5CxB,EAAI,IAAIyB,MAAM6H,GACdvI,EAAI,IAAIU,MAAM6H,GACdhI,GAAK,EAQT,IALIuX,EAAOvP,GAAKuP,EAAO,KACrBA,EAASA,EAAOjX,QAAQkkC,UACxB9sB,EAAQA,EAAMpX,QAAQkkC,aAGfxkC,EAAIgI,GACXtJ,EAAEsB,GAAK6sC,EAAUt1B,EAAOvX,GAAIuX,EAAOvX,EAAI,IACvCP,EAAEO,GAAKqE,EAAYqT,EAAM1X,GAAI0X,EAAM1X,EAAI,IAGzC,OAAO,SAASQ,GACd,IAAIR,EAAIqtC,YAAO91B,EAAQ/W,EAAG,EAAGwH,GAAK,EAClC,OAAOvI,EAAEO,GAAGtB,EAAEsB,GAAGQ,KAId,SAASuU,EAAKmc,EAAQC,GAC3B,OAAOA,EACF5Z,OAAO2Z,EAAO3Z,UACdG,MAAMwZ,EAAOxZ,SACbrT,YAAY6sB,EAAO7sB,eACnBipC,MAAMpc,EAAOoc,SACbjB,QAAQnb,EAAOmb,WAGf,SAASjK,IACd,IAGIjrB,EACAo2B,EACAlB,EAEAmB,EACAC,EACAC,EATAn2B,EAAS+lB,EACT5lB,EAAQ4lB,EACRj5B,EAAcspC,IAIdL,EAAQ91B,EAKZ,SAASk1B,IAGP,OAFAc,EAAY9vC,KAAKE,IAAI2Z,EAAOrX,OAAQwX,EAAMxX,QAAU,EAAIktC,EAAUL,EAClEU,EAASC,EAAQ,KACVr3B,EAGT,SAASA,EAAM7V,GACb,OAAOrB,MAAMqB,GAAKA,GAAK6rC,GAAWoB,IAAWA,EAASD,EAAUj2B,EAAO4C,IAAIhD,GAAYO,EAAOrT,KAAe8S,EAAUm2B,EAAM9sC,KA+B/H,OA5BA6V,EAAM0kB,OAAS,SAASl8B,GACtB,OAAOyuC,EAAMC,GAAaG,IAAUA,EAAQF,EAAU91B,EAAOH,EAAO4C,IAAIhD,GAAY4T,OAAqBlsB,MAG3GwX,EAAMkB,OAAS,SAAS6B,GACtB,OAAOlF,UAAUhU,QAAUqX,EAAS4C,EAAId,KAAKD,EAAGlY,GAASosC,IAAU91B,IAAa81B,EAAQR,EAAQv1B,IAAUm1B,KAAan1B,EAAOjX,SAGhI+V,EAAMqB,MAAQ,SAAS0B,GACrB,OAAOlF,UAAUhU,QAAUwX,EAAQpX,EAAM+Y,KAAKD,GAAIszB,KAAah1B,EAAMpX,SAGvE+V,EAAMu2B,WAAa,SAASxzB,GAC1B,OAAO1B,EAAQpX,EAAM+Y,KAAKD,GAAI/U,EAAcupC,EAAkBlB,KAGhEr2B,EAAMi3B,MAAQ,SAASl0B,GACrB,OAAOlF,UAAUhU,QAAUotC,EAAQl0B,EAAI0zB,EAAQv1B,GAAUC,EAAUnB,GAASi3B,IAAU91B,GAGxFnB,EAAMhS,YAAc,SAAS+U,GAC3B,OAAOlF,UAAUhU,QAAUmE,EAAc+U,EAAGszB,KAAaroC,GAG3DgS,EAAMg2B,QAAU,SAASjzB,GACvB,OAAOlF,UAAUhU,QAAUmsC,EAAUjzB,EAAG/C,GAASg2B,GAG5C,SAAS1tC,EAAGkvC,GAEjB,OADA12B,EAAYxY,EAAG4uC,EAAcM,EACtBnB,KAII,SAASoB,EAAW32B,EAAWo2B,GAC5C,OAAOnL,IAAcjrB,EAAWo2B,G,gEErH3B,SAASQ,EAAU13B,GACxB,IAAIkB,EAASlB,EAAMkB,OAoDnB,OAlDAlB,EAAMgB,MAAQ,SAASywB,GACrB,IAAIppC,EAAI6Y,IACR,OAAOF,YAAM3Y,EAAE,GAAIA,EAAEA,EAAEwB,OAAS,GAAa,MAAT4nC,EAAgB,GAAKA,IAG3DzxB,EAAMU,WAAa,SAAS+wB,EAAOlmC,GACjC,IAAIlD,EAAI6Y,IACR,OCZW,SAAShY,EAAOyoB,EAAM8f,EAAOlmC,GAC1C,IACIY,EADAhF,EAAO2qC,YAAS5oC,EAAOyoB,EAAM8f,GAGjC,QADAlmC,EAAYD,YAA6B,MAAbC,EAAoB,KAAOA,IACrCc,MAChB,IAAK,IACH,IAAIjF,EAAQC,KAAKC,IAAID,KAAKK,IAAIwB,GAAQ7B,KAAKK,IAAIiqB,IAE/C,OAD2B,MAAvBpmB,EAAUY,WAAsBrD,MAAMqD,EAAYwrC,YAAgBxwC,EAAMC,MAASmE,EAAUY,UAAYA,GACpGQ,YAAapB,EAAWnE,GAEjC,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACwB,MAAvBmE,EAAUY,WAAsBrD,MAAMqD,EAAYyrC,YAAezwC,EAAME,KAAKC,IAAID,KAAKK,IAAIwB,GAAQ7B,KAAKK,IAAIiqB,QAAUpmB,EAAUY,UAAYA,GAAgC,MAAnBZ,EAAUc,OACrK,MAEF,IAAK,IACL,IAAK,IACwB,MAAvBd,EAAUY,WAAsBrD,MAAMqD,EAAY0rC,YAAe1wC,MAAQoE,EAAUY,UAAYA,EAAuC,GAAP,MAAnBZ,EAAUc,OAI9H,OAAOK,YAAOnB,GDZLmV,CAAWrY,EAAE,GAAIA,EAAEA,EAAEwB,OAAS,GAAa,MAAT4nC,EAAgB,GAAKA,EAAOlmC,IAGvEyU,EAAM83B,KAAO,SAASrG,GACP,MAATA,IAAeA,EAAQ,IAE3B,IAKItqC,EALAkB,EAAI6Y,IACJ+M,EAAK,EACLC,EAAK7lB,EAAEwB,OAAS,EAChBX,EAAQb,EAAE4lB,GACV0D,EAAOtpB,EAAE6lB,GA8Bb,OA3BIyD,EAAOzoB,IACT/B,EAAO+B,EAAOA,EAAQyoB,EAAMA,EAAOxqB,EACnCA,EAAO8mB,EAAIA,EAAKC,EAAIA,EAAK/mB,IAG3BA,EAAOuqC,YAAcxoC,EAAOyoB,EAAM8f,IAEvB,GACTvoC,EAAQ7B,KAAKG,MAAM0B,EAAQ/B,GAAQA,EACnCwqB,EAAOtqB,KAAKqY,KAAKiS,EAAOxqB,GAAQA,EAChCA,EAAOuqC,YAAcxoC,EAAOyoB,EAAM8f,IACzBtqC,EAAO,IAChB+B,EAAQ7B,KAAKqY,KAAKxW,EAAQ/B,GAAQA,EAClCwqB,EAAOtqB,KAAKG,MAAMmqB,EAAOxqB,GAAQA,EACjCA,EAAOuqC,YAAcxoC,EAAOyoB,EAAM8f,IAGhCtqC,EAAO,GACTkB,EAAE4lB,GAAM5mB,KAAKG,MAAM0B,EAAQ/B,GAAQA,EACnCkB,EAAE6lB,GAAM7mB,KAAKqY,KAAKiS,EAAOxqB,GAAQA,EACjC+Z,EAAO7Y,IACElB,EAAO,IAChBkB,EAAE4lB,GAAM5mB,KAAKqY,KAAKxW,EAAQ/B,GAAQA,EAClCkB,EAAE6lB,GAAM7mB,KAAKG,MAAMmqB,EAAOxqB,GAAQA,EAClC+Z,EAAO7Y,IAGF2X,GAGFA,EAGM,SAAS7X,IACtB,IAAI6X,EAAQy3B,EAAWt2B,EAAUA,GAQjC,OANAnB,EAAMtB,KAAO,WACX,OAAOA,EAAKsB,EAAO7X,MAGrB0tC,EAAU50B,MAAMjB,EAAOnC,WAEhB65B,EAAU13B,GEtEnB,IAAI5N,EAAK,IAAI1H,KACT9C,EAAK,IAAI8C,KAEE,SAASqtC,EAAYC,EAAQC,EAASxG,EAAOyG,GAE1D,SAASnoB,EAAShlB,GAChB,OAAOitC,EAAOjtC,EAA4B,IAArB8S,UAAUhU,OAAe,IAAIa,KAAO,IAAIA,MAAMK,IAAQA,EA8D7E,OA3DAglB,EAASvoB,MAAQ,SAASuD,GACxB,OAAOitC,EAAOjtC,EAAO,IAAIL,MAAMK,IAAQA,GAGzCglB,EAASrQ,KAAO,SAAS3U,GACvB,OAAOitC,EAAOjtC,EAAO,IAAIL,KAAKK,EAAO,IAAKktC,EAAQltC,EAAM,GAAIitC,EAAOjtC,GAAOA,GAG5EglB,EAAS9R,MAAQ,SAASlT,GACxB,IAAI4rC,EAAK5mB,EAAShlB,GACd6rC,EAAK7mB,EAASrQ,KAAK3U,GACvB,OAAOA,EAAO4rC,EAAKC,EAAK7rC,EAAO4rC,EAAKC,GAGtC7mB,EAAS7P,OAAS,SAASnV,EAAM5D,GAC/B,OAAO8wC,EAAQltC,EAAO,IAAIL,MAAMK,GAAe,MAAR5D,EAAe,EAAIE,KAAKG,MAAML,IAAQ4D,GAG/EglB,EAAS1O,MAAQ,SAASnY,EAAOyoB,EAAMxqB,GACrC,IAAgB6mB,EAAZ3M,EAAQ,GAGZ,GAFAnY,EAAQ6mB,EAASrQ,KAAKxW,GACtB/B,EAAe,MAARA,EAAe,EAAIE,KAAKG,MAAML,KAC/B+B,EAAQyoB,GAAWxqB,EAAO,GAAI,OAAOka,EAC3C,GAAGA,EAAM1S,KAAKqf,EAAW,IAAItjB,MAAMxB,IAAS+uC,EAAQ/uC,EAAO/B,GAAO6wC,EAAO9uC,SAClE8kB,EAAW9kB,GAASA,EAAQyoB,GACnC,OAAOtQ,GAGT0O,EAASlN,OAAS,SAASW,GACzB,OAAOu0B,GAAY,SAAShtC,GAC1B,GAAIA,GAAQA,EAAM,KAAOitC,EAAOjtC,IAAQyY,EAAKzY,IAAOA,EAAKJ,QAAQI,EAAO,MACvE,SAASA,EAAM5D,GAChB,GAAI4D,GAAQA,EACV,GAAI5D,EAAO,EAAG,OAASA,GAAQ,GAC7B,KAAO8wC,EAAQltC,GAAO,IAAKyY,EAAKzY,UAC3B,OAAS5D,GAAQ,GACtB,KAAO8wC,EAAQltC,EAAM,IAAMyY,EAAKzY,UAMpC0mC,IACF1hB,EAAS0hB,MAAQ,SAASvoC,EAAOC,GAG/B,OAFAiJ,EAAGzH,SAASzB,GAAQtB,EAAG+C,SAASxB,GAChC6uC,EAAO5lC,GAAK4lC,EAAOpwC,GACZP,KAAKG,MAAMiqC,EAAMr/B,EAAIxK,KAG9BmoB,EAASkG,MAAQ,SAAS9uB,GAExB,OADAA,EAAOE,KAAKG,MAAML,GACVsb,SAAStb,IAAWA,EAAO,EAC3BA,EAAO,EACT4oB,EAASlN,OAAOq1B,EACZ,SAAS7vC,GAAK,OAAO6vC,EAAM7vC,GAAKlB,GAAS,GACzC,SAASkB,GAAK,OAAO0nB,EAAS0hB,MAAM,EAAGppC,GAAKlB,GAAS,IAH3C4oB,EADoB,OAQrCA,EClET,IAAIooB,EAAOpoB,GAAS,SAAShlB,GAC3BA,EAAKqtC,SAAS,EAAG,GACjBrtC,EAAKstC,SAAS,EAAG,EAAG,EAAG,MACtB,SAASttC,EAAM5D,GAChB4D,EAAKutC,YAAYvtC,EAAKwtC,cAAgBpxC,MACrC,SAAS+B,EAAOC,GACjB,OAAOA,EAAIovC,cAAgBrvC,EAAMqvC,iBAChC,SAASxtC,GACV,OAAOA,EAAKwtC,iBAIdJ,EAAKliB,MAAQ,SAASrrB,GACpB,OAAQ6X,SAAS7X,EAAIvD,KAAKG,MAAMoD,KAASA,EAAI,EAAYmlB,GAAS,SAAShlB,GACzEA,EAAKutC,YAAYjxC,KAAKG,MAAMuD,EAAKwtC,cAAgB3tC,GAAKA,GACtDG,EAAKqtC,SAAS,EAAG,GACjBrtC,EAAKstC,SAAS,EAAG,EAAG,EAAG,MACtB,SAASttC,EAAM5D,GAChB4D,EAAKutC,YAAYvtC,EAAKwtC,cAAgBpxC,EAAOyD,MALG,MASrCutC,QCtBXK,GDuBeL,EAAK92B,MCvBZ0O,GAAS,SAAShlB,GAC5BA,EAAK0tC,QAAQ,GACb1tC,EAAKstC,SAAS,EAAG,EAAG,EAAG,MACtB,SAASttC,EAAM5D,GAChB4D,EAAKqtC,SAASrtC,EAAK2tC,WAAavxC,MAC/B,SAAS+B,EAAOC,GACjB,OAAOA,EAAIuvC,WAAaxvC,EAAMwvC,WAAyD,IAA3CvvC,EAAIovC,cAAgBrvC,EAAMqvC,kBACrE,SAASxtC,GACV,OAAOA,EAAK2tC,eAIMF,EAAMn3B,MCX1B,SAASs3B,EAAQhvC,GACf,OAAOomB,GAAS,SAAShlB,GACvBA,EAAK0tC,QAAQ1tC,EAAK6tC,WAAa7tC,EAAK8tC,SAAW,EAAIlvC,GAAK,GACxDoB,EAAKstC,SAAS,EAAG,EAAG,EAAG,MACtB,SAASttC,EAAM5D,GAChB4D,EAAK0tC,QAAQ1tC,EAAK6tC,UAAmB,EAAPzxC,MAC7B,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,ECTU,KDSDC,EAAI2vC,oBAAsB5vC,EAAM4vC,sBCNjC,UDUnB,IAAIC,EAASJ,EAAQ,GACjBK,EAASL,EAAQ,GACjBM,EAAUN,EAAQ,GAClBO,EAAYP,EAAQ,GACpBQ,EAAWR,EAAQ,GACnBS,EAAST,EAAQ,GACjBU,EAAWV,EAAQ,GEjB1BW,GFmBiBP,EAAO13B,MACP23B,EAAO33B,MACN43B,EAAQ53B,MACN63B,EAAU73B,MACX83B,EAAS93B,MACX+3B,EAAO/3B,MACLg4B,EAASh4B,MEzBtB0O,GAAS,SAAShlB,GAC1BA,EAAKstC,SAAS,EAAG,EAAG,EAAG,MACtB,SAASttC,EAAM5D,GAChB4D,EAAK0tC,QAAQ1tC,EAAK6tC,UAAYzxC,MAC7B,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,EDPY,KCOHC,EAAI2vC,oBAAsB5vC,EAAM4vC,sBDLhC,SCMtB,SAAS/tC,GACV,OAAOA,EAAK6tC,UAAY,MAGXU,ICVXC,GDWcD,EAAIj4B,MCXX0O,GAAS,SAAShlB,GAC3BA,EAAKJ,QAAQI,EAAOA,EAAKyuC,kBFJC,IEImBzuC,EAAK0uC,aFHxB,IEGwD1uC,EAAK2uC,iBACtF,SAAS3uC,EAAM5D,GAChB4D,EAAKJ,SAASI,EFJU,KEIH5D,MACpB,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GFNU,QEOvB,SAAS6B,GACV,OAAOA,EAAK4uC,eCPVC,GDWeL,EAAKl4B,MCXX0O,GAAS,SAAShlB,GAC7BA,EAAKJ,QAAQI,EAAOA,EAAKyuC,kBHJC,IGImBzuC,EAAK0uC,iBACjD,SAAS1uC,EAAM5D,GAChB4D,EAAKJ,SAASI,EHLY,IGKL5D,MACpB,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GHPY,OGQzB,SAAS6B,GACV,OAAOA,EAAK2uC,iBCPVG,GDWiBD,EAAOv4B,MCXf0O,GAAS,SAAShlB,GAC7BA,EAAKJ,QAAQI,EAAOA,EAAKyuC,sBACxB,SAASzuC,EAAM5D,GAChB4D,EAAKJ,SAASI,EJNY,IIML5D,MACpB,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GJRY,OISzB,SAAS6B,GACV,OAAOA,EAAK+uC,oBCRVC,GDYiBF,EAAOx4B,MCZV0O,GAAS,eAExB,SAAShlB,EAAM5D,GAChB4D,EAAKJ,SAASI,EAAO5D,MACpB,SAAS+B,EAAOC,GACjB,OAAOA,EAAMD,MAIf6wC,EAAY9jB,MAAQ,SAASrrB,GAE3B,OADAA,EAAIvD,KAAKG,MAAMoD,GACV6X,SAAS7X,IAAQA,EAAI,EACpBA,EAAI,EACHmlB,GAAS,SAAShlB,GACvBA,EAAKJ,QAAQtD,KAAKG,MAAMuD,EAAOH,GAAKA,MACnC,SAASG,EAAM5D,GAChB4D,EAAKJ,SAASI,EAAO5D,EAAOyD,MAC3B,SAAS1B,EAAOC,GACjB,OAAQA,EAAMD,GAAS0B,KANJmvC,EADgB,MAYbA,EAAY14B,MCtBtC,SAAS24B,EAAWrwC,GAClB,OAAOomB,GAAS,SAAShlB,GACvBA,EAAKkvC,WAAWlvC,EAAKmvC,cAAgBnvC,EAAKovC,YAAc,EAAIxwC,GAAK,GACjEoB,EAAKqvC,YAAY,EAAG,EAAG,EAAG,MACzB,SAASrvC,EAAM5D,GAChB4D,EAAKkvC,WAAWlvC,EAAKmvC,aAAsB,EAAP/yC,MACnC,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GNNQ,UMUnB,IAAImxC,EAAYL,EAAW,GACvBM,GAAYN,EAAW,GACvBO,GAAaP,EAAW,GACxBQ,GAAeR,EAAW,GAC1BS,GAAcT,EAAW,GACzBU,GAAYV,EAAW,GACvBW,GAAcX,EAAW,GCjBhCY,IDmBoBP,EAAUh5B,MACVi5B,GAAUj5B,MACTk5B,GAAWl5B,MACTm5B,GAAan5B,MACdo5B,GAAYp5B,MACdq5B,GAAUr5B,MACRs5B,GAAYt5B,MCzBzB0O,GAAS,SAAShlB,GAC7BA,EAAKqvC,YAAY,EAAG,EAAG,EAAG,MACzB,SAASrvC,EAAM5D,GAChB4D,EAAKkvC,WAAWlvC,EAAKmvC,aAAe/yC,MACnC,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GPLS,SOMtB,SAAS6B,GACV,OAAOA,EAAKmvC,aAAe,MAGdU,MCXXC,IDYiBD,GAAOv5B,MCZd0O,GAAS,SAAShlB,GAC9BA,EAAK+vC,YAAY,EAAG,GACpB/vC,EAAKqvC,YAAY,EAAG,EAAG,EAAG,MACzB,SAASrvC,EAAM5D,GAChB4D,EAAKgwC,eAAehwC,EAAKiwC,iBAAmB7zC,MAC3C,SAAS+B,EAAOC,GACjB,OAAOA,EAAI6xC,iBAAmB9xC,EAAM8xC,oBACnC,SAASjwC,GACV,OAAOA,EAAKiwC,qBAIdH,GAAQ5kB,MAAQ,SAASrrB,GACvB,OAAQ6X,SAAS7X,EAAIvD,KAAKG,MAAMoD,KAASA,EAAI,EAAYmlB,GAAS,SAAShlB,GACzEA,EAAKgwC,eAAe1zC,KAAKG,MAAMuD,EAAKiwC,iBAAmBpwC,GAAKA,GAC5DG,EAAK+vC,YAAY,EAAG,GACpB/vC,EAAKqvC,YAAY,EAAG,EAAG,EAAG,MACzB,SAASrvC,EAAM5D,GAChB4D,EAAKgwC,eAAehwC,EAAKiwC,iBAAmB7zC,EAAOyD,MALH,MASrCiwC,UACOA,GAAQx5B,MCZ9B,SAAS45B,GAAU5yC,GACjB,GAAI,GAAKA,EAAEG,GAAKH,EAAEG,EAAI,IAAK,CACzB,IAAIuC,EAAO,IAAIL,MAAM,EAAGrC,EAAEwI,EAAGxI,EAAEA,EAAGA,EAAE6yC,EAAG7yC,EAAE8yC,EAAG9yC,EAAE+yC,EAAG/yC,EAAEi1B,GAEnD,OADAvyB,EAAKutC,YAAYjwC,EAAEG,GACZuC,EAET,OAAO,IAAIL,KAAKrC,EAAEG,EAAGH,EAAEwI,EAAGxI,EAAEA,EAAGA,EAAE6yC,EAAG7yC,EAAE8yC,EAAG9yC,EAAE+yC,EAAG/yC,EAAEi1B,GAGlD,SAAS+d,GAAQhzC,GACf,GAAI,GAAKA,EAAEG,GAAKH,EAAEG,EAAI,IAAK,CACzB,IAAIuC,EAAO,IAAIL,KAAKA,KAAK4wC,KAAK,EAAGjzC,EAAEwI,EAAGxI,EAAEA,EAAGA,EAAE6yC,EAAG7yC,EAAE8yC,EAAG9yC,EAAE+yC,EAAG/yC,EAAEi1B,IAE5D,OADAvyB,EAAKgwC,eAAe1yC,EAAEG,GACfuC,EAET,OAAO,IAAIL,KAAKA,KAAK4wC,IAAIjzC,EAAEG,EAAGH,EAAEwI,EAAGxI,EAAEA,EAAGA,EAAE6yC,EAAG7yC,EAAE8yC,EAAG9yC,EAAE+yC,EAAG/yC,EAAEi1B,IAG3D,SAASie,GAAQ/yC,EAAGqI,EAAGxI,GACrB,MAAO,CAACG,EAAGA,EAAGqI,EAAGA,EAAGxI,EAAGA,EAAG6yC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAG9d,EAAG,GAmWjD,ICjYI7wB,GDiYA+uC,GAAO,CAAC,IAAK,GAAI,EAAK,IAAK,EAAK,KAChCC,GAAW,UACXC,GAAY,KACZC,GAAY,sBAEhB,SAASC,GAAIx0C,EAAOwE,EAAMK,GACxB,IAAIH,EAAO1E,EAAQ,EAAI,IAAM,GACzB0D,GAAUgB,GAAQ1E,EAAQA,GAAS,GACnCyC,EAASiB,EAAOjB,OACpB,OAAOiC,GAAQjC,EAASoC,EAAQ,IAAInC,MAAMmC,EAAQpC,EAAS,GAAGwf,KAAKzd,GAAQd,EAASA,GAGtF,SAAS+wC,GAAQ19B,GACf,OAAOA,EAAEwvB,QAAQgO,GAAW,QAG9B,SAASG,GAAShzB,GAChB,OAAO,IAAIzV,OAAO,OAASyV,EAAMhF,IAAI+3B,IAASxyB,KAAK,KAAO,IAAK,KAGjE,SAAS0yB,GAAajzB,GAEpB,IADA,IAAIhF,EAAM,GAAIna,GAAK,EAAGC,EAAIkf,EAAMjf,SACvBF,EAAIC,GAAGka,EAAIgF,EAAMnf,GAAG0T,eAAiB1T,EAC9C,OAAOma,EAGT,SAASk4B,GAAyB3zC,EAAGyC,EAAQnB,GAC3C,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEqxB,GAAK9vB,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASoyC,GAAyB5zC,EAAGyC,EAAQnB,GAC3C,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEmvC,GAAK5tC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASqyC,GAAsB7zC,EAAGyC,EAAQnB,GACxC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAE+0B,GAAKxzB,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASsyC,GAAmB9zC,EAAGyC,EAAQnB,GACrC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAE+zC,GAAKxyC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASwyC,GAAsBh0C,EAAGyC,EAAQnB,GACxC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEi0C,GAAK1yC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAAS0yC,GAAcl0C,EAAGyC,EAAQnB,GAChC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEG,GAAKoB,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAAS2yC,GAAUn0C,EAAGyC,EAAQnB,GAC5B,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEG,GAAKoB,EAAE,KAAOA,EAAE,GAAK,GAAK,KAAO,KAAOD,EAAIC,EAAE,GAAGC,SAAW,EAG5E,SAAS4yC,GAAUp0C,EAAGyC,EAAQnB,GAC5B,IAAIC,EAAI,+BAA+B6B,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAChE,OAAOC,GAAKvB,EAAEq0C,EAAI9yC,EAAE,GAAK,IAAMA,EAAE,IAAMA,EAAE,IAAM,OAAQD,EAAIC,EAAE,GAAGC,SAAW,EAG7E,SAAS8yC,GAAat0C,EAAGyC,EAAQnB,GAC/B,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEmrB,EAAW,EAAP5pB,EAAE,GAAS,EAAGD,EAAIC,EAAE,GAAGC,SAAW,EAGtD,SAAS+yC,GAAiBv0C,EAAGyC,EAAQnB,GACnC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEwI,EAAIjH,EAAE,GAAK,EAAGD,EAAIC,EAAE,GAAGC,SAAW,EAGlD,SAASgzC,GAAgBx0C,EAAGyC,EAAQnB,GAClC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEA,GAAKuB,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASizC,GAAez0C,EAAGyC,EAAQnB,GACjC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEwI,EAAI,EAAGxI,EAAEA,GAAKuB,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAGxD,SAASkzC,GAAY10C,EAAGyC,EAAQnB,GAC9B,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAE6yC,GAAKtxC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASmzC,GAAa30C,EAAGyC,EAAQnB,GAC/B,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAE8yC,GAAKvxC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASozC,GAAa50C,EAAGyC,EAAQnB,GAC/B,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAE+yC,GAAKxxC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASqzC,GAAkB70C,EAAGyC,EAAQnB,GACpC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEi1B,GAAK1zB,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAASszC,GAAkB90C,EAAGyC,EAAQnB,GACpC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC1C,OAAOC,GAAKvB,EAAEi1B,EAAIj2B,KAAKG,MAAMoC,EAAE,GAAK,KAAOD,EAAIC,EAAE,GAAGC,SAAW,EAGjE,SAASuzC,GAAoB/0C,EAAGyC,EAAQnB,GACtC,IAAIC,EAAI8xC,GAAUjwC,KAAKX,EAAOb,MAAMN,EAAGA,EAAI,IAC3C,OAAOC,EAAID,EAAIC,EAAE,GAAGC,QAAU,EAGhC,SAASwzC,GAAmBh1C,EAAGyC,EAAQnB,GACrC,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,IACnC,OAAOC,GAAKvB,EAAEi1C,GAAK1zC,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAAS0zC,GAA0Bl1C,EAAGyC,EAAQnB,GAC5C,IAAIC,EAAI6xC,GAAShwC,KAAKX,EAAOb,MAAMN,IACnC,OAAOC,GAAKvB,EAAE8V,GAAKvU,EAAE,GAAID,EAAIC,EAAE,GAAGC,SAAW,EAG/C,SAAS2zC,GAAiBn1C,EAAGuF,GAC3B,OAAOguC,GAAIvzC,EAAEuwC,UAAWhrC,EAAG,GAG7B,SAAS6vC,GAAap1C,EAAGuF,GACvB,OAAOguC,GAAIvzC,EAAEsxC,WAAY/rC,EAAG,GAG9B,SAAS8vC,GAAar1C,EAAGuF,GACvB,OAAOguC,GAAIvzC,EAAEsxC,WAAa,IAAM,GAAI/rC,EAAG,GAGzC,SAAS+vC,GAAgBt1C,EAAGuF,GAC1B,OAAOguC,GAAI,EAAIgC,EAAQnM,MAAMoM,EAASx1C,GAAIA,GAAIuF,EAAG,GAGnD,SAASkwC,GAAmBz1C,EAAGuF,GAC7B,OAAOguC,GAAIvzC,EAAEmxC,kBAAmB5rC,EAAG,GAGrC,SAASmwC,GAAmB11C,EAAGuF,GAC7B,OAAOkwC,GAAmBz1C,EAAGuF,GAAK,MAGpC,SAASowC,GAAkB31C,EAAGuF,GAC5B,OAAOguC,GAAIvzC,EAAEqwC,WAAa,EAAG9qC,EAAG,GAGlC,SAASqwC,GAAc51C,EAAGuF,GACxB,OAAOguC,GAAIvzC,EAAEqxC,aAAc9rC,EAAG,GAGhC,SAASswC,GAAc71C,EAAGuF,GACxB,OAAOguC,GAAIvzC,EAAEoxC,aAAc7rC,EAAG,GAGhC,SAASuwC,GAA0B91C,GACjC,IAAIixC,EAAMjxC,EAAEwwC,SACZ,OAAe,IAARS,EAAY,EAAIA,EAGzB,SAAS8E,GAAuB/1C,EAAGuF,GACjC,OAAOguC,GAAIyC,EAAW5M,MAAMoM,EAASx1C,GAAK,EAAGA,GAAIuF,EAAG,GAGtD,SAAS0wC,GAAKj2C,GACZ,IAAIixC,EAAMjxC,EAAEwwC,SACZ,OAAQS,GAAO,GAAa,IAARA,EAAaiF,EAAal2C,GAAKk2C,EAAa7+B,KAAKrX,GAGvE,SAASm2C,GAAoBn2C,EAAGuF,GAE9B,OADAvF,EAAIi2C,GAAKj2C,GACFuzC,GAAI2C,EAAa9M,MAAMoM,EAASx1C,GAAIA,IAA+B,IAAzBw1C,EAASx1C,GAAGwwC,UAAiBjrC,EAAG,GAGnF,SAAS6wC,GAA0Bp2C,GACjC,OAAOA,EAAEwwC,SAGX,SAAS6F,GAAuBr2C,EAAGuF,GACjC,OAAOguC,GAAI+C,EAAWlN,MAAMoM,EAASx1C,GAAK,EAAGA,GAAIuF,EAAG,GAGtD,SAASgxC,GAAWv2C,EAAGuF,GACrB,OAAOguC,GAAIvzC,EAAEkwC,cAAgB,IAAK3qC,EAAG,GAGvC,SAASixC,GAAcx2C,EAAGuF,GAExB,OAAOguC,IADPvzC,EAAIi2C,GAAKj2C,IACIkwC,cAAgB,IAAK3qC,EAAG,GAGvC,SAASkxC,GAAez2C,EAAGuF,GACzB,OAAOguC,GAAIvzC,EAAEkwC,cAAgB,IAAO3qC,EAAG,GAGzC,SAASmxC,GAAkB12C,EAAGuF,GAC5B,IAAI0rC,EAAMjxC,EAAEwwC,SAEZ,OAAO+C,IADPvzC,EAAKixC,GAAO,GAAa,IAARA,EAAaiF,EAAal2C,GAAKk2C,EAAa7+B,KAAKrX,IACrDkwC,cAAgB,IAAO3qC,EAAG,GAGzC,SAASoxC,GAAW32C,GAClB,IAAImF,EAAInF,EAAEywC,oBACV,OAAQtrC,EAAI,EAAI,KAAOA,IAAM,EAAG,MAC1BouC,GAAIpuC,EAAI,GAAK,EAAG,IAAK,GACrBouC,GAAIpuC,EAAI,GAAI,IAAK,GAGzB,SAASyxC,GAAoB52C,EAAGuF,GAC9B,OAAOguC,GAAIvzC,EAAE6xC,aAActsC,EAAG,GAGhC,SAASsxC,GAAgB72C,EAAGuF,GAC1B,OAAOguC,GAAIvzC,EAAE82C,cAAevxC,EAAG,GAGjC,SAASwxC,GAAgB/2C,EAAGuF,GAC1B,OAAOguC,GAAIvzC,EAAE82C,cAAgB,IAAM,GAAIvxC,EAAG,GAG5C,SAASyxC,GAAmBh3C,EAAGuF,GAC7B,OAAOguC,GAAI,EAAIhB,GAAOnJ,MAAMoJ,GAAQxyC,GAAIA,GAAIuF,EAAG,GAGjD,SAAS0xC,GAAsBj3C,EAAGuF,GAChC,OAAOguC,GAAIvzC,EAAEk3C,qBAAsB3xC,EAAG,GAGxC,SAAS4xC,GAAsBn3C,EAAGuF,GAChC,OAAO0xC,GAAsBj3C,EAAGuF,GAAK,MAGvC,SAAS6xC,GAAqBp3C,EAAGuF,GAC/B,OAAOguC,GAAIvzC,EAAEq3C,cAAgB,EAAG9xC,EAAG,GAGrC,SAAS+xC,GAAiBt3C,EAAGuF,GAC3B,OAAOguC,GAAIvzC,EAAEu3C,gBAAiBhyC,EAAG,GAGnC,SAASiyC,GAAiBx3C,EAAGuF,GAC3B,OAAOguC,GAAIvzC,EAAEyxC,gBAAiBlsC,EAAG,GAGnC,SAASkyC,GAA6Bz3C,GACpC,IAAI03C,EAAM13C,EAAE8xC,YACZ,OAAe,IAAR4F,EAAY,EAAIA,EAGzB,SAASC,GAA0B33C,EAAGuF,GACpC,OAAOguC,GAAIvB,EAAU5I,MAAMoJ,GAAQxyC,GAAK,EAAGA,GAAIuF,EAAG,GAGpD,SAASqyC,GAAQ53C,GACf,IAAIixC,EAAMjxC,EAAE8xC,YACZ,OAAQb,GAAO,GAAa,IAARA,EAAamB,GAAYpyC,GAAKoyC,GAAY/6B,KAAKrX,GAGrE,SAAS63C,GAAuB73C,EAAGuF,GAEjC,OADAvF,EAAI43C,GAAQ53C,GACLuzC,GAAInB,GAAYhJ,MAAMoJ,GAAQxyC,GAAIA,IAAiC,IAA3BwyC,GAAQxyC,GAAG8xC,aAAoBvsC,EAAG,GAGnF,SAASuyC,GAA6B93C,GACpC,OAAOA,EAAE8xC,YAGX,SAASiG,GAA0B/3C,EAAGuF,GACpC,OAAOguC,GAAItB,GAAU7I,MAAMoJ,GAAQxyC,GAAK,EAAGA,GAAIuF,EAAG,GAGpD,SAASyyC,GAAch4C,EAAGuF,GACxB,OAAOguC,GAAIvzC,EAAE2yC,iBAAmB,IAAKptC,EAAG,GAG1C,SAAS0yC,GAAiBj4C,EAAGuF,GAE3B,OAAOguC,IADPvzC,EAAI43C,GAAQ53C,IACC2yC,iBAAmB,IAAKptC,EAAG,GAG1C,SAAS2yC,GAAkBl4C,EAAGuF,GAC5B,OAAOguC,GAAIvzC,EAAE2yC,iBAAmB,IAAOptC,EAAG,GAG5C,SAAS4yC,GAAqBn4C,EAAGuF,GAC/B,IAAI0rC,EAAMjxC,EAAE8xC,YAEZ,OAAOyB,IADPvzC,EAAKixC,GAAO,GAAa,IAARA,EAAamB,GAAYpyC,GAAKoyC,GAAY/6B,KAAKrX,IACnD2yC,iBAAmB,IAAOptC,EAAG,GAG5C,SAAS6yC,KACP,MAAO,QAGT,SAASC,KACP,MAAO,IAGT,SAASC,GAAoBt4C,GAC3B,OAAQA,EAGV,SAASu4C,GAA2Bv4C,GAClC,OAAOhB,KAAKG,OAAOa,EAAI,KCrqBvBoE,GDea,SAAsBA,GACnC,IAAIo0C,EAAkBp0C,EAAOq0C,SACzBC,EAAct0C,EAAO1B,KACrBi2C,EAAcv0C,EAAOukB,KACrBiwB,EAAiBx0C,EAAOy0C,QACxBC,EAAkB10C,EAAO20C,KACzBC,EAAuB50C,EAAO60C,UAC9BC,EAAgB90C,EAAO+0C,OACvBC,EAAqBh1C,EAAOi1C,YAE5BC,EAAW7F,GAASmF,GACpBW,EAAe7F,GAAakF,GAC5BY,EAAY/F,GAASqF,GACrBW,EAAgB/F,GAAaoF,GAC7BY,EAAiBjG,GAASuF,GAC1BW,EAAqBjG,GAAasF,GAClCY,EAAUnG,GAASyF,GACnBW,EAAcnG,GAAawF,GAC3BY,EAAerG,GAAS2F,GACxBW,EAAmBrG,GAAa0F,GAEhCY,EAAU,CACZ,EAkQF,SAA4Bh6C,GAC1B,OAAOg5C,EAAqBh5C,EAAEwwC,WAlQ9B,EAqQF,SAAuBxwC,GACrB,OAAO84C,EAAgB94C,EAAEwwC,WArQzB,EAwQF,SAA0BxwC,GACxB,OAAOo5C,EAAmBp5C,EAAEqwC,aAxQ5B,EA2QF,SAAqBrwC,GACnB,OAAOk5C,EAAcl5C,EAAEqwC,aA3QvB,EAAK,KACL,EAAK8E,GACL,EAAKA,GACL,EAAKO,GACL,EAAKc,GACL,EAAKE,GACL,EAAKtB,GACL,EAAKC,GACL,EAAKC,GACL,EAAKG,GACL,EAAKE,GACL,EAAKC,GACL,EAkQF,SAAsB51C,GACpB,OAAO44C,IAAiB54C,EAAEsxC,YAAc,MAlQxC,EAqQF,SAAuBtxC,GACrB,OAAO,KAAOA,EAAEqwC,WAAa,IArQ7B,EAAKiI,GACL,EAAKC,GACL,EAAK1C,GACL,EAAKC,GACL,EAAKC,GACL,EAAKI,GACL,EAAKC,GACL,EAAKC,GACL,EAAK,KACL,EAAK,KACL,EAAKE,GACL,EAAKE,GACL,EAAKE,GACL,IAAK0B,IAGH4B,EAAa,CACf,EAuPF,SAA+Bj6C,GAC7B,OAAOg5C,EAAqBh5C,EAAE8xC,cAvP9B,EA0PF,SAA0B9xC,GACxB,OAAO84C,EAAgB94C,EAAE8xC,cA1PzB,EA6PF,SAA6B9xC,GAC3B,OAAOo5C,EAAmBp5C,EAAEq3C,gBA7P5B,EAgQF,SAAwBr3C,GACtB,OAAOk5C,EAAcl5C,EAAEq3C,gBAhQvB,EAAK,KACL,EAAKT,GACL,EAAKA,GACL,EAAKO,GACL,EAAKc,GACL,EAAKE,GACL,EAAKtB,GACL,EAAKE,GACL,EAAKC,GACL,EAAKC,GACL,EAAKG,GACL,EAAKE,GACL,EAuPF,SAAyBt3C,GACvB,OAAO44C,IAAiB54C,EAAE82C,eAAiB,MAvP3C,EA0PF,SAA0B92C,GACxB,OAAO,KAAOA,EAAEq3C,cAAgB,IA1PhC,EAAKiB,GACL,EAAKC,GACL,EAAKf,GACL,EAAKC,GACL,EAAKE,GACL,EAAKE,GACL,EAAKC,GACL,EAAKC,GACL,EAAK,KACL,EAAK,KACL,EAAKC,GACL,EAAKE,GACL,EAAKE,GACL,IAAKC,IAGH6B,EAAS,CACX,EA4JF,SAA2Bl6C,EAAGyC,EAAQnB,GACpC,IAAIC,EAAIm4C,EAAet2C,KAAKX,EAAOb,MAAMN,IACzC,OAAOC,GAAKvB,EAAEqxB,EAAIsoB,EAAmBp4C,EAAE,GAAGyT,eAAgB1T,EAAIC,EAAE,GAAGC,SAAW,GA7J9E,EAgKF,SAAsBxB,EAAGyC,EAAQnB,GAC/B,IAAIC,EAAIi4C,EAAUp2C,KAAKX,EAAOb,MAAMN,IACpC,OAAOC,GAAKvB,EAAEqxB,EAAIooB,EAAcl4C,EAAE,GAAGyT,eAAgB1T,EAAIC,EAAE,GAAGC,SAAW,GAjKzE,EAoKF,SAAyBxB,EAAGyC,EAAQnB,GAClC,IAAIC,EAAIu4C,EAAa12C,KAAKX,EAAOb,MAAMN,IACvC,OAAOC,GAAKvB,EAAEwI,EAAIuxC,EAAiBx4C,EAAE,GAAGyT,eAAgB1T,EAAIC,EAAE,GAAGC,SAAW,GArK5E,EAwKF,SAAoBxB,EAAGyC,EAAQnB,GAC7B,IAAIC,EAAIq4C,EAAQx2C,KAAKX,EAAOb,MAAMN,IAClC,OAAOC,GAAKvB,EAAEwI,EAAIqxC,EAAYt4C,EAAE,GAAGyT,eAAgB1T,EAAIC,EAAE,GAAGC,SAAW,GAzKvE,EA4KF,SAA6BxB,EAAGyC,EAAQnB,GACtC,OAAO64C,EAAen6C,EAAGw4C,EAAiB/1C,EAAQnB,IA5KlD,EAAKkzC,GACL,EAAKA,GACL,EAAKM,GACL,EAAKX,GACL,EAAKD,GACL,EAAKQ,GACL,EAAKA,GACL,EAAKD,GACL,EAAKI,GACL,EAAKN,GACL,EAAKI,GACL,EAuIF,SAAqB30C,EAAGyC,EAAQnB,GAC9B,IAAIC,EAAI+3C,EAASl2C,KAAKX,EAAOb,MAAMN,IACnC,OAAOC,GAAKvB,EAAEuF,EAAIg0C,EAAah4C,EAAE,GAAGyT,eAAgB1T,EAAIC,EAAE,GAAGC,SAAW,GAxIxE,EAAK8yC,GACL,EAAKU,GACL,EAAKE,GACL,EAAKN,GACL,EAAKhB,GACL,EAAKC,GACL,EAAKC,GACL,EAAKH,GACL,EAAKK,GACL,EA0JF,SAAyBh0C,EAAGyC,EAAQnB,GAClC,OAAO64C,EAAen6C,EAAG04C,EAAaj2C,EAAQnB,IA1J9C,EA6JF,SAAyBtB,EAAGyC,EAAQnB,GAClC,OAAO64C,EAAen6C,EAAG24C,EAAal2C,EAAQnB,IA7J9C,EAAK6yC,GACL,EAAKD,GACL,EAAKE,GACL,IAAKW,IAWP,SAASzO,EAAUpjC,EAAW82C,GAC5B,OAAO,SAASt3C,GACd,IAIIf,EACA4xC,EACAlvC,EANA5B,EAAS,GACTnB,GAAK,EACLgI,EAAI,EACJ/H,EAAI2B,EAAU1B,OAOlB,IAFMkB,aAAgBL,OAAOK,EAAO,IAAIL,MAAMK,MAErCpB,EAAIC,GACqB,KAA5B2B,EAAU8jC,WAAW1lC,KACvBmB,EAAO6D,KAAKpD,EAAUtB,MAAM0H,EAAGhI,IACgB,OAA1CiyC,EAAMJ,GAAKxxC,EAAIuB,EAAUk3C,SAAS94C,KAAcK,EAAIuB,EAAUk3C,SAAS94C,GACvEiyC,EAAY,MAAN5xC,EAAY,IAAM,KACzB0C,EAAS21C,EAAQr4C,MAAIA,EAAI0C,EAAO3B,EAAM6wC,IAC1C9wC,EAAO6D,KAAK3E,GACZ2H,EAAIhI,EAAI,GAKZ,OADAmB,EAAO6D,KAAKpD,EAAUtB,MAAM0H,EAAGhI,IACxBmB,EAAOue,KAAK,KAIvB,SAASq5B,EAASn3C,EAAWmxC,GAC3B,OAAO,SAAS5xC,GACd,IAEI63C,EAAMrJ,EAFNjxC,EAAIkzC,GAAQ,UAAMhvC,EAAW,GAGjC,GAFQi2C,EAAen6C,EAAGkD,EAAWT,GAAU,GAAI,IAE1CA,EAAOjB,OAAQ,OAAO,KAG/B,GAAI,MAAOxB,EAAG,OAAO,IAAIqC,KAAKrC,EAAEi1C,GAChC,GAAI,MAAOj1C,EAAG,OAAO,IAAIqC,KAAW,IAANrC,EAAE8V,GAAY,MAAO9V,EAAIA,EAAEi1B,EAAI,IAY7D,GATIof,KAAO,MAAOr0C,KAAIA,EAAEq0C,EAAI,GAGxB,MAAOr0C,IAAGA,EAAE6yC,EAAI7yC,EAAE6yC,EAAI,GAAW,GAAN7yC,EAAEuF,QAGrBrB,IAARlE,EAAEwI,IAAiBxI,EAAEwI,EAAI,MAAOxI,EAAIA,EAAEmrB,EAAI,GAG1C,MAAOnrB,EAAG,CACZ,GAAIA,EAAE+zC,EAAI,GAAK/zC,EAAE+zC,EAAI,GAAI,OAAO,KAC1B,MAAO/zC,IAAIA,EAAEqxB,EAAI,GACnB,MAAOrxB,GAC2BixC,GAApCqJ,EAAOtH,GAAQE,GAAQlzC,EAAEG,EAAG,EAAG,KAAgB2xC,YAC/CwI,EAAOrJ,EAAM,GAAa,IAARA,EAAYgB,GAAU56B,KAAKijC,GAAQrI,GAAUqI,GAC/DA,EAAO/H,GAAO16B,OAAOyiC,EAAkB,GAAXt6C,EAAE+zC,EAAI,IAClC/zC,EAAEG,EAAIm6C,EAAK3H,iBACX3yC,EAAEwI,EAAI8xC,EAAKjD,cACXr3C,EAAEA,EAAIs6C,EAAKzI,cAAgB7xC,EAAEqxB,EAAI,GAAK,IAEA4f,GAAtCqJ,EAAO1H,GAAUM,GAAQlzC,EAAEG,EAAG,EAAG,KAAgBqwC,SACjD8J,EAAOrJ,EAAM,GAAa,IAARA,EAAYqF,EAAWj/B,KAAKijC,GAAQhE,EAAWgE,GACjEA,EAAO/E,EAAQ19B,OAAOyiC,EAAkB,GAAXt6C,EAAE+zC,EAAI,IACnC/zC,EAAEG,EAAIm6C,EAAKpK,cACXlwC,EAAEwI,EAAI8xC,EAAKjK,WACXrwC,EAAEA,EAAIs6C,EAAK/J,WAAavwC,EAAEqxB,EAAI,GAAK,QAE5B,MAAOrxB,GAAK,MAAOA,KACtB,MAAOA,IAAIA,EAAEqxB,EAAI,MAAOrxB,EAAIA,EAAEmvC,EAAI,EAAI,MAAOnvC,EAAI,EAAI,GAC3DixC,EAAM,MAAOjxC,EAAIgzC,GAAQE,GAAQlzC,EAAEG,EAAG,EAAG,IAAI2xC,YAAcc,GAAUM,GAAQlzC,EAAEG,EAAG,EAAG,IAAIqwC,SACzFxwC,EAAEwI,EAAI,EACNxI,EAAEA,EAAI,MAAOA,GAAKA,EAAEqxB,EAAI,GAAK,EAAU,EAANrxB,EAAEi0C,GAAShD,EAAM,GAAK,EAAIjxC,EAAEqxB,EAAU,EAANrxB,EAAE+0B,GAASkc,EAAM,GAAK,GAKzF,MAAI,MAAOjxC,GACTA,EAAE6yC,GAAK7yC,EAAEq0C,EAAI,IAAM,EACnBr0C,EAAE8yC,GAAK9yC,EAAEq0C,EAAI,IACNrB,GAAQhzC,IAIV4yC,GAAU5yC,IAIrB,SAASm6C,EAAen6C,EAAGkD,EAAWT,EAAQ6G,GAO5C,IANA,IAGI3H,EACAopB,EAJAzpB,EAAI,EACJC,EAAI2B,EAAU1B,OACdgH,EAAI/F,EAAOjB,OAIRF,EAAIC,GAAG,CACZ,GAAI+H,GAAKd,EAAG,OAAQ,EAEpB,GAAU,MADV7G,EAAIuB,EAAU8jC,WAAW1lC,OAIvB,GAFAK,EAAIuB,EAAUk3C,OAAO94C,OACrBypB,EAAQmvB,EAAOv4C,KAAKwxC,GAAOjwC,EAAUk3C,OAAO94C,KAAOK,MACnC2H,EAAIyhB,EAAM/qB,EAAGyC,EAAQ6G,IAAM,EAAI,OAAQ,OAClD,GAAI3H,GAAKc,EAAOukC,WAAW19B,KAChC,OAAQ,EAIZ,OAAOA,EAwFT,OAzMA0wC,EAAQl4C,EAAIwkC,EAAUoS,EAAasB,GACnCA,EAAQO,EAAIjU,EAAUqS,EAAaqB,GACnCA,EAAQr4C,EAAI2kC,EAAUkS,EAAiBwB,GACvCC,EAAWn4C,EAAIwkC,EAAUoS,EAAauB,GACtCA,EAAWM,EAAIjU,EAAUqS,EAAasB,GACtCA,EAAWt4C,EAAI2kC,EAAUkS,EAAiByB,GAoMnC,CACL51C,OAAQ,SAASnB,GACf,IAAIilB,EAAIme,EAAUpjC,GAAa,GAAI82C,GAEnC,OADA7xB,EAAErlB,SAAW,WAAa,OAAOI,GAC1BilB,GAET4C,MAAO,SAAS7nB,GACd,IAAIqC,EAAI80C,EAASn3C,GAAa,IAAI,GAElC,OADAqC,EAAEzC,SAAW,WAAa,OAAOI,GAC1BqC,GAETi1C,UAAW,SAASt3C,GAClB,IAAIilB,EAAIme,EAAUpjC,GAAa,GAAI+2C,GAEnC,OADA9xB,EAAErlB,SAAW,WAAa,OAAOI,GAC1BilB,GAETsyB,SAAU,SAASv3C,GACjB,IAAIqC,EAAI80C,EAASn3C,GAAa,IAAI,GAElC,OADAqC,EAAEzC,SAAW,WAAa,OAAOI,GAC1BqC,IC1WFV,CAZG,CACZ4zC,SAAU,SACV/1C,KAAM,aACNimB,KAAM,eACNkwB,QAAS,CAAC,KAAM,MAChBE,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEE,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtDE,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHE,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SAK9Ej1C,GAAOC,OACRD,GAAO2mB,MACP3mB,GAAOo2C,UACRp2C,GAAOq2C,SC4GL,IClIXC,GAAWhzB,GAAS,SAAShlB,GAC/BA,EAAKkvC,WAAW,GAChBlvC,EAAKqvC,YAAY,EAAG,EAAG,EAAG,MACzB,SAASrvC,EAAM5D,GAChB4D,EAAK+vC,YAAY/vC,EAAK20C,cAAgBv4C,MACrC,SAAS+B,EAAOC,GACjB,OAAOA,EAAIu2C,cAAgBx2C,EAAMw2C,cAAkE,IAAjDv2C,EAAI6xC,iBAAmB9xC,EAAM8xC,qBAC9E,SAASjwC,GACV,OAAOA,EAAK20C,iBCPVsD,IDWmBD,GAAS1hC,MCXlB0O,GAAS,SAAShlB,GAC9BA,EAAKk4C,cAAc,EAAG,EAAG,MACxB,SAASl4C,EAAM5D,GAChB4D,EAAKJ,SAASI,EbJU,KaIH5D,MACpB,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GbNU,QaOvB,SAAS6B,GACV,OAAOA,EAAKo0C,kBCPV+D,IDWkBF,GAAQ3hC,MCXd0O,GAAS,SAAShlB,GAChCA,EAAKo4C,cAAc,EAAG,MACrB,SAASp4C,EAAM5D,GAChB4D,EAAKJ,SAASI,EdLY,IcKL5D,MACpB,SAAS+B,EAAOC,GACjB,OAAQA,EAAMD,GdPY,OcQzB,SAAS6B,GACV,OAAOA,EAAK60C,oBAIUsD,GAAU7hC","file":"1.7dca6946eb.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","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 {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 {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","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","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(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 default function(x) {\n  return x;\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 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 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","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() {\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","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\n}\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 {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 clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n      alpha = 0, ca, sa, // angle\n      x0 = null, y0, x1, y1, // clip extent\n      kx = 1, ky = 1,\n      transform = transformer({\n        point: function(x, y) {\n          var p = projection([x, y])\n          this.stream.point(p[0], p[1]);\n        }\n      }),\n      postclip = identity,\n      cache,\n      cacheStream;\n\n  function reset() {\n    kx = k * sx;\n    ky = k * sy;\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  function projection (p) {\n    var x = p[0] * kx, y = p[1] * ky;\n    if (alpha) {\n      var t = y * ca - x * sa;\n      x = x * ca + y * sa;\n      y = t;\n    }    \n    return [x + tx, y + ty];\n  }\n  projection.invert = function(p) {\n    var x = p[0] - tx, y = p[1] - ty;\n    if (alpha) {\n      var t = y * ca + x * sa;\n      x = x * ca - y * sa;\n      y = t;\n    }\n    return [x / kx, y / ky];\n  };\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n  };\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\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  projection.scale = function(_) {\n    return arguments.length ? (k = +_, reset()) : k;\n  };\n  projection.translate = function(_) {\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n  }\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n  };\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n  };\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n  };\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  return projection;\n}\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 function(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n}\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","export default function noop() {}\n","export {default as geoArea} from \"./area.js\";\nexport {default as geoBounds} from \"./bounds.js\";\nexport {default as geoCentroid} from \"./centroid.js\";\nexport {default as geoCircle} from \"./circle.js\";\nexport {default as geoClipAntimeridian} from \"./clip/antimeridian.js\";\nexport {default as geoClipCircle} from \"./clip/circle.js\";\nexport {default as geoClipExtent} from \"./clip/extent.js\"; // DEPRECATED! Use d3.geoIdentity().clipExtent(…).\nexport {default as geoClipRectangle} from \"./clip/rectangle.js\";\nexport {default as geoContains} from \"./contains.js\";\nexport {default as geoDistance} from \"./distance.js\";\nexport {default as geoGraticule, graticule10 as geoGraticule10} from \"./graticule.js\";\nexport {default as geoInterpolate} from \"./interpolate.js\";\nexport {default as geoLength} from \"./length.js\";\nexport {default as geoPath} from \"./path/index.js\";\nexport {default as geoAlbers} from \"./projection/albers.js\";\nexport {default as geoAlbersUsa} from \"./projection/albersUsa.js\";\nexport {default as geoAzimuthalEqualArea, azimuthalEqualAreaRaw as geoAzimuthalEqualAreaRaw} from \"./projection/azimuthalEqualArea.js\";\nexport {default as geoAzimuthalEquidistant, azimuthalEquidistantRaw as geoAzimuthalEquidistantRaw} from \"./projection/azimuthalEquidistant.js\";\nexport {default as geoConicConformal, conicConformalRaw as geoConicConformalRaw} from \"./projection/conicConformal.js\";\nexport {default as geoConicEqualArea, conicEqualAreaRaw as geoConicEqualAreaRaw} from \"./projection/conicEqualArea.js\";\nexport {default as geoConicEquidistant, conicEquidistantRaw as geoConicEquidistantRaw} from \"./projection/conicEquidistant.js\";\nexport {default as geoEqualEarth, equalEarthRaw as geoEqualEarthRaw} from \"./projection/equalEarth.js\";\nexport {default as geoEquirectangular, equirectangularRaw as geoEquirectangularRaw} from \"./projection/equirectangular.js\";\nexport {default as geoGnomonic, gnomonicRaw as geoGnomonicRaw} from \"./projection/gnomonic.js\";\nexport {default as geoIdentity} from \"./projection/identity.js\";\nexport {default as geoProjection, projectionMutator as geoProjectionMutator} from \"./projection/index.js\";\nexport {default as geoMercator, mercatorRaw as geoMercatorRaw} from \"./projection/mercator.js\";\nexport {default as geoNaturalEarth1, naturalEarth1Raw as geoNaturalEarth1Raw} from \"./projection/naturalEarth1.js\";\nexport {default as geoOrthographic, orthographicRaw as geoOrthographicRaw} from \"./projection/orthographic.js\";\nexport {default as geoStereographic, stereographicRaw as geoStereographicRaw} from \"./projection/stereographic.js\";\nexport {default as geoTransverseMercator, transverseMercatorRaw as geoTransverseMercatorRaw} from \"./projection/transverseMercator.js\";\nexport {default as geoRotation} from \"./rotation.js\";\nexport {default as geoStream} from \"./stream.js\";\nexport {default as geoTransform} from \"./transform.js\";\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\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 {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(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","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","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","// 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","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 {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(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","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\";\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 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 {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","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\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 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 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","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","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 {\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","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","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":""}