@hpcc-js/graph 2.79.2 → 2.79.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es6.js +2 -2
- package/dist/index.es6.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +4 -4
- package/src/__package__.ts +2 -2
- package/types/__package__.d.ts +2 -2
- package/types-3.4/__package__.d.ts +2 -2
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/__package__.ts","../../../node_modules/tslib/tslib.es6.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/link/index.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/Edge.ts","../../../node_modules/dagre/lib/graphlib.js","../../../node_modules/dagre/lib/lodash.js","../../../node_modules/dagre/lib/data/list.js","../../../node_modules/dagre/lib/greedy-fas.js","../../../node_modules/dagre/lib/acyclic.js","../../../node_modules/dagre/lib/util.js","../../../node_modules/dagre/lib/normalize.js","../../../node_modules/dagre/lib/rank/util.js","../../../node_modules/dagre/lib/rank/feasible-tree.js","../../../node_modules/dagre/lib/rank/network-simplex.js","../../../node_modules/dagre/lib/rank/index.js","../../../node_modules/dagre/lib/parent-dummy-chains.js","../../../node_modules/dagre/lib/nesting-graph.js","../../../node_modules/dagre/lib/add-border-segments.js","../../../node_modules/dagre/lib/coordinate-system.js","../../../node_modules/dagre/lib/order/init-order.js","../../../node_modules/dagre/lib/order/cross-count.js","../../../node_modules/dagre/lib/order/barycenter.js","../../../node_modules/dagre/lib/order/resolve-conflicts.js","../../../node_modules/dagre/lib/order/sort.js","../../../node_modules/dagre/lib/order/sort-subgraph.js","../../../node_modules/dagre/lib/order/build-layer-graph.js","../../../node_modules/dagre/lib/order/add-subgraph-constraints.js","../../../node_modules/dagre/lib/order/index.js","../../../node_modules/dagre/lib/position/bk.js","../../../node_modules/dagre/lib/position/index.js","../../../node_modules/dagre/lib/layout.js","../../../node_modules/dagre/lib/debug.js","../../../node_modules/dagre/lib/version.js","../../../node_modules/dagre/index.js","../src/GraphData.ts","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/simulation.js","../../../node_modules/d3-force/src/manyBody.js","../src/GraphLayouts.ts","../src/Subgraph.ts","../src/Vertex.ts","../src/Graph.ts","../src/AdjacencyGraph.ts","../../../node_modules/d3-sankey/src/align.js","../../../node_modules/d3-sankey/src/constant.js","../../../node_modules/d3-sankey/src/sankey.js","../../../node_modules/d3-sankey/src/sankeyLinkHorizontal.js","../src/Sankey.ts","../src/graph2/layouts/layout.ts","../src/graph2/layouts/circle.ts","../src/graph2/layouts/dagre.ts","../src/graph2/layouts/dagreWorker.ts","../src/graph2/layouts/forceDirected.ts","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../src/graph2/layouts/graphvizWorker.ts","../src/graph2/layouts/graphviz.ts","../src/graph2/layouts/null.ts","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../src/graph2/layouts/tree.ts","../src/graph2/graph.ts","../src/graph2/dataGraph.ts","../src/graph2/sankeyGraph.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__spreadArray","to","from","pack","ar","l","slice","concat","pi","Math","PI","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","path","constant$2","x","moveTo","y","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","Error","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","Linear","context","_context","d3CurveLinear","d3Line","pointX","pointY","defined","constant","curve","curveLinear","output","line","data","buffer","defined0","lineStart","lineEnd","point","areaStart","_line","areaEnd","NaN","_point","linkSource","source","linkTarget","curveHorizontal","linkHorizontal","link","argv","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","_x","_y","j","push","custom","bundle","_k","_x2","_y2","Cardinal","tension","d3CurveCardinal","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","pow","a","m","catmullRom","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","graphlib","Curve","Edge","_super","_this","_points","_weight","_strokeDasharray","_hidden","_textBox","TextBox","padding","graphID","_graphID","sourceVertex","_sourceVertex","targetVertex","_targetVertex","weight","points","transitionDuration","skipPushMarkers","_elementPath","update","_element","hidden","text","enter","domNode","element","append","tooltip","render","Platform","svgMarkerGlitch","transition","duration","on","_pushMarkers","_popMarkers","_calculateEdgePoints","svgPoints","selectAll","showControlPoints","attr","merge","exit","remove","pathElements","sourceMarker_exists","sourceMarker","targetMarker_exists","targetMarker","strokeColor_exists","strokeColor","strokeDasharray_exists","strokeDasharray","move","_findMidPoint","midIdx","floor","p0","p1","filter","contains","pos","unshift","intersection","_pos","showArc","midX","arcDepth","midY","SVGWidget","_class","publish","tags","optional","publishProxy","require","e","window","lodash","graphlib_1","cloneDeep","defaults","each","find","flatten","forEach","forIn","has","isUndefined","last","map","mapValues","max","min","minBy","now","pick","range","reduce","sortBy","uniqueId","values","zipObject","lodash_1","list","List","sentinel","_next","_prev","_sentinel","unlink","entry","filterOutLinks","k","v","dequeue","enqueue","strs","curr","JSON","stringify","join","require$$0","Graph","require$$1","require$$2","greedyFas","g","weightFn","nodeCount","state","fasGraph","maxIn","maxOut","nodes","setNode","in","out","edges","prevWeight","edge","edgeWeight","setEdge","node","buckets","zeroIdx","assignBucket","graph","buildState","DEFAULT_WEIGHT_FN","results","sources","sinks","removeNode","doGreedyFAS","outEdges","collectPredecessors","undefined","inEdges","uEntry","wEntry","greedyFAS","acyclic","run","fas","acyclicer","stack","visited","dfs","dfsFAS","label","removeEdge","forwardName","name","reversed","undo","util","addDummyNode","simplify","simplified","setGraph","simpleLabel","minlen","asNonCompoundGraph","multigraph","isMultigraph","children","successorWeights","weightMap","sucs","predecessorWeights","preds","intersectRect","sx","sy","width","height","buildLayerMatrix","layering","maxRank","rank","order","normalizeRanks","removeEmptyRanks","offset","layers","delta","nodeRankFactor","vs","addBorderNode","prefix","partition","collection","fn","result","lhs","rhs","value","time","start","console","log","notime","attrs","hasNode","dummy","normalize","dummyChains","vRank","wRank","edgeLabel","labelRank","edgeObj","labelpos","normalizeEdge","origLabel","successors","longestPath","Number","POSITIVE_INFINITY","slack","feasibleTree_1","directed","size","tightTree","findMinSlackEdge","shiftRanks","nodeEdges","edgeV","feasibleTree","initRank","preorder","require$$3","alg","postorder","require$$4","networkSimplex_1","networkSimplex","initLowLimValues","initCutValues","leaveEdge","exchangeEdges","enterEdge","child","parent","cutvalue","calcCutValue","assignCutValue","childIsTail","graphEdge","cutValue","isOutEdge","other","pointsToHead","otherWeight","tree","u","hasEdge","isTreeEdge","otherCutValue","root","dfsAssignLowLim","nextLim","low","neighbors","lim","vLabel","wLabel","tailLabel","flip","candidates","isDescendant","f","flipped","updateRanks","rootLabel","rank_1","ranker","networkSimplexRanker","tightTreeRanker","longestPathRanker","parentDummyChains_1","postorderNums","pathData","lca","vPath","wPath","reverse","findPath","pathIdx","pathV","ascending","minRank","setParent","nestingGraph","depths","depth","treeDepths","nodeSep","nestingRoot","acc","sumWeights","cleanup","graphLabel","nestingEdge","top","bottom","borderTop","borderBottom","childNode","childTop","childBottom","thisWeight","addBorderSegments_1","borderLeft","borderRight","prop","sg","sgNode","borderType","prev","coordinateSystem","adjust","rankDir","rankdir","toLowerCase","swapWidthHeight","reverseYOne","reverseY","swapXYOne","swapXY","swapWidthHeightOne","initOrder_1","simpleNodes","orderedVs","crossCount_1","cc","twoLayerCrossCount","northLayer","southLayer","southPos","southEntries","firstIndex","treeSize","index","weightSum","consumeUnsortable","unsortable","pop","barycenter","movable","inV","nodeU","sum","resolveConflicts","entries","cg","mappedEntries","tmp","indegree","entryV","entryW","sourceSet","handleIn","vEntry","merged","mergeEntries","handleOut","doResolveConflicts","sort","biasRight","parts","sortable","vsIndex","bias","sortSubgraph_1","sortSubgraph","bl","br","subgraphs","barycenters","subgraphResult","expandSubgraphs","predecessors","blPred","brPred","buildLayerGraph_1","relationship","createRootNode","compound","setDefaultNodeLabel","initOrder","crossCount","buildLayerGraph","addSubgraphConstraints","rootPrev","prevChild","require$$6","require$$7","order_1","downLayerGraphs","buildLayerGraphs","upLayerGraphs","assignOrder","best","bestCC","lastBest","sweepLayerGraphs","ranks","layerGraphs","lg","sorted","layer","bk","adjustedLayering","conflicts","findType1Conflicts","findType2Conflicts","xss","vert","horiz","inner","neighborFn","bind","align","verticalAlignment","xs","horizontalCompaction","smallestWidth","findSmallestWidthAlignment","alignCoordinates","balance","prevLayer","k0","scanPos","prevLayerLength","lastNode","findOtherInnerSegmentNode","k1","scanNode","uLabel","uPos","addConflict","scan","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","nextNorthPos","prevNorthPos","southLookahead","conflictsV","hasConflict","prevIdx","ws","mp","il","ceil","reverseSep","blockG","blockGraph","sepFn","edgeSep","sep","nodesep","edgesep","vRoot","uRoot","prevMax","buildBlockGraph","iterate","setXsFunc","nextNodesFunc","elem","NEGATIVE_INFINITY","halfWidth","alignTo","alignToVals","alignToMin","alignToMax","alignment","xsVals","ul","ignore","positionX","position_1","rankSep","ranksep","prevY","maxHeight","positionY","parentDummyChains","require$$5","addBorderSegments","require$$8","require$$9","position","require$$10","require$$11","layout_1","opts","debugTiming","layoutGraph","inputGraph","canonicalize","graphDefaults","selectNumberAttrs","graphNumAttrs","graphAttrs","nodeNumAttrs","nodeDefaults","edgeDefaults","edgeNumAttrs","edgeAttrs","buildLayoutGraph","labeloffset","makeSpaceForEdgeLabels","selfEdges","removeSelfEdges","injectEdgeLabelProxies","assignRankMinMax","removeEdgeLabelProxies","orderShift","selfEdge","insertSelfEdges","selfNode","positionSelfEdges","removeBorderNodes","fixupEdgeLabelCoords","minX","maxX","minY","maxY","marginX","marginx","marginY","marginy","getExtremes","translateGraph","p2","nodeV","nodeW","assignNodeIntersects","reversePointsForReversedEdges","runLayout","inputLabel","layoutLabel","updateInputGraph","obj","newAttrs","dagre","layout","debug","debugOrdering","layerMatrix","layerV","version","GraphlibGraph","GraphData","_g","setDefaultEdgeLabel","cn","filterNodes","pred","filtered","eachNode","callback","item","filterEdges","eachEdge","setData","vertices","hierarchy","retVal","addedVertices","addedEdges","allVertices","entity","_id","edgeIDs_1","indexOf","vertexIDs_1","id","glEdge","singleNeighbors","gatherShortestPath","pathObj","targetID","walkID","pathItem","distance","Infinity","predecessor","anEdge","shortestPath","sourceID","dijkstra","undirectedShortestPath","getJSON","graphObj","json","write","_text","d3ForceCenter","force","initialize","constant$1","jiggle","random","add","isNaN","xm","ym","xp","yp","right","_root","leaf","next","Quad","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","copy","treeProto","nodeById","nodeId","get","d3ForceLink","links","strengths","distances","count","strength","iterations","vx","vy","initializeStrength","initializeDistance","cover","xz","yz","z","visit","extent","radius","q","x3","y3","quads","d2","retainer","previous","removeAll","visitAfter","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","Date","setFrame","requestAnimationFrame","setTimeout","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","t0","t2","t1","sleep","nap","poke","clearTimeout","clearInterval","setInterval","stop","initialAngle","d3ForceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","step","event","dispatch","tick","fx","fy","initializeNodes","angle","initializeForce","set","closest","d3ForceManyBody","distanceMin2","distanceMax2","theta2","accumulate","quad","distanceMin","distanceMax","theta","Circle","graphData","currStep","getBBox","fixed","ForceDirected","options","vertexMap","vertex","newItem","_e","forceLink","linkDistance","linkStrength","forceManyBody","cs","charge","oneShot","friction","total","Hierarchy","_width","_height","digraph","clientSize","dagreLayout","deltaX","deltaY","nodePos","edgePoints","Subgraph","_textWidget","Text","anchor","fontSize","_buttonMin","Icon","diameter","shape_colorStroke","shape_colorFill","image_colorFill","minClick","_minState","minState","calcIcon","refresh","round","_border","bbox","border_colorFill","border_colorStroke","border_colorFill_exists","title_colorFill_exists","title_colorFill","Palette","textColor","showTitle","title","visible","showMinMax","faChar","pointA","pointB","nearest","click","Vertex","_icon","_annotationWidgets","getIconBBox","iconBBox","textBoxBBox","iconAnchor","_prevHash","mouseover","mouseout","hash","hashSum","classed","centroid","iconTooltip","context_1","annotations","annotationIcons","annotationsEnter","_d","idx","shape","xOffset_1","yOffset_1","annotationWidget","annotationDiameter","textbox_shape_colorFill","textbox_shape_colorStroke","globalThis","__hpcc_debug","aBBox","annotationSpacing","element2","d3Select","i1","i2","_toggleHierarchy","ToggleButton","layoutClick","_toggleForceDirected","_toggleForceDirected2","_toggleCircle","_dataHash","_neighborOffsets","IGraph","ITooltip","tooltipHTML","content","replace","_drawStartPos","buttons","Spacer","_iconBar","_graphData","highlight","zoom","opacity","_selection","Utility","Selection","zoomToFitLimit","iconBarButtons","applyScaleOnLayout","getOffsetPos","clear","_renderCount","dupMap_1","dupEdgeCount","selection","linkcolor_default","_linkcolor","linktooltip_default","_linktooltip","dragstart","allowDragging","event_1","d3Event","sourceEvent","stopPropagation","__drag_dx","__drag_dy","_dragging","forceLayout","active","forceNode","dragSingleNeighbors","neighbor","raise","offsetX","offsetY","nextSibling","parentNode","dragging","event_2","neighborOffset","neighborX","neighborY","refreshIncidentEdges","dragend","snapToGrid","snapLoc","calcSnap","_zoomGrab","selectionClearOnBackgroundClick","_d3Drag","d3Drag","defs","_renderElement","addMarkers","_centroidFilter","SVGGlowFilter","svg","svgC","svgE","svgV","getBounds","items","layoutEngine","vBounds","leftX","rightX","topY","bottomY","getVertexBounds","getSelectionBounds","centerOnItem","itemBBox","centerOnBBox","zoomToItem","zoomToBBox","updateVertices","rootElement","rootSuffix","vertexElements","selectionChanged","vertexElement","select","selected","empty","vertex_click","rowToObj","vertex_dblclick","vertex_contextmenu","hide","show","vertex_mouseover","vertex_mouseout","animationFrameRender","allowResize","centroidColor","edgeElements","showEdges","edgeElement","edge_click","edge_dblclick","edge_mouseover","edge_mouseout","progress","doLayout","then","Promise","resolve","reject","_prevLayout","_prevDataHash","_doLayout","getLayoutEngine","total_1","count_1","zoomToFit","_fixIEMarkers","GraphLayouts.Circle","_size","GraphLayouts.ForceDirected","forceDirectedLinkDistance","forceDirectedLinkStrength","forceDirectedFriction","forceDirectedCharge","chargeDistance","forceDirectedChargeDistance","forceDirectedTheta","gravity","forceDirectedGravity","GraphLayouts.Hierarchy","hierarchyRankDirection","hierarchyNodeSeparation","hierarchyEdgeSeparation","hierarchyRankSeparation","hierarchyDigraph","getNeighborMap","nedges","highlightVerticies","_placeholderElement","highlightEdges","edgeMap","o","highlightVertex","highlightOnMouseOverVertex","highlightEdge","highlightOnMouseOverEdge","centroids","highlightSelectedPathToCentroid","highlightedEdges_1","_row","_col","_sel","more","_opts","clearFirst","what","profileID","SVGZoomWidget","implements","_origScale","scale","zoomTo","Annotation","owner","_owner","valid","iconColumn","indexes","columns","iconCol","iconFillCol","iconFillColumn","tooltipCol","tooltipColumn","shapeStrokeCol","shapeStrokeColumn","shapeFillCol","shapeFillColumn","mapper","row","shapeFillDefault","shapeStrokeDefault","iconFillDefault","PropertyExt","AdjacencyGraph","_vertexMap","_edgeMap","_merge","_adjacencyData","linksColumns","linksCol","linksColumn","linksField","_db","field","validAnnotations","updateData","prevAdjacencyDataHash","uidColumn","labelColumn","linkUidColumn","linkLabelColumn","_prevAdjacencyDataHash","uidCol_1","labelCol_1","iconCol_1","linksUidCol","linksLabelCol","annotationMappers_1","vertexMap_1","uid","am","_i","_a","_b","links_1","childRow","linkUid","linkLabel","edgeID","col","sel","justify","sourceLinks","ascendingSourceBreadth","ascendingBreadth","ascendingTargetBreadth","defaultId","defaultNodes","defaultLinks","computeLinkBreadths","targetLinks","Sankey","py","linkSort","sankey","computeNodeLinks","computeNodeValues","computeNodeDepths","computeNodeHeights","computeNodeBreadths","Map","fixedValue","current","Set","kx","column","computeNodeLayers","ky","reorderLinks","initializeNodeBreadths","relaxRightToLeft","relaxLeftToRight","targetTop","reorderNodeLinks","resolveCollisions","sourceTop","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","nodeAlign","nodeSort","nodeWidth","nodePadding","horizontalSource","horizontalTarget","d3SankeyLinkHorizontal","autoExpand","d3Aggr","mean","d3Mean","median","d3Median","d3Min","d3Max","d3Sum","SankeyColumn","aggregate","aggrType","colIdx_1","aggrColumn","disable","mappings","SimpleSelectionMixin","sankeyData","vertexIndex","mapping","rollupView","__id","__category","origRow","mapping2_1","_d3Sankey","d3Sankey","widgetElement","_palette","switch","paletteID","strokeWidth","vertexStrokeWidth","sw2","vertexWidth","vertexPadding","dblclick","gElement","vertexStrokeColor","xAxisMovement","yAxisMovement","Column","mixin","ordinal","lineBasis","lineCardinal","Layout","_running","_graph","running","center","edgePath","ep","curveDepth","sPos","projectPlacholder","tPos","labelPos","rads","degrees","sideLength","allEdges","vertexCount","moveVertices","moveEdges","clusterID","Dagre","_options","workerBlob","Blob","workerUrl","URL","createObjectURL","worker","Worker","terminate","response","onmessage","revokeObjectURL","postMessage","allSubgraphs","props","subgraphParent","vertexParent","subgraph","substring","sourceDist","targetDist","moveSubgraphs","hasNaN","project","ForceDirectedBase","_links","_charge","repulsionStrength","_center","d3ForceX","forceStrength","d3ForceY","_simulation","pinCentroid","ForceDirectedAnimated","graphviz","Graphviz","engine","wasmFolder","_engine","_wasmFolder","nodeIdx","gvWorker","raw","clusters","Null","defaultSeparation","meanXReduce","maxYReduce","cluster","separation","nodeSize","previousNode","eachAfter","meanX","left","leafLeft","leafRight","childs","Node","valued","defaultChildren","eachBefore","computeHeight","copyData","nextLeft","nextRight","moveSubtree","wm","wp","shift","change","nextAncestor","vim","ancestor","TreeNode","A","treeRoot","firstWalk","secondWalk","sizeNode","tx","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","Initial","compare","end","aNodes","ancestors","bNodes","leastCommonAncestor","splice","descendants","leaves","d3LinkHorizontal","Bounds","reset","expand","TidyTreeBase","_visited","sortTree","_tree","origData","cnode","depthFirst","node_1","breadthFirst","nnode","vertices_1","_d3Hierarchy","finalize","bounds","Tree","treeFunc","RadialTree","Dendrogram","RadialDendrogram","getScriptSrc","dragStart","dragTick","dragEnd","Graph2","_toggleDot","_toggleNeato","_toggleFDP","_toggleTwoPI","_toggleCirco","_toggleT","_toggleRT","_toggleD","_toggleRD","GraphCollection","idFunc","sourceFunc","targetFunc","updateFunc","_prevDoClickTime","_tooltip","HTMLTooltip","_dragHandler","_catPalette","_categories","_annotations","_origData","_layoutAlgo","_centroidRenderer","_vertexRenderer","_transformScale","safeRaise","moveVertexPlaceholder","rproject","vertexEdges","doClick","doClickTime","doubleClickMaxDelay","categories","mergeSubgraphs","mergeVertices","mergeEdges","vertexExists","clearParents","subgraphExists","some","vp","resetLayout","layoutRunning","layoutAlgo","updateIconBar","updateIconBarItem","tb","tbLayout","enabled","isSubgraph","isVertex","isEdge","proj","hideVertex","showVertex","_vertexG","forceLabelOnHighlight","showVertexLabels","showVertexLabelsOnHighlight","calcProps","showLabel","vertexMapper","_edgeG","edgeStrokeWidth","moveSubgraphPlaceholder","sp","moveEdgePlaceholder","edgeLayout","edgeArcDepth","elementPath","elementText","lines","split","fontFamily","moveNeighbours","clip","maxScale","minScale","categoryID","updateCategories","Icons","icons","fill","imageCharFill","_svgDefsCat","updateAnnotations","_svgDefsAnn","updateEdges","showEdgeLabels","color","edgeColor","centroidRenderer","vertexRenderer","annotationIDs","vertex_mousein","triggerElement","tooltipWidth","tooltipHeight","enablePointerEvents","enableTooltipPointerEvents","closeDelay","tooltipCloseDelay","direction","isCentroid","icon","textHeight","centroidTextHeight","centroidScale","textPadding","centroidTextPadding","textFontFamily","centroidLabelFontFamily","centroidIconHeight","centroidIconPadding","centroidIconStrokeWidth","imageFontFamily","centroidIconFontFamily","vertexTextHeight","vertexTextPadding","vertexLabelFontFamily","vertexIconHeight","vertexIconPadding","vertexIconStrokeWidth","vertexIconFontFamily","imageChar","textRect","yOffset","hasSubgraphs","updateSubgraphs","_subgraphG","subgraph_click","locateSVGNode","_svgDefs","forceDirectedOptions","forceDirectedAlpha","forceDirectedAlphaMin","forceDirectedAlphaDecay","forceDirectedVelocityDecay","forceDirectedRepulsionStrength","forceDirectedIterations","forceDirectedPinCentroid","forceDirectedForceStrength","forceDirectedMinDistance","forceDirectedMaxDistance","layoutOptions","treeRankDirection","updateLayout","zoomed","transform","_prevTransformScale","_prevWidth","_prevHeight","highlightedVertices_1","ids","len","toJsonObj","AnnotationColumn","columnID","vertexColumns","DataGraph","_prevSubgraphs","_masterSubgraphs","_masterSubgraphsMap","_prevVertices","_masterVertices","_masterVerticesMap","_prevEdges","_masterEdges","_masterEdgesMap","_prevHierarchy","_masterHierarchy","_masterHierarchyMap","Vertex3","CentroidVertex3","defColumn","subgraphColumns","idIdx","subgraphIDColumn","labelIdx","subgraphLabelColumn","diff","compare2","annotationColumns","vertexAnnotationColumns","catIdx","vertexCategoryColumn","vertexIDColumn","vertexLabelColumn","centroidIdx","vertexCentroidColumn","faCharIdx","vertexFACharColumn","vertexTooltipIdx","vertexTooltipColumn","annotationIdxs","ac","vertexFAChar","ai","annotationID","edgeColumns","edgeIDColumn","sourceIdx","edgeSourceColumn","targetIdx","edgeTargetColumn","edgeLabelColumn","weightIdx","edgeWeightColumn","colorIdx","edgeColorColumn","error","mergeHierarchy","hierarchyColumns","parentIDIdx","hierarchyParentIDColumn","childIDIdx","hierarchyChildIDColumn","internal","SankeyGraph","dot"],"mappings":"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","sourcesContent":["export const PKG_NAME = \"@hpcc-js/graph\";\r\nexport const PKG_VERSION = \"2.79.2\";\r\nexport const BUILD_VERSION = \"2.102.8\";\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\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","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export var slice = Array.prototype.slice;\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\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","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { Platform, SVGWidget, TextBox, Widget } from \"@hpcc-js/common\";\nimport { curveBasis as d3CurveBasis, curveBundle as d3CurveBundle, curveCardinal as d3CurveCardinal, curveCatmullRom as d3CurveCatmullRom, curveLinear as d3CurveLinear, line as d3Line } from \"d3-shape\";\n\nimport \"../src/Edge.css\";\n\nconst Curve = {\n basis: d3CurveBasis,\n bundle: d3CurveBundle,\n cardinal: d3CurveCardinal,\n catmullRom: d3CurveCatmullRom,\n linear: d3CurveLinear\n};\n\nexport class Edge extends SVGWidget {\n protected _points: any[];\n protected _weight: number;\n protected _strokeDasharray: number[];\n protected _hidden: boolean;\n protected _textBox: TextBox;\n protected _sourceVertex: Widget;\n protected _targetVertex: Widget;\n protected _elementPath;\n protected _graphID;\n\n constructor() {\n super();\n\n this._points = [];\n this._weight = 100;\n this._strokeDasharray = null;\n this._hidden = false;\n\n this._textBox = new TextBox()\n .padding(0)\n ;\n }\n\n graphID(_) {\n if (!arguments.length) return this._graphID;\n this._graphID = _;\n return this;\n }\n\n sourceVertex(): Widget;\n sourceVertex(_: Widget): this;\n sourceVertex(_?: Widget): Widget | this {\n if (!arguments.length) return this._sourceVertex;\n this._sourceVertex = _;\n return this;\n }\n\n targetVertex(): Widget;\n targetVertex(_: Widget): this;\n targetVertex(_?: Widget): Widget | this {\n if (!arguments.length) return this._targetVertex;\n this._targetVertex = _;\n return this;\n }\n\n weight(): number;\n weight(_: number): this;\n weight(_?: number): number | this {\n if (!arguments.length) return this._weight;\n this._weight = _;\n return this;\n }\n\n points(): any[];\n points(_: any[], transitionDuration?, skipPushMarkers?): this;\n points(_?: any[], transitionDuration?, skipPushMarkers?): any[] | this {\n if (!arguments.length) return this._points;\n this._points = _;\n if (this._elementPath) {\n this.update(null, this._element, transitionDuration, skipPushMarkers);\n }\n return this;\n }\n\n hidden(_) {\n if (!arguments.length) return this._hidden;\n this._hidden = _;\n return this;\n }\n\n text(): string;\n text(_: string): this;\n text(_?: string): string | this {\n if (!arguments.length) return this._textBox.text();\n this._textBox.text(_);\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._elementPath = element.append(\"path\");\n\n if (this._textBox.text()) {\n this._textBox\n .target(domNode)\n .tooltip(this.tooltip())\n .render()\n ;\n }\n }\n\n update(domNode, element, transitionDuration?, skipPushMarkers?) {\n super.update(domNode, element);\n\n const context = this;\n if (Platform.svgMarkerGlitch && !skipPushMarkers) {\n element.transition().duration((transitionDuration ? transitionDuration : 0) + 100)\n .on(\"start\", function () {\n context._pushMarkers(element);\n })\n .on(\"end\", function () {\n context._popMarkers(element);\n })\n ;\n }\n const points = context._calculateEdgePoints(this._sourceVertex, this._targetVertex, this._points);\n const svgPoints = element.selectAll(\".point2\").data(this.showControlPoints() ? points : []);\n svgPoints.enter().append(\"circle\")\n .attr(\"class\", \"point2\")\n .style(\"stroke\", \"red\")\n .merge(svgPoints)\n .attr(\"cx\", d => d.x)\n .attr(\"cy\", d => d.y)\n .attr(\"r\", 1)\n ;\n svgPoints.exit().remove();\n\n const line = d3Line()\n .x(function (d: any) { return d.x; })\n .y(function (d: any) { return d.y; })\n // .tension(0.75)\n .curve(Curve.basis)(points)\n ;\n let pathElements = this._elementPath;\n if (transitionDuration) {\n pathElements = pathElements.transition().duration(transitionDuration);\n }\n pathElements\n .attr(\"opacity\", this._hidden ? 0 : 1)\n .attr(\"marker-start\", !(Platform.svgMarkerGlitch && skipPushMarkers) && this.sourceMarker_exists() ? \"url(#\" + this._graphID + \"_\" + this.sourceMarker() + \"Foot)\" : null)\n .attr(\"marker-end\", !(Platform.svgMarkerGlitch && skipPushMarkers) && this.targetMarker_exists() ? \"url(#\" + this._graphID + \"_\" + this.targetMarker() + \"Head)\" : null)\n .attr(\"stroke\", this.strokeColor_exists() ? this.strokeColor() : null)\n .attr(\"stroke-dasharray\", this.strokeDasharray_exists() ? this.strokeDasharray() : null)\n .attr(\"d\", line)\n ;\n\n if (this._textBox.text()) {\n this._textBox\n .tooltip(this.tooltip())\n .move(this._findMidPoint(points), transitionDuration)\n ;\n }\n }\n\n exit(domNode, element) {\n if (this._textBox) {\n this._textBox.target(null);\n }\n super.exit(domNode, element);\n }\n\n _findMidPoint(points) {\n const midIdx = points.length / 2;\n if (points.length % 2) {\n return points[Math.floor(midIdx)];\n } else if (points.length) {\n const p0 = points[midIdx - 1];\n const p1 = points[midIdx];\n return { x: (p0.x + p1.x) / 2, y: (p0.y + p1.y) / 2 };\n }\n return { x: 0, y: 0 };\n }\n\n _calculateEdgePoints(source, target, _points) {\n if (!source || !target) {\n return [{ x: 0, y: 0 }, { x: 0, y: 0 }];\n }\n let points = _points ? _points.filter(p => !source.contains(p) && !target.contains(p)) : [];\n const p0 = points.length === 0 ? target.pos() : points[0];\n const p1 = points.length === 0 ? source.pos() : points[points.length - 1];\n\n points.unshift(source.intersection(source._pos, p0));\n points.push(target.intersection(target._pos, p1));\n if (!points[0]) {\n points[0] = source._pos;\n }\n if (!points[points.length - 1]) {\n points[points.length - 1] = target._pos;\n }\n\n if ((!_points || _points.length === 0) && points.length === 2 && points[0] && points[1]) {\n const dx = points[0].x - points[1].x;\n const dy = points[0].y - points[1].y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist) {\n if (this.showArc()) {\n const midX = (points[0].x + points[1].x) / 2 - dy * this.arcDepth() / 100;\n const midY = (points[0].y + points[1].y) / 2 + dx * this.arcDepth() / 100;\n points = [{ x: points[0].x, y: points[0].y }, { x: midX, y: midY }, { x: points[1].x, y: points[1].y }];\n } else {\n points = [{ x: points[0].x, y: points[0].y }, { x: points[1].x, y: points[1].y }];\n }\n }\n }\n return points;\n }\n}\nEdge.prototype._class += \" graph_Edge\";\n\nexport interface Edge {\n arcDepth(): number;\n arcDepth(_: number): this;\n showControlPoints(): boolean;\n showControlPoints(_: boolean): this;\n showArc(): boolean;\n showArc(_: boolean): this;\n tooltip(): string;\n tooltip(_: string): this;\n\n sourceMarker(): string;\n sourceMarker(_: string): this;\n sourceMarker_exists: () => boolean;\n targetMarker(): string;\n targetMarker(_: string): this;\n targetMarker_exists: () => boolean;\n strokeDasharray(): string;\n strokeDasharray(_: string): this;\n strokeDasharray_exists: () => boolean;\n strokeColor(): string;\n strokeColor(_: string): this;\n strokeColor_exists: () => boolean;\n\n text_shape_colorFill(): string;\n text_shape_colorFill(_: string): this;\n text_shape_colorStroke(): string;\n text_shape_colorStroke(_: string): this;\n text_text_colorFill(): string;\n text_text_colorFill(_: string): this;\n}\n\nEdge.prototype.publish(\"arcDepth\", 16, \"number\", \"Arc Depth\", null, { tags: [\"Basic\"] });\nEdge.prototype.publish(\"showControlPoints\", false, \"boolean\", \"Show/Hide Control Points\", null, { tags: [\"Basic\"] });\nEdge.prototype.publish(\"showArc\", true, \"boolean\", \"Show/Hide Arc\", null, { tags: [\"Basic\"] });\nEdge.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\n\nEdge.prototype.publish(\"sourceMarker\", \"circle\", \"set\", \"Source Marker\", [\"none\", \"circle\"], { optional: true });\nEdge.prototype.publish(\"targetMarker\", \"arrow\", \"set\", \"Source Marker\", [\"none\", \"arrow\", \"circle\"], { optional: true });\nEdge.prototype.publish(\"strokeDasharray\", null, \"string\", \"Stroke Dash Array\", null, { optional: true });\nEdge.prototype.publish(\"strokeColor\", null, \"html-color\", \"Stroke Color\", null, { optional: true });\nEdge.prototype.publish(\"textColor\", null, \"html-color\", \"Text Color\", null, { optional: true });\nEdge.prototype.publishProxy(\"text_shape_colorFill\", \"_textBox\", \"shape_colorFill\");\nEdge.prototype.publishProxy(\"text_shape_colorStroke\", \"_textBox\", \"shape_colorStroke\");\nEdge.prototype.publishProxy(\"text_text_colorFill\", \"_textBox\", \"text_colorFill\");\n","/* global window */\n\nvar graphlib;\n\nif (typeof require === \"function\") {\n try {\n graphlib = require(\"graphlib\");\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!graphlib) {\n graphlib = window.graphlib;\n}\n\nmodule.exports = graphlib;\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n try {\n lodash = {\n cloneDeep: require(\"lodash/cloneDeep\"),\n constant: require(\"lodash/constant\"),\n defaults: require(\"lodash/defaults\"),\n each: require(\"lodash/each\"),\n filter: require(\"lodash/filter\"),\n find: require(\"lodash/find\"),\n flatten: require(\"lodash/flatten\"),\n forEach: require(\"lodash/forEach\"),\n forIn: require(\"lodash/forIn\"),\n has: require(\"lodash/has\"),\n isUndefined: require(\"lodash/isUndefined\"),\n last: require(\"lodash/last\"),\n map: require(\"lodash/map\"),\n mapValues: require(\"lodash/mapValues\"),\n max: require(\"lodash/max\"),\n merge: require(\"lodash/merge\"),\n min: require(\"lodash/min\"),\n minBy: require(\"lodash/minBy\"),\n now: require(\"lodash/now\"),\n pick: require(\"lodash/pick\"),\n range: require(\"lodash/range\"),\n reduce: require(\"lodash/reduce\"),\n sortBy: require(\"lodash/sortBy\"),\n uniqueId: require(\"lodash/uniqueId\"),\n values: require(\"lodash/values\"),\n zipObject: require(\"lodash/zipObject\"),\n };\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!lodash) {\n lodash = window._;\n}\n\nmodule.exports = lodash;\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nmodule.exports = List;\n\nfunction List() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n}\n\nList.prototype.dequeue = function() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n};\n\nList.prototype.enqueue = function(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n};\n\nList.prototype.toString = function() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return \"[\" + strs.join(\", \") + \"]\";\n};\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== \"_next\" && k !== \"_prev\") {\n return v;\n }\n}\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\nvar List = require(\"./data/list\");\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nmodule.exports = greedyFAS;\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(_.map(results, function(e) {\n return g.outEdges(e.v, e.w);\n }), true);\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function(edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function(edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry[\"in\"] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function(v) {\n fasGraph.setNode(v, { v: v, \"in\": 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function(e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);\n maxIn = Math.max(maxIn, fasGraph.node(e.w)[\"in\"] += weight);\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function(v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry[\"in\"]) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry[\"in\"] + zeroIdx].enqueue(entry);\n }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar greedyFAS = require(\"./greedy-fas\");\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\nfunction run(g) {\n var fas = (g.graph().acyclicer === \"greedy\"\n ? greedyFAS(g, weightFn(g))\n : dfsFAS(g));\n _.forEach(fas, function(e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId(\"rev\"));\n });\n\n function weightFn(g) {\n return function(e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (_.has(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function(e) {\n if (_.has(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function(e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n","/* eslint \"no-console\": off */\n\n\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n addDummyNode: addDummyNode,\n simplify: simplify,\n asNonCompoundGraph: asNonCompoundGraph,\n successorWeights: successorWeights,\n predecessorWeights: predecessorWeights,\n intersectRect: intersectRect,\n buildLayerMatrix: buildLayerMatrix,\n normalizeRanks: normalizeRanks,\n removeEmptyRanks: removeEmptyRanks,\n addBorderNode: addBorderNode,\n maxRank: maxRank,\n partition: partition,\n time: time,\n notime: notime\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen)\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function(v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function(e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function(e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var preds = {};\n _.forEach(g.inEdges(v), function(e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error(\"Not possible to find intersection inside of the rectangle\");\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = h * dx / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = w * dy / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function() { return []; });\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (_.has(node, \"rank\")) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n\n var layers = [];\n _.forEach(g.nodes(), function(v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function(vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function(v) { g.node(v).rank += delta; });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, \"border\", node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(_.map(g.nodes(), function(v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n }));\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function(value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + \" time: \" + (_.now() - start) + \"ms\");\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function(edge) { normalizeEdge(g, edge); });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0, height: 0,\n edgeLabel: edgeLabel, edgeObj: e,\n rank: vRank\n };\n dummy = util.addDummyNode(g, \"edge\", attrs, \"_d\");\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n attrs.dummy = \"edge-label\";\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === \"edge-label\") {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = {\n longestPath: longestPath,\n slack: slack\n};\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (_.has(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(_.map(g.outEdges(v), function(e) {\n return dfs(e.w) - g.edge(e).minlen;\n }));\n\n if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null) { // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar slack = require(\"./util\").slack;\n\nmodule.exports = feasibleTree;\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function(e) {\n var edgeV = e.v,\n w = (v === edgeV) ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function(e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function(v) {\n g.node(v).rank += delta;\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar feasibleTree = require(\"./feasible-tree\");\nvar slack = require(\"./util\").slack;\nvar initRank = require(\"./util\").longestPath;\nvar preorder = require(\"../graphlib\").alg.preorder;\nvar postorder = require(\"../graphlib\").alg.postorder;\nvar simplify = require(\"../util\").simplify;\n\nmodule.exports = networkSimplex;\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n initRank(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function(v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function(e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function(w) {\n if (!_.has(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function(e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function(edge) {\n return flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel);\n });\n\n return _.minBy(candidates, function(edge) { return slack(g, edge); });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; });\n var vs = preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function(v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","\"use strict\";\n\nvar rankUtil = require(\"./util\");\nvar longestPath = rankUtil.longestPath;\nvar feasibleTree = require(\"./feasible-tree\");\nvar networkSimplex = require(\"./network-simplex\");\n\nmodule.exports = rank;\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch(g.graph().ranker) {\n case \"network-simplex\": networkSimplexRanker(g); break;\n case \"tight-tree\": tightTreeRanker(g); break;\n case \"longest-path\": longestPathRanker(g); break;\n default: networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n","var _ = require(\"./lodash\");\n\nmodule.exports = parentDummyChains;\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca &&\n g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (pathIdx < path.length - 1 &&\n g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent &&\n (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n run: run,\n cleanup: cleanup\n};\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, \"root\", {}, \"_root\");\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, \"_bt\");\n var bottom = util.addBorderNode(g, \"_bb\");\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function(child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function(v) { dfs(v, 1); });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(g.edges(), function(acc, e) {\n return acc + g.edge(e).weight;\n }, 0);\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = addBorderSegments;\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (_.has(node, \"minRank\")) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1;\n rank < maxRank;\n ++rank) {\n addBorderNode(g, \"borderLeft\", \"_bl\", v, node, rank);\n addBorderNode(g, \"borderRight\", \"_br\", v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, \"border\", label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = {\n adjust: adjust,\n undo: undo\n};\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === \"lr\" || rankDir === \"rl\") {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === \"bt\" || rankDir === \"rl\") {\n reverseY(g);\n }\n\n if (rankDir === \"lr\" || rankDir === \"rl\") {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); });\n _.forEach(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function(v) { reverseYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (_.has(edge, \"y\")) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function(v) { swapXYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (_.has(edge, \"x\")) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = initOrder;\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function(v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; }));\n var layers = _.map(_.range(maxRank + 1), function() { return []; });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = crossCount;\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i-1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(southLayer,\n _.map(southLayer, function (v, i) { return i; }));\n var southEntries = _.flatten(_.map(northLayer, function(v) {\n return _.sortBy(_.map(g.outEdges(v), function(e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }), \"pos\");\n }), true);\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function() { return 0; });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(southEntries.forEach(function(entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n while (index > 0) {\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n }));\n\n return cc;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = barycenter;\n\nfunction barycenter(g, movable) {\n return _.map(movable, function(v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(inV, function(acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + (edge.weight * nodeU.order),\n weight: acc.weight + edge.weight\n };\n }, { sum: 0, weight: 0 });\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight\n };\n }\n });\n}\n\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = resolveConflicts;\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function(entry, i) {\n var tmp = mappedEntries[entry.v] = {\n indegree: 0,\n \"in\": [],\n out: [],\n vs: [entry.v],\n i: i\n };\n if (!_.isUndefined(entry.barycenter)) {\n tmp.barycenter = entry.barycenter;\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function(e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function(entry) {\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function(uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (_.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function(wEntry) {\n wEntry[\"in\"].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry[\"in\"].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(_.filter(entries, function(entry) { return !entry.merged; }),\n function(entry) {\n return _.pick(entry, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n });\n\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n","var _ = require(\"../lodash\");\nvar util = require(\"../util\");\n\nmodule.exports = sort;\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function(entry) {\n return _.has(entry, \"barycenter\");\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs, true) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function(entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n","var _ = require(\"../lodash\");\nvar barycenter = require(\"./barycenter\");\nvar resolveConflicts = require(\"./resolve-conflicts\");\nvar sort = require(\"./sort\");\n\nmodule.exports = sortSubgraph;\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight: undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function(w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function(entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (_.has(subgraphResult, \"barycenter\")) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br], true);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!_.has(result, \"barycenter\")) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter = (result.barycenter * result.weight +\n blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function(entry) {\n entry.vs = _.flatten(entry.vs.map(function(v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n }), true);\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter = (target.barycenter * target.weight +\n other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\n\nmodule.exports = buildLayerGraph;\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true }).setGraph({ root: root })\n .setDefaultNodeLabel(function(v) { return g.node(v); });\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function(e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (_.has(node, \"minRank\")) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank]\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId(\"_root\"))));\n return v;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = addSubgraphConstraints;\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function(v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar initOrder = require(\"./init-order\");\nvar crossCount = require(\"./cross-count\");\nvar sortSubgraph = require(\"./sort-subgraph\");\nvar buildLayerGraph = require(\"./build-layer-graph\");\nvar addSubgraphConstraints = require(\"./add-subgraph-constraints\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\nmodule.exports = order;\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), \"inEdges\"),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), \"outEdges\");\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function(rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function(lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function(v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, i) {\n g.node(v).order = i;\n });\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nmodule.exports = {\n positionX: positionX,\n findType1Conflicts: findType1Conflicts,\n findType2Conflicts: findType2Conflicts,\n addConflict: addConflict,\n hasConflict: hasConflict,\n verticalAlignment: verticalAlignment,\n horizontalCompaction: horizontalCompaction,\n alignCoordinates: alignCoordinates,\n findSmallestWidthAlignment: findSmallestWidthAlignment,\n balance: balance\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var\n // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function(v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i +1), function(scanNode) {\n _.forEach(g.predecessors(scanNode), function(u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) &&\n !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function(i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function(u) {\n var uNode = g.node(u);\n if (uNode.dummy &&\n (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function(v, southLookahead) {\n if (g.node(v).dummy === \"border\") {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function(u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function(layer) {\n var prevIdx = -1;\n _.forEach(layer, function(v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function(w) { return pos[w]; });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v &&\n prevIdx < pos[w] &&\n !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? \"borderLeft\" : \"borderRight\";\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function(acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function(v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function(layer) {\n var u;\n _.forEach(layer, function(v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach([\"u\", \"d\"], function(vert) {\n _.forEach([\"l\", \"r\"], function(horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === \"l\" ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function(x) { return x + delta; });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function(ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(\n findType1Conflicts(g, layering),\n findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach([\"u\", \"d\"], function(vert) {\n adjustedLayering = vert === \"u\" ? layering : _.values(layering).reverse();\n _.forEach([\"l\", \"r\"], function(horiz) {\n if (horiz === \"r\") {\n adjustedLayering = _.map(adjustedLayering, function(inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === \"u\" ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering,\n align.root, align.align, horiz === \"r\");\n if (horiz === \"r\") {\n xs = _.mapValues(xs, function(x) { return -x; });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function(g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (_.has(vLabel, \"labelpos\")) {\n switch (vLabel.labelpos.toLowerCase()) {\n case \"l\": delta = -vLabel.width / 2; break;\n case \"r\": delta = vLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (_.has(wLabel, \"labelpos\")) {\n switch (wLabel.labelpos.toLowerCase()) {\n case \"l\": delta = wLabel.width / 2; break;\n case \"r\": delta = -wLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar util = require(\"../util\");\nvar positionX = require(\"./bk\").positionX;\n\nmodule.exports = position;\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forEach(positionX(g), function(x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function(layer) {\n var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; }));\n _.forEach(layer, function(v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar acyclic = require(\"./acyclic\");\nvar normalize = require(\"./normalize\");\nvar rank = require(\"./rank\");\nvar normalizeRanks = require(\"./util\").normalizeRanks;\nvar parentDummyChains = require(\"./parent-dummy-chains\");\nvar removeEmptyRanks = require(\"./util\").removeEmptyRanks;\nvar nestingGraph = require(\"./nesting-graph\");\nvar addBorderSegments = require(\"./add-border-segments\");\nvar coordinateSystem = require(\"./coordinate-system\");\nvar order = require(\"./order\");\nvar position = require(\"./position\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = layout;\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time(\"layout\", function() {\n var layoutGraph = \n time(\" buildLayoutGraph\", function() { return buildLayoutGraph(g); });\n time(\" runLayout\", function() { runLayout(layoutGraph, time); });\n time(\" updateInputGraph\", function() { updateInputGraph(g, layoutGraph); });\n });\n}\n\nfunction runLayout(g, time) {\n time(\" makeSpaceForEdgeLabels\", function() { makeSpaceForEdgeLabels(g); });\n time(\" removeSelfEdges\", function() { removeSelfEdges(g); });\n time(\" acyclic\", function() { acyclic.run(g); });\n time(\" nestingGraph.run\", function() { nestingGraph.run(g); });\n time(\" rank\", function() { rank(util.asNonCompoundGraph(g)); });\n time(\" injectEdgeLabelProxies\", function() { injectEdgeLabelProxies(g); });\n time(\" removeEmptyRanks\", function() { removeEmptyRanks(g); });\n time(\" nestingGraph.cleanup\", function() { nestingGraph.cleanup(g); });\n time(\" normalizeRanks\", function() { normalizeRanks(g); });\n time(\" assignRankMinMax\", function() { assignRankMinMax(g); });\n time(\" removeEdgeLabelProxies\", function() { removeEdgeLabelProxies(g); });\n time(\" normalize.run\", function() { normalize.run(g); });\n time(\" parentDummyChains\", function() { parentDummyChains(g); });\n time(\" addBorderSegments\", function() { addBorderSegments(g); });\n time(\" order\", function() { order(g); });\n time(\" insertSelfEdges\", function() { insertSelfEdges(g); });\n time(\" adjustCoordinateSystem\", function() { coordinateSystem.adjust(g); });\n time(\" position\", function() { position(g); });\n time(\" positionSelfEdges\", function() { positionSelfEdges(g); });\n time(\" removeBorderNodes\", function() { removeBorderNodes(g); });\n time(\" normalize.undo\", function() { normalize.undo(g); });\n time(\" fixupEdgeLabelCoords\", function() { fixupEdgeLabelCoords(g); });\n time(\" undoCoordinateSystem\", function() { coordinateSystem.undo(g); });\n time(\" translateGraph\", function() { translateGraph(g); });\n time(\" assignNodeIntersects\", function() { assignNodeIntersects(g); });\n time(\" reversePoints\", function() { reversePointsForReversedEdges(g); });\n time(\" acyclic.undo\", function() { acyclic.undo(g); });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function(v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (_.has(layoutLabel, \"x\")) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" };\nvar graphAttrs = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"];\nvar nodeNumAttrs = [\"width\", \"height\"];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"];\nvar edgeDefaults = {\n minlen: 1, weight: 1, width: 0, height: 0,\n labeloffset: 10, labelpos: \"r\"\n};\nvar edgeAttrs = [\"labelpos\"];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(_.merge({},\n graphDefaults,\n selectNumberAttrs(graph, graphNumAttrs),\n _.pick(graph, graphAttrs)));\n\n _.forEach(inputGraph.nodes(), function(v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(e, _.merge({},\n edgeDefaults,\n selectNumberAttrs(edge, edgeNumAttrs),\n _.pick(edge, edgeAttrs)));\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== \"c\") {\n if (graph.rankdir === \"TB\" || graph.rankdir === \"BT\") {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, \"edge-proxy\", label, \"_ep\");\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === \"edge-proxy\") {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function(v) { getExtremes(g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, \"x\")) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function(p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (_.has(edge, \"x\")) { edge.x -= minX; }\n if (_.has(edge, \"y\")) { edge.y -= minY; }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, \"x\")) {\n if (edge.labelpos === \"l\" || edge.labelpos === \"r\") {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case \"l\": edge.x -= edge.width / 2 + edge.labeloffset; break;\n case \"r\": edge.x += edge.width / 2 + edge.labeloffset; break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function(v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function(v) {\n if (g.node(v).dummy === \"border\") {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function(e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function(layer) {\n var orderShift = 0;\n _.forEach(layer, function(v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function(selfEdge) {\n util.addDummyNode(g, \"selfedge\", {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + (++orderShift),\n e: selfEdge.e,\n label: selfEdge.label\n }, \"_se\");\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === \"selfedge\") {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + 2 * dx / 3, y: y - dy },\n { x: x + 5 * dx / 6, y: y - dy },\n { x: x + dx , y: y },\n { x: x + 5 * dx / 6, y: y + dy },\n { x: x + 2 * dx / 3, y: y + dy }\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function(v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n debugOrdering: debugOrdering\n};\n\n/* istanbul ignore next */\nfunction debugOrdering(g) {\n var layerMatrix = util.buildLayerMatrix(g);\n\n var h = new Graph({ compound: true, multigraph: true }).setGraph({});\n\n _.forEach(g.nodes(), function(v) {\n h.setNode(v, { label: v });\n h.setParent(v, \"layer\" + g.node(v).rank);\n });\n\n _.forEach(g.edges(), function(e) {\n h.setEdge(e.v, e.w, {}, e.name);\n });\n\n _.forEach(layerMatrix, function(layer, i) {\n var layerV = \"layer\" + i;\n h.setNode(layerV, { rank: \"same\" });\n _.reduce(layer, function(u, v) {\n h.setEdge(u, v, { style: \"invis\" });\n return v;\n });\n });\n\n return h;\n}\n","module.exports = \"0.8.5\";\n","/*\nCopyright (c) 2012-2014 Chris Pettitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nmodule.exports = {\n graphlib: require(\"./lib/graphlib\"),\n\n layout: require(\"./lib/layout\"),\n debug: require(\"./lib/debug\"),\n util: {\n time: require(\"./lib/util\").time,\n notime: require(\"./lib/util\").notime\n },\n version: require(\"./lib/version\")\n};\n","import { Edge as GLEdge, GraphEdge, graphlib, Node } from \"dagre\";\nimport { Vertex } from \"./Vertex\";\n\ntype GLNode = Node<Vertex>;\n\nclass GraphlibGraph extends graphlib.Graph<Vertex> {\n}\n\ninterface GraphlibGraph {\n nodeEdges(outNodeName: string, inNodeName?: string): GLEdge[] | undefined;\n}\n\nexport interface GraphLabel {\n debugTiming?: boolean;\n}\n\nexport class GraphData {\n\n private _g: GraphlibGraph;\n\n constructor() {\n this._g = new GraphlibGraph({ multigraph: true, compound: true });\n this._g.setGraph({});\n this._g.setDefaultNodeLabel(function () { return { debug: \"error\" }; });\n this._g.setDefaultEdgeLabel(function () { return { debug: \"error\" }; });\n }\n\n parent(cn: string): string {\n return this._g.parent(cn);\n }\n\n private filterNodes(pred) {\n const filtered = [];\n this.eachNode(function (e) {\n if (pred(e)) {\n filtered.push(e);\n }\n });\n return filtered;\n }\n\n eachNode(callback) {\n this._g.nodes().forEach(function (item) {\n callback(item, this.node(item));\n }, this);\n }\n\n private filterEdges(pred): GLEdge[] {\n const filtered = [];\n this.eachEdge(function (e) {\n if (pred(e)) {\n filtered.push(e);\n }\n });\n return filtered;\n }\n\n eachEdge(callback) {\n this._g.edges().forEach(function (item) {\n callback(item, item.v, item.w, this.edge(item));\n }, this);\n }\n\n setData(subgraphs, vertices, edges, hierarchy, merge) {\n const retVal = {\n addedVertices: [],\n addedEdges: []\n };\n\n const allVertices = subgraphs.concat(vertices);\n\n // Add new items ---\n for (let i = 0; i < allVertices.length; ++i) {\n const entity = allVertices[i];\n if (!merge || !this._g.hasNode(entity._id)) {\n this._g.setNode(entity._id, entity);\n retVal.addedVertices.push(entity);\n }\n }\n for (let i = 0; i < edges.length; ++i) {\n const edge = edges[i];\n if (!merge || !this._g.hasEdge(edge._id)) {\n if (edge._sourceVertex && edge._targetVertex) {\n this._g.setEdge(edge._sourceVertex._id, edge._targetVertex._id, edge, edge._id);\n retVal.addedEdges.push(edge);\n } else {\n console.log(\"Bad edge definition\");\n }\n }\n }\n if (hierarchy) {\n for (let i = 0; i < hierarchy.length; ++i) {\n this._g.setParent(hierarchy[i].child._id, hierarchy[i].parent._id);\n }\n }\n\n // Remove old items ---\n if (merge) {\n const edgeIDs = edges.map(function (item) {\n return item._id;\n });\n this\n .filterEdges(item => edgeIDs.indexOf(item.name) < 0)\n .forEach(item => this._g.removeEdge(item.v, item.w))\n ;\n\n const vertexIDs = allVertices.map(function (item) {\n return item._id;\n });\n this\n .filterNodes(item => vertexIDs.indexOf(item) < 0)\n .forEach(item => this._g.removeNode(item))\n ;\n }\n return retVal;\n }\n\n node(id: string): GLNode {\n return this._g.node(id);\n }\n\n nodeCount(): number {\n return this._g.nodeCount();\n }\n\n nodes(): GLNode[] {\n return this._g.nodes().map(n => this._g.node(n));\n }\n\n nodeEdges(id: string): GLEdge[] {\n return this._g.nodeEdges(id);\n }\n\n edge(glEdge: GLEdge): GraphEdge {\n return this._g.edge(glEdge);\n }\n\n edges(): GraphEdge[] {\n return this._g.edges().map(e => this._g.edge(e));\n }\n\n neighbors(id: string) {\n return this._g.neighbors(id).map(n => this._g.node(n));\n }\n\n singleNeighbors(id: string) {\n return this._g.neighbors(id)\n .filter((n: any) => this._g.neighbors(n).length === 1)\n .map(item => this._g.node(item as any));\n }\n\n gatherShortestPath(pathObj, targetID) {\n const retVal = [];\n let walkID = targetID;\n let pathItem = pathObj[walkID];\n while (pathItem) {\n if (pathItem.distance < Infinity && pathItem.predecessor) {\n const anEdge = this._g.nodeEdges(walkID, pathItem.predecessor)[0];\n retVal.push(this._g.edge(anEdge as any));\n }\n walkID = pathItem.predecessor;\n pathItem = pathObj[walkID];\n }\n return retVal;\n }\n\n shortestPath(sourceID: string, targetID: string) {\n return this.gatherShortestPath(graphlib.alg.dijkstra(this._g, sourceID), targetID);\n }\n\n undirectedShortestPath(sourceID: string, targetID: string) {\n return this.gatherShortestPath(graphlib.alg.dijkstra(this._g, sourceID, null, v => this._g.nodeEdges(v) as any), targetID);\n }\n\n getJSON() {\n const graphObj = graphlib.json.write(this._g);\n return JSON.stringify(graphObj, function (key, value) {\n if (key === \"value\") {\n if (value._text && value._text._text) {\n return value._text._text;\n }\n return value._id;\n }\n return value;\n }, \" \");\n }\n}\n","export default function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\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(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","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {map} from \"d3-collection\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = map(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\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() {\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","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 {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","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\nimport {x, y} from \"./simulation\";\n\nexport default function() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import { forceCenter as d3ForceCenter, forceLink as d3ForceLink, forceManyBody as d3ForceManyBody, forceSimulation as d3ForceSimulation } from \"d3-force\";\nimport { GraphLabel, graphlib, layout } from \"dagre\";\nimport { GraphData } from \"./GraphData\";\n\nexport function Circle(graphData: GraphData, width?, height?, radius?) {\n const context = this;\n this.pos = {};\n\n // Initial Positions ---\n const padding = 0;\n radius = radius || (width < height ? width - padding : height - padding) / 2;\n const order = graphData.nodeCount();\n let currStep = -Math.PI / 2;\n const step = 2 * Math.PI / order;\n graphData.eachNode(function (u, value) {\n const size = value.getBBox();\n const maxSize = 0; // Math.max(size.width, size.height);\n context.pos[u] = {\n x: value.fixed ? value.x : width / 2 + Math.cos(currStep) * (radius - maxSize),\n y: value.fixed ? value.y : height / 2 + Math.sin(currStep) * (radius - maxSize),\n width: size.width,\n height: size.height\n };\n currStep += step;\n });\n}\nCircle.prototype.nodePos = function (u) {\n return this.pos[u];\n};\nCircle.prototype.edgePoints = function (_e) {\n return [];\n};\n\nexport function None(graphData: GraphData, _width, _height, _radius) {\n const context = this;\n this.pos = {};\n\n graphData.eachNode(function (u, value) {\n context.pos[u] = {\n x: value.x,\n y: value.y,\n width: value.width,\n height: value.height\n };\n });\n}\nNone.prototype.nodePos = function (u) {\n return this.pos[u];\n};\nNone.prototype.edgePoints = function (_e) {\n return [];\n};\n\nexport function ForceDirected(graphData: GraphData, width, height, options) {\n options = options || {};\n const context = this;\n this.pos = {};\n\n this.vertices = [];\n this.vertexMap = {};\n graphData.eachNode(function (u) {\n const vertex = graphData.node(u);\n const size = vertex.getBBox();\n const newItem = {\n id: u,\n x: vertex.pos().x,\n y: vertex.pos().y,\n width: size.width,\n height: size.height,\n value: vertex\n };\n context.vertices.push(newItem);\n context.vertexMap[u] = newItem;\n });\n this.edges = [];\n graphData.eachEdge(function (_e, s, t) {\n context.edges.push({\n source: s,\n target: t\n });\n });\n const forceLink = d3ForceLink()\n .id(function (d: any) {\n return d.id;\n })\n .distance(options.linkDistance)\n .strength(options.linkStrength)\n ;\n const forceManyBody = d3ForceManyBody()\n .strength(function (d: any) {\n const cs = d.value.getBBox();\n return options.charge * Math.max(cs.width, cs.height);\n })\n ;\n this.force = d3ForceSimulation()\n .force(\"link\", forceLink)\n .force(\"charge\", forceManyBody)\n .force(\"center\", d3ForceCenter(width / 2, height / 2))\n .velocityDecay(options.oneShot ? 0.1 : options.friction)\n .nodes(this.vertices)\n ;\n forceLink\n .links(this.edges)\n ;\n\n if (options.oneShot) {\n this.force.restart();\n let total = graphData.nodeCount();\n total = Math.min(total * total, 500);\n for (let i = 0; i < total; ++i) {\n this.force.tick();\n }\n this.force.stop();\n }\n}\nForceDirected.prototype.nodePos = function (u) {\n return this.vertexMap[u];\n};\nForceDirected.prototype.edgePoints = function (_e) {\n return [];\n};\n\nexport function Hierarchy(graphData: GraphData, _width, _height, options) {\n const digraph = new graphlib.Graph({ multigraph: true, compound: true })\n .setGraph(options)\n .setDefaultNodeLabel(function () { return {}; })\n .setDefaultEdgeLabel(function () { return {}; })\n ;\n graphData.eachNode(function (u) {\n const value = graphData.node(u);\n const clientSize = value.getBBox();\n digraph.setNode(u, {\n width: clientSize.width,\n height: clientSize.height\n });\n });\n graphData.eachEdge(function (e, s, t) {\n const value = graphData.edge(e);\n digraph.setEdge(s, t, {\n weight: value.weight()\n }, value._id);\n if (!options.digraph) {\n digraph.setEdge(t, s, {\n weight: value.weight()\n }, value._id);\n }\n });\n graphData.eachNode(function (u) {\n digraph.setParent(u, graphData.parent(u));\n });\n this.dagreLayout = layout(digraph, { debugTiming: false } as GraphLabel);\n const deltaX = -digraph.graph().width / 2;\n const deltaY = -digraph.graph().height / 2;\n digraph.nodes().forEach(function (u) {\n const value = digraph.node(u);\n value.x += deltaX + _width / 2;\n value.y += deltaY + _height / 2;\n });\n digraph.edges().forEach(function (e) {\n const value = digraph.edge(e);\n for (let i = 0; i < value.points.length; ++i) {\n value.points[i].x += deltaX + _width / 2;\n value.points[i].y += deltaY + _height / 2;\n }\n });\n this.digraph = digraph;\n}\nHierarchy.prototype.nodePos = function (u) {\n return this.digraph.node(u);\n};\nHierarchy.prototype.edgePoints = function (edge) {\n return this.digraph.edge(edge._sourceVertex.id(), edge._targetVertex.id(), edge._id).points;\n};\n","import { Icon, Palette, SVGWidget, Text } from \"@hpcc-js/common\";\nimport \"d3-transition\";\n\nimport \"../src/Subgraph.css\";\n\nconst TITLE_SIZE = 14;\nconst MINMAX_SIZE = 18;\n\nexport type SubgraphMinState = \"normal\" | \"partial\";\n\nexport class Subgraph extends SVGWidget {\n protected _border;\n protected _textWidget = new Text()\n .anchor(\"start\")\n .fontSize(TITLE_SIZE)\n ;\n protected _buttonMin = new Icon()\n .diameter(MINMAX_SIZE)\n .shape_colorStroke(\"#1f77b4\")\n .shape_colorFill(\"#dcf1ff\")\n .image_colorFill(\"#1f77b4\")\n .on(\"click\", () => {\n this.minClick();\n }, true)\n .on(\"dblclick\", () => {\n }, true)\n ;\n\n protected _minState: SubgraphMinState = \"normal\";\n\n constructor() {\n super();\n }\n\n minState(): SubgraphMinState;\n minState(_: SubgraphMinState): this;\n minState(_?: SubgraphMinState): SubgraphMinState | this {\n if (!arguments.length) return this._minState;\n this._minState = _;\n return this;\n }\n\n calcIcon() {\n switch (this._minState) {\n case \"normal\":\n return \"\\uf2d2\";\n case \"partial\":\n return \"\\uf2d0\";\n }\n }\n\n getBBox(refresh = false, round = false) {\n const width = this.width();\n const height = this.height();\n return {\n x: -width / 2,\n y: -height / 2 - TITLE_SIZE,\n width,\n height\n };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._border = element.append(\"rect\").attr(\"class\", \"border\");\n this._textWidget.target(domNode);\n this._buttonMin.target(domNode);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const bbox = this.getBBox();\n\n this._border\n .attr(\"x\", bbox.x)\n .attr(\"y\", bbox.y)\n .attr(\"width\", bbox.width)\n .attr(\"height\", bbox.height)\n .style(\"fill\", this.border_colorFill())\n .style(\"stroke\", this.border_colorStroke())\n ;\n\n if (this.border_colorFill_exists() && !this.title_colorFill_exists()) {\n this.title_colorFill(Palette.textColor(this.border_colorFill()));\n }\n this._textWidget\n .pos({ x: bbox.x + 4, y: bbox.y + TITLE_SIZE })\n .width(this.width() - 8)\n .text(this.showTitle() ? this.title() : \"\")\n .render()\n ;\n\n this._buttonMin\n .visible(this.showMinMax())\n .pos({ x: bbox.x + bbox.width - (MINMAX_SIZE / 2 + 4), y: bbox.y + (MINMAX_SIZE / 2 + 4) })\n .faChar(this.calcIcon())\n .render()\n ;\n }\n\n exit(domNode, element) {\n this._buttonMin.target(null);\n this._textWidget.target(null);\n this._border.remove();\n super.exit(domNode, element);\n }\n\n intersection(pointA, pointB) {\n const hits = [];\n let nearest = null;\n hits.forEach(function (item) {\n if (nearest === null || nearest.d > item.d) {\n nearest = item;\n }\n });\n return nearest && nearest.i ? nearest.i : null;\n }\n\n click(d) {\n console.log(\"Clicked: \" + d.id);\n }\n\n minClick() {\n switch (this._minState) {\n case \"normal\":\n this._minState = \"partial\";\n break;\n case \"partial\":\n this._minState = \"normal\";\n break;\n }\n this._buttonMin\n .faChar(this.calcIcon()) // max:f2d0, restore: f2d2, min: f2d1\n .render()\n ;\n }\n}\nSubgraph.prototype._class += \" graph_Subgraph\";\n\nexport interface Subgraph {\n border_colorStroke(): string;\n border_colorStroke(_: string): this;\n border_colorFill(): string;\n border_colorFill(_: string): this;\n border_colorFill_exists: () => boolean;\n showTitle(): boolean;\n showTitle(_: boolean): this;\n title(): string;\n title(_: string): this;\n titleFontSize(): string;\n titleFontSize(_: string): this;\n title_colorFill(): string;\n title_colorFill(_: string): this;\n title_colorFill_exists: () => boolean;\n showMinMax(): boolean;\n showMinMax(_: boolean): this;\n}\n\nSubgraph.prototype.publish(\"border_colorStroke\", null, \"html-color\", \"Stroke Color\", null, { optional: true });\nSubgraph.prototype.publish(\"border_colorFill\", null, \"html-color\", \"Fill Color\", null, { optional: true });\nSubgraph.prototype.publish(\"showTitle\", true, \"boolean\", \"Show Title\", null, { tags: [\"Basic\"] });\nSubgraph.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Basic\"] });\nSubgraph.prototype.publishProxy(\"titleFontSize\", \"_textWidget\", \"fontSize\");\nSubgraph.prototype.publishProxy(\"title_colorFill\", \"_textWidget\", \"colorFill\");\nSubgraph.prototype.publish(\"showMinMax\", false, \"boolean\", \"Show Min/Max\", null, { tags: [\"Basic\"] });\n","import { Icon, SVGWidget, TextBox } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Vertex.css\";\n\nexport interface IAnnotation {\n faChar?: string;\n imageUrl?: string;\n tooltip?: string;\n diameter?: number;\n paddingPercent?: number;\n shape_colorFill?: string;\n shape_colorStroke?: string;\n image_colorFill?: string;\n fontFamily?: string;\n}\n\nexport class Vertex extends SVGWidget {\n protected _icon: Icon;\n protected _textBox: TextBox;\n protected _annotationWidgets: object;\n protected _graphID;\n\n constructor() {\n super();\n\n this._icon = new Icon();\n this._textBox = new TextBox();\n this._annotationWidgets = {};\n this.pos({ x: undefined, y: undefined });\n }\n\n getIconBBox() {\n const iconBBox = this._icon.getBBox(true);\n const textBoxBBox = this._textBox.getBBox(true);\n switch (this.iconAnchor()) {\n case \"start\":\n return {\n x: -(textBoxBBox.width / 2) + (iconBBox.width / 3),\n y: -(textBoxBBox.height / 2) - (iconBBox.height / 3),\n width: iconBBox.width,\n height: iconBBox.height\n };\n case \"middle\":\n return {\n x: 0,\n y: -(textBoxBBox.height / 2) - (iconBBox.height / 3),\n width: iconBBox.width,\n height: iconBBox.height\n };\n case \"end\":\n return {\n x: (textBoxBBox.width / 2) - (iconBBox.width / 3),\n y: -(textBoxBBox.height / 2) - (iconBBox.height / 3),\n width: iconBBox.width,\n height: iconBBox.height\n };\n case \"left\":\n return {\n x: -(textBoxBBox.width / 2) - iconBBox.width / 2,\n y: 0,\n width: iconBBox.width,\n height: iconBBox.height\n };\n default:\n }\n return {\n x: 0,\n y: 0,\n width: iconBBox.width,\n height: iconBBox.height\n };\n }\n\n getBBox(refresh = false, round = false) {\n const iconBBox = this.getIconBBox();\n const textBoxBBox = this._textBox.getBBox(true);\n const x = Math.min(iconBBox.x, textBoxBBox.x);\n const y = Math.min(iconBBox.y, textBoxBBox.y);\n const right = Math.max(iconBBox.x + iconBBox.width, textBoxBBox.x + textBoxBBox.width);\n const bottom = Math.max(iconBBox.y + iconBBox.height, textBoxBBox.y + textBoxBBox.height);\n return {\n x,\n y,\n width: right - x,\n height: bottom - y\n };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n delete this._prevHash;\n this._icon\n .target(domNode)\n ;\n this._textBox\n .target(domNode)\n ;\n element\n .on(\"mouseover\", d => this.mouseover(d.data()))\n .on(\"mouseout\", d => this.mouseout(d.data()))\n ;\n }\n\n _prevHash;\n update(domNode, element) {\n super.update(domNode, element);\n const hash = this.hashSum();\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n element.classed(\"centroid\", this.centroid());\n element.style(\"filter\", this.centroid() ? \"url(#\" + this._graphID + \"_glow)\" : null);\n this._icon\n .tooltip(this.iconTooltip() ? this.iconTooltip() : this.tooltip())\n .render()\n ;\n this._textBox\n .tooltip(this.tooltip())\n .render()\n ;\n\n const iconBBox = this.getIconBBox();\n this._icon.move(iconBBox);\n\n const context = this;\n const annotations = element.selectAll(\".annotation\").data(this.annotationIcons());\n const annotationsEnter = annotations.enter().append(\"g\")\n .attr(\"class\", \"annotation\")\n .each(function (_d, idx) {\n context._annotationWidgets[idx] = new Icon()\n .target(this)\n .shape(\"square\")\n ;\n })\n ;\n const bbox = this._textBox.getBBox(true);\n let xOffset = bbox.width / 2;\n const yOffset = bbox.height / 2;\n annotationsEnter.merge(annotations)\n .each(function (d, idx) {\n const annotationWidget = context._annotationWidgets[idx];\n annotationWidget\n .diameter(context.annotationDiameter())\n .shape_colorFill(context.textbox_shape_colorFill())\n .shape_colorStroke(context.textbox_shape_colorStroke())\n ;\n for (const key in d) {\n if (annotationWidget[key]) {\n annotationWidget[key](d[key]);\n } else if (globalThis.__hpcc_debug) {\n console.log(\"Invalid annotation property: \" + key);\n }\n }\n annotationWidget.render();\n\n const aBBox = annotationWidget.getBBox(true);\n annotationWidget\n .move({\n x: xOffset - aBBox.width / 2 + 4,\n y: yOffset + aBBox.height / 2 - 4\n })\n ;\n xOffset -= aBBox.width + context.annotationSpacing();\n })\n ;\n annotations.exit()\n .each(function (_d, idx) {\n const element2 = d3Select(this);\n context._annotationWidgets[idx].target(null);\n delete context._annotationWidgets[idx];\n element2.remove();\n })\n ;\n }\n }\n\n exit(domNode, element) {\n for (const key in this._annotationWidgets) {\n this._annotationWidgets[key].target(null);\n }\n this._icon.target(null);\n this._textBox.target(null);\n super.exit(domNode, element);\n }\n\n // Methods ---\n contains(point): boolean {\n return this._icon.contains(point) || this._textBox.contains(point);\n }\n\n intersection(pointA, pointB) {\n const i1 = this._icon.intersection(pointA, pointB);\n const i2 = this._textBox.intersection(pointA, pointB);\n if (i1 && i2) {\n return this.distance(i1, pointB) < this.distance(i2, pointB) ? i1 : i2;\n }\n return i1 || i2;\n }\n\n // Events ---\n mouseover(d) {\n }\n\n mouseout(d) {\n }\n}\nVertex.prototype._class += \" graph_Vertex\";\n\nexport interface Vertex {\n faChar(): string;\n faChar(_: string): this;\n imageUrl(): string;\n imageUrl(_: string): this;\n icon_diameter(): number;\n icon_diameter(_: number): this;\n icon_paddingPercent(): number;\n icon_paddingPercent(_: number): this;\n icon_shape_colorFill(): string;\n icon_shape_colorFill(_: string): this;\n icon_shape_colorStroke(): string;\n icon_shape_colorStroke(_: string): this;\n icon_image_colorFill(): string;\n icon_image_colorFill(_: string): this;\n icon_fontFamily(): string;\n icon_fontFamily(_: string): this;\n\n centroid(): boolean;\n centroid(_: boolean): this;\n\n text(): string;\n text(_: string): this;\n anchor(): string;\n anchor(_: string): this;\n textbox_shape_colorStroke(): string;\n textbox_shape_colorStroke(_: string): this;\n textbox_shape_colorFill(): string;\n textbox_shape_colorFill(_: string): this;\n textbox_text_colorFill(): string;\n textbox_text_colorFill(_: string): this;\n\n iconAnchor(): \"\" | \"start\" | \"middle\" | \"end\" | \"left\";\n iconAnchor(_: \"\" | \"start\" | \"middle\" | \"end\" | \"left\"): this;\n iconTooltip(): string;\n iconTooltip(_: string): this;\n\n tooltip(): string;\n tooltip(_: string): this;\n\n annotationDiameter(): number;\n annotationDiameter(_: number): this;\n annotationSpacing(): number;\n annotationSpacing(_: number): this;\n annotationIcons(): IAnnotation[];\n annotationIcons(_: IAnnotation[]): this;\n}\n\nVertex.prototype.publishProxy(\"faChar\", \"_icon\");\nVertex.prototype.publishProxy(\"imageUrl\", \"_icon\");\nVertex.prototype.publishProxy(\"icon_diameter\", \"_icon\", \"diameter\");\nVertex.prototype.publishProxy(\"icon_paddingPercent\", \"_icon\", \"paddingPercent\");\nVertex.prototype.publishProxy(\"icon_shape_colorFill\", \"_icon\", \"shape_colorFill\");\nVertex.prototype.publishProxy(\"icon_shape_colorStroke\", \"_icon\", \"shape_colorStroke\");\nVertex.prototype.publishProxy(\"icon_image_colorFill\", \"_icon\", \"image_colorFill\");\nVertex.prototype.publishProxy(\"icon_fontFamily\", \"_icon\", \"fontFamily\");\n\nVertex.prototype.publish(\"centroid\", false, \"boolean\", \"Centroid Vertex\");\n\nVertex.prototype.publishProxy(\"text\", \"_textBox\");\nVertex.prototype.publishProxy(\"anchor\", \"_textBox\");\nVertex.prototype.publishProxy(\"textbox_shape_colorStroke\", \"_textBox\", \"shape_colorStroke\");\nVertex.prototype.publishProxy(\"textbox_shape_colorFill\", \"_textBox\", \"shape_colorFill\");\nVertex.prototype.publishProxy(\"textbox_text_colorFill\", \"_textBox\", \"text_colorFill\");\nVertex.prototype.publishProxy(\"textbox_text_fontFamily\", \"_textBox\", \"text_fontFamily\");\n\nVertex.prototype.publish(\"iconAnchor\", \"start\", \"set\", \"Horizontal anchor position of icon\", [\"\", \"start\", \"middle\", \"end\", \"left\"], { tags: [\"Basic\"] });\nVertex.prototype.publish(\"iconTooltip\", \"\", \"string\", \"iconTooltip\", null, { tags: [\"Private\"] });\n\nVertex.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\n\nVertex.prototype.publish(\"annotationDiameter\", 14, \"number\", \"Annotation Diameter\", null, { tags: [\"Private\"] });\nVertex.prototype.publish(\"annotationSpacing\", 3, \"number\", \"Annotation Spacing\", null, { tags: [\"Private\"] });\nVertex.prototype.publish(\"annotationIcons\", [], \"array\", \"Annotations\", null, { tags: [\"Private\"] });\n","import { IGraph, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, drag as d3Drag, ISize, Platform, select as d3Select, Spacer, SVGGlowFilter, SVGZoomWidget, ToggleButton, Utility, Widget } from \"@hpcc-js/common\";\n\nimport \"d3-transition\";\nimport { Edge } from \"./Edge\";\nimport { GraphData } from \"./GraphData\";\nimport * as GraphLayouts from \"./GraphLayouts\";\nimport { Subgraph } from \"./Subgraph\";\nimport { Vertex } from \"./Vertex\";\n\nimport \"../src/Graph.css\";\n\nexport interface Lineage {\n parent: Widget;\n child: Widget;\n}\nexport interface IGraphData {\n subgraphs?: Widget[];\n vertices: Widget[];\n edges: Edge[];\n hierarchy?: Lineage[];\n}\nexport type GraphLayoutType = \"Hierarchy\" | \"DOT\" | \"ForceDirected\" | \"ForceDirected2\" | \"Neato\" | \"FDP\" | \"Circle\" | \"TwoPI\" | \"Circo\" | \"None\";\n\nexport class Graph extends SVGZoomWidget {\n static Subgraph = Subgraph;\n static Vertex = Vertex;\n static Edge = Edge;\n\n private _toggleHierarchy = new ToggleButton().faChar(\"fa-sitemap\").tooltip(\"Hierarchy\").on(\"click\", () => this.layoutClick(\"Hierarchy\"));\n private _toggleForceDirected = new ToggleButton().faChar(\"fa-expand\").tooltip(\"Force Directed\").on(\"click\", () => this.layoutClick(\"ForceDirected\"));\n private _toggleForceDirected2 = new ToggleButton().faChar(\"fa-arrows\").tooltip(\"Spring\").on(\"click\", () => this.layoutClick(\"ForceDirected2\"));\n private _toggleCircle = new ToggleButton().faChar(\"fa-circle-o\").tooltip(\"Circle\").on(\"click\", () => this.layoutClick(\"Circle\"));\n\n private _graphData: GraphData;\n protected highlight;\n protected _selection;\n protected _dragging;\n protected forceLayout;\n protected _d3Drag;\n protected defs;\n protected _centroidFilter: SVGGlowFilter;\n protected svgFragment;\n protected svg;\n protected svgC;\n protected svgE;\n protected svgV;\n\n constructor() {\n super();\n IGraph.call(this);\n ITooltip.call(this);\n this.tooltipHTML(function (d: any) {\n let content;\n if (d instanceof Subgraph) {\n content = d.title().replace(/\\n/g, \"<br>\");\n } else if (d instanceof Vertex || d instanceof Edge) {\n content = d.text().replace(/\\n/g, \"<br>\");\n }\n if (content) {\n return `<p style=\"text-align:center\">${content}</p>`;\n }\n return null;\n });\n\n this._drawStartPos = \"origin\";\n\n const buttons: Widget[] = [\n this._toggleHierarchy,\n this._toggleForceDirected,\n this._toggleForceDirected2,\n this._toggleCircle,\n new Spacer()];\n this._iconBar.buttons(buttons.concat(this._iconBar.buttons()));\n\n this._graphData = new GraphData();\n this.highlight = {\n zoom: 1.1,\n opacity: 0.33,\n edge: \"1.25px\"\n };\n this._selection = new Utility.Selection(this);\n this.zoomToFitLimit(1);\n }\n\n iconBarButtons(): Widget[] {\n return this._iconBar.buttons();\n }\n\n layoutClick(layout: GraphLayoutType) {\n this.layout(layout);\n if (layout !== \"ForceDirected2\") this.applyScaleOnLayout(true);\n this\n .layout(layout)\n .render(w => {\n this.applyScaleOnLayout(false);\n });\n }\n\n // Properties ---\n getOffsetPos() {\n return { x: 0, y: 0 };\n }\n\n size(): ISize;\n size(_): this;\n size(_?): ISize | this {\n const retVal = super.size.apply(this, arguments);\n return retVal;\n }\n\n clear() {\n this.data({ subgraphs: [], vertices: [], edges: [], hierarchy: [] }, false);\n }\n\n _dataHash = 0;\n data(): IGraphData;\n data(_: IGraphData, merge?: boolean): this;\n data(_?: IGraphData, merge?: boolean): IGraphData | this {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length) {\n if (!merge) {\n this._graphData = new GraphData();\n this._renderCount = 0;\n }\n const data = this._graphData.setData(_.subgraphs || [], _.vertices || [], _.edges || [], _.hierarchy || [], merge || false);\n if (data.addedVertices.length) {\n this._dataHash++;\n }\n\n const context = this;\n data.addedVertices.forEach(function (item) {\n item._graphID = context._id;\n });\n data.addedEdges.forEach(function (item) {\n item._graphID = context._id;\n });\n\n // Recalculate edge arcs ---\n const dupMap = {};\n this._graphData.edges().forEach(function (item) {\n if (!dupMap[item._sourceVertex._id]) {\n dupMap[item._sourceVertex._id] = {};\n }\n if (!dupMap[item._sourceVertex._id][item._targetVertex._id]) {\n dupMap[item._sourceVertex._id][item._targetVertex._id] = 0;\n }\n const dupEdgeCount = ++dupMap[item._sourceVertex._id][item._targetVertex._id];\n item.arcDepth(16 * dupEdgeCount);\n });\n }\n return retVal;\n }\n\n graphData(): any {\n return this._graphData;\n }\n\n selection(_: Widget[]): this;\n selection(): Widget[];\n selection(_?: Widget[]): Widget[] | this {\n if (!arguments.length) return this._selection.get();\n this._selection.set(_);\n return this;\n }\n\n private _linkcolor: string;\n linkcolor_default(): string;\n linkcolor_default(_: string): this;\n linkcolor_default(_?: string): string | this {\n if (!arguments.length) return this._linkcolor;\n this._linkcolor = _;\n return this;\n }\n\n private _linktooltip: string;\n linktooltip_default(): string;\n linktooltip_default(_: string): this;\n linktooltip_default(_?: string): string | this {\n if (!arguments.length) return this._linktooltip;\n this._linktooltip = _;\n return this;\n }\n\n // Drag ---\n private _neighborOffsets: Array<{ neighbor: Vertex, offsetX: number, offsetY: number }> = [];\n dragstart(d) {\n if (this.allowDragging()) {\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n\n d.__drag_dx = event.x - d.x();\n d.__drag_dy = event.y - d.y();\n this._dragging = true;\n if (this.forceLayout) {\n if (!event.active) this.forceLayout.force.alphaTarget(0.3).restart();\n const forceNode = this.forceLayout.vertexMap[d.id()];\n forceNode.fixed = true;\n forceNode.fx = forceNode.x;\n forceNode.fy = forceNode.y;\n }\n\n this._neighborOffsets = [];\n if (this.dragSingleNeighbors()) {\n this._neighborOffsets = this._graphData.singleNeighbors(d.id()).map((neighbor: any) => {\n d3Select(neighbor.target()).raise();\n return {\n neighbor,\n offsetX: d.x() - neighbor.x(),\n offsetY: d.y() - neighbor.y()\n };\n });\n }\n\n // Safe Raise - does not interfere with current click event ---\n const target = d.target();\n let nextSibling = target.nextSibling;\n while (nextSibling) {\n target.parentNode.insertBefore(nextSibling, target);\n nextSibling = target.nextSibling;\n }\n\n if (Platform.svgMarkerGlitch) {\n this._graphData.nodeEdges(d.id()).forEach(glEdge => {\n const edge = this._graphData.edge(glEdge);\n this._pushMarkers(edge.element());\n });\n }\n }\n }\n\n dragging(d) {\n if (this.allowDragging()) {\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n d.move({ x: event.x - d.__drag_dx, y: event.y - d.__drag_dy });\n if (this.forceLayout) {\n const forceNode = this.forceLayout.vertexMap[d.id()];\n forceNode.fixed = true;\n forceNode.fx = event.x - d.__drag_dx;\n forceNode.fy = event.y - d.__drag_dy;\n }\n\n // Drag singleton child nodes\n this._neighborOffsets.forEach(neighborOffset => {\n const neighborX = event.x - d.__drag_dx - neighborOffset.offsetX;\n const neighborY = event.y - d.__drag_dy - neighborOffset.offsetY;\n if (this.forceLayout) {\n const forceNode = this.forceLayout.vertexMap[neighborOffset.neighbor.id()];\n forceNode.fixed = true;\n forceNode.fx = neighborX;\n forceNode.fy = neighborY;\n }\n neighborOffset.neighbor.move({ x: neighborX, y: neighborY });\n });\n\n this.refreshIncidentEdges(d, true);\n }\n }\n\n dragend(d) {\n if (this.allowDragging()) {\n d3Event().sourceEvent.stopPropagation();\n this._dragging = false;\n if (this.snapToGrid()) {\n const snapLoc = d.calcSnap(this.snapToGrid());\n d.move(snapLoc[0]);\n this.refreshIncidentEdges(d, true);\n }\n if (this.forceLayout) {\n const forceNode = this.forceLayout.vertexMap[d.id()];\n forceNode.fixed = false;\n forceNode.fx = null;\n forceNode.fy = null;\n\n this._neighborOffsets.forEach(neighborOffset => {\n const forceNode = this.forceLayout.vertexMap[neighborOffset.neighbor.id()];\n forceNode.fixed = false;\n forceNode.fx = null;\n forceNode.fy = null;\n });\n }\n this._neighborOffsets = [];\n\n if (Platform.svgMarkerGlitch) {\n this._graphData.nodeEdges(d.id()).forEach(function (id) {\n const edge = this._graphData.edge(id);\n this._popMarkers(edge.element());\n });\n }\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._zoomGrab.on(\"click.clear\", () => {\n if (this.selectionClearOnBackgroundClick()) {\n this._selection.clear();\n }\n });\n\n this._d3Drag = d3Drag()\n // .origin(function (d) {\n // return d.pos();\n // })\n .on(\"start\", d => this.dragstart(d))\n .on(\"end\", d => this.dragend(d))\n .on(\"drag\", d => this.dragging(d))\n ;\n // SVG ---\n this.defs = this._renderElement.append(\"defs\");\n this.addMarkers();\n this._centroidFilter = new SVGGlowFilter(this.defs, this._id + \"_glow\");\n\n // element.call(this.zoom);\n this.svg = this._renderElement.append(\"svg:g\");\n // this._svgBrush = this.svg.append(\"g\").attr(\"class\", \"selectionBrush\").call(this.brush);\n // this._svgBrush.select(\".background\").style(\"cursor\", null);\n // context._svgBrush.call(context.brush.clear());\n this.svgC = this.svg.append(\"g\").attr(\"id\", this._id + \"C\");\n this.svgE = this.svg.append(\"g\").attr(\"id\", this._id + \"E\");\n this.svgV = this.svg.append(\"g\").attr(\"id\", this._id + \"V\");\n }\n\n getBounds(items, layoutEngine?) {\n const vBounds = [[null, null], [null, null]];\n items.forEach(function (item) {\n const pos = layoutEngine ? layoutEngine.nodePos(item._id) : { x: item.x(), y: item.y(), width: item.width(), height: item.height() };\n const leftX = pos.x - pos.width / 2;\n const rightX = pos.x + pos.width / 2;\n const topY = pos.y - pos.height / 2;\n const bottomY = pos.y + pos.height / 2;\n if (vBounds[0][0] === null || vBounds[0][0] > leftX) {\n vBounds[0][0] = leftX;\n }\n if (vBounds[0][1] === null || vBounds[0][1] > topY) {\n vBounds[0][1] = topY;\n }\n if (vBounds[1][0] === null || vBounds[1][0] < rightX) {\n vBounds[1][0] = rightX;\n }\n if (vBounds[1][1] === null || vBounds[1][1] < bottomY) {\n vBounds[1][1] = bottomY;\n }\n });\n return vBounds;\n }\n\n getVertexBounds(layoutEngine) {\n return this.getBounds(this._graphData.nodes(), layoutEngine);\n }\n\n getSelectionBounds(layoutEngine) {\n return this.getBounds(this._selection.get(), layoutEngine);\n }\n\n centerOnItem(item: Widget) {\n const bbox = item.getBBox(true);\n const deltaX = bbox.x + bbox.width / 2;\n const deltaY = bbox.y + bbox.height / 2;\n const itemBBox = {\n x: item.x() + deltaX - bbox.width / 2,\n y: item.y() + deltaY - bbox.height / 2,\n width: bbox.width,\n height: bbox.height\n };\n this.centerOnBBox(itemBBox);\n }\n\n zoomToItem(item: Widget) {\n const bbox = item.getBBox(true);\n const deltaX = bbox.x + bbox.width / 2;\n const deltaY = bbox.y + bbox.height / 2;\n const itemBBox = {\n x: item.x() + deltaX - bbox.width / 2,\n y: item.y() + deltaY - bbox.height / 2,\n width: bbox.width,\n height: bbox.height\n };\n this.zoomToBBox(itemBBox);\n }\n\n // Render ---\n updateVertices(rootElement, rootSuffix, data) {\n const width = this.width();\n const height = this.height();\n const context = this;\n\n const vertexElements = rootElement.selectAll(\"#\" + this._id + rootSuffix + \" > .graphVertex\").data(data, function (d) { return d.id(); });\n vertexElements.enter().append(\"g\")\n .attr(\"class\", \"graphVertex\")\n .style(\"opacity\", 1e-6)\n // TODO: Events need to be optional ---\n .on(\"click.selectionBag\", function (d) {\n context._selection.click(d, d3Event());\n context.selectionChanged();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const vertexElement = d3Select(this).select(\".graph_Vertex\");\n let selected = false;\n if (!vertexElement.empty()) {\n selected = vertexElement.classed(\"selected\");\n }\n context.vertex_click(context.rowToObj(d.data()), \"\", selected, {\n vertex: d\n });\n })\n .on(\"dblclick\", function (this: SVGElement, d) {\n d3Event().stopPropagation();\n const vertexElement = d3Select(this).select(\".graph_Vertex\");\n let selected = false;\n if (!vertexElement.empty()) {\n selected = vertexElement.classed(\"selected\");\n }\n context.vertex_dblclick(context.rowToObj(d.data()), \"\", selected, {\n vertex: d\n });\n })\n .on(\"contextmenu\", function (this: SVGElement, d) {\n const vertexElement = d3Select(this).select(\".graph_Vertex\");\n let selected = false;\n if (!vertexElement.empty()) {\n selected = vertexElement.classed(\"selected\");\n }\n context.vertex_contextmenu(context.rowToObj(d.data()), \"\", selected, {\n vertex: d\n });\n })\n .on(\"mouseout.tooltip\", this.tooltip.hide)\n .on(\"mousemove.tooltip\", this.tooltip.show)\n .on(\"mouseover\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.vertex_mouseover(d3Select(this), d);\n })\n .on(\"mouseout\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.vertex_mouseout(d3Select(this), d);\n })\n .each(createV)\n .transition()\n .duration(750)\n .style(\"opacity\", 1)\n ;\n function createV(this: SVGElement, d) {\n d3Select(this).style(\"cursor\", context.allowDragging() ? \"move\" : \"pointer\");\n d\n .target(this)\n .pos({ x: d.x() || width / 2, y: d.y() || height / 2 })\n .animationFrameRender()\n ;\n if (context.allowDragging()) {\n d3Select(this)\n .call(context._d3Drag)\n ;\n }\n if (d.dispatch) {\n d.dispatch.on(\"sizestart\", function (d2) {\n d2.allowResize(context.allowDragging());\n if (context.allowDragging()) {\n context._dragging = true;\n }\n });\n d.dispatch.on(\"size\", function (d2) {\n context.refreshIncidentEdges(d2, false);\n });\n d.dispatch.on(\"sizeend\", function (d2) {\n context._dragging = false;\n if (context.snapToGrid()) {\n const snapLoc = d2.calcSnap(context.snapToGrid());\n d2\n .pos(snapLoc[0])\n .size(snapLoc[1])\n .render()\n ;\n context.refreshIncidentEdges(d2, false);\n }\n });\n }\n }\n\n vertexElements\n .each(updateV)\n ;\n function updateV(d) {\n d\n .animationFrameRender()\n ;\n }\n\n vertexElements.exit()\n .each(function (d) {\n d.target(null);\n })\n .remove()\n ;\n\n vertexElements.order();\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this.tooltip.hide();\n this._centroidFilter.update(this.centroidColor());\n\n // IconBar ---\n const layout = this.layout();\n this._toggleHierarchy.selected(layout === \"Hierarchy\").render();\n this._toggleForceDirected.selected(layout === \"ForceDirected\").render();\n this._toggleForceDirected2.selected(layout === \"ForceDirected2\").render();\n this._toggleCircle.selected(layout === \"Circle\").render();\n\n // Create ---\n const context = this;\n\n this.updateVertices(this.svgC, \"C\", this._graphData.nodes().filter(v => this.layout() === \"Hierarchy\" ? (v instanceof Subgraph) : false));\n this.updateVertices(this.svgV, \"V\", this._graphData.nodes().filter(v => !(v instanceof Subgraph)));\n\n const edgeElements = this.svgE.selectAll(\"#\" + this._id + \"E > .graphEdge\").data(this.showEdges() ? this._graphData.edges() : [], function (d) { return d.id(); });\n edgeElements.enter().append(\"g\")\n .attr(\"class\", \"graphEdge\")\n .style(\"opacity\", 1e-6)\n .on(\"click.selectionBag\", function (d) {\n context._selection.click(d, d3Event());\n })\n .on(\"click\", function (this: SVGElement, d) {\n const edgeElement = d3Select(this).select(\".graph_Edge\");\n let selected = false;\n if (!edgeElement.empty()) {\n selected = edgeElement.classed(\"selected\");\n }\n context.edge_click(context.rowToObj(d.data()), \"\", selected, {\n edge: d\n });\n })\n .on(\"dblclick\", function (this: SVGElement, d) {\n const edgeElement = d3Select(this).select(\".graph_Edge\");\n let selected = false;\n if (!edgeElement.empty()) {\n selected = edgeElement.classed(\"selected\");\n }\n context.edge_dblclick(context.rowToObj(d.data()), \"\", selected, {\n edge: d\n });\n })\n .on(\"mouseout.tooltip\", this.tooltip.hide)\n .on(\"mousemove.tooltip\", this.tooltip.show)\n .on(\"mouseover\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.edge_mouseover(d3Select(this), d);\n })\n .on(\"mouseout\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.edge_mouseout(d3Select(this), d);\n })\n .each(createE)\n .transition()\n .duration(750)\n .style(\"opacity\", 1)\n ;\n function createE(this: SVGElement, d) {\n d\n .target(this)\n .animationFrameRender()\n ;\n }\n\n edgeElements\n .each(updateE)\n ;\n function updateE(d) {\n d\n .animationFrameRender()\n ;\n }\n\n edgeElements.exit()\n .each(function (d) {\n d.target(null);\n })\n .remove()\n ;\n\n if (!this._renderCount) {\n this._renderCount++;\n this.layout(this.layout());\n }\n }\n\n exit(domNode, element) {\n this._graphData.nodes().forEach(v => v.target(null));\n this._graphData.edges().forEach(e => e.target(null));\n super.exit(domNode, element);\n }\n\n static profileID = 0;\n render(callback?: (w: Widget) => void): this {\n this.progress(\"start\");\n super.render(w => {\n this.doLayout().then(() => {\n this.progress(\"end\");\n if (callback) {\n callback(w);\n }\n });\n });\n return this;\n }\n\n // Methods ---\n _prevLayout;\n _prevDataHash;\n doLayout(transitionDuration = 0): Promise<void> {\n return new Promise((resolve, reject) => {\n requestAnimationFrame(() => {\n if (this._prevLayout !== this.layout() || this._prevDataHash !== this._dataHash) {\n this._prevLayout = this.layout();\n this._prevDataHash = this._dataHash;\n this._doLayout(transitionDuration).then(() => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n });\n }\n\n _doLayout(transitionDuration = 0): Promise<void> {\n return new Promise((resolve, reject) => {\n this.progress(\"layout-start\");\n if (this.forceLayout) {\n this.forceLayout.force.stop();\n this.forceLayout = null;\n }\n\n const context = this;\n const layoutEngine = this.getLayoutEngine();\n if (this.layout() === \"ForceDirected2\") {\n let total = 0;\n let count = 0;\n this.forceLayout = layoutEngine;\n this.forceLayout.force\n .on(\"tick\", function (this: SVGElement) {\n const start = performance.now();\n context.progress(\"layout-tick\");\n layoutEngine.vertices.forEach(function (item) {\n if (item.fixed) {\n // item.x = item.px;\n // item.y = item.py;\n } else {\n // item.px = item.x;\n // item.py = item.y;\n\n // Might have been cleared ---\n const vertex = context._graphData.node(item.id);\n if (vertex) {\n vertex\n .move({ x: item.x, y: item.y })\n ;\n }\n }\n });\n context._graphData.edges().forEach((item: any) => {\n item\n .points([], false, false)\n ;\n });\n if (context.applyScaleOnLayout()) {\n // const vBounds = context.getVertexBounds(layoutEngine);\n // context.shrinkToFit(vBounds);\n }\n total += performance.now() - start;\n ++count;\n console.log(\"tick:\" + (total / count));\n })\n .on(\"end\", function (this: SVGElement) {\n context.progress(\"layout-end\");\n })\n ;\n this.forceLayout.force.restart();\n resolve();\n } else if (layoutEngine) {\n this.forceLayout = null;\n context._dragging = true;\n context._graphData.nodes().forEach(function (item) {\n const pos = layoutEngine.nodePos(item.id());\n if (item instanceof Graph.Subgraph) {\n item\n .pos({ x: pos.x, y: pos.y })\n .size({ width: pos.width, height: pos.height })\n .animationFrameRender()\n ;\n } else {\n item.move({ x: pos.x, y: pos.y }, 0);\n }\n });\n context._graphData.edges().forEach((item: any) => {\n const points = layoutEngine.edgePoints(item);\n item.points(points, transitionDuration);\n });\n if (context.applyScaleOnLayout()) {\n requestAnimationFrame(() => {\n context.zoomToFit();\n resolve();\n });\n }\n this._fixIEMarkers();\n setTimeout(function () {\n context._dragging = false;\n }, transitionDuration ? transitionDuration + 50 : 50); // Prevents highlighting during morph ---\n this.progress(\"layout-end\");\n if (!context.applyScaleOnLayout()) {\n resolve();\n }\n }\n });\n }\n\n getLayoutEngine() {\n switch (this.layout()) {\n case \"Circle\":\n return new GraphLayouts.Circle(this._graphData, this._size.width, this._size.height);\n case \"ForceDirected\":\n return new GraphLayouts.ForceDirected(this._graphData, this._size.width, this._size.height, {\n oneShot: true,\n linkDistance: this.forceDirectedLinkDistance(),\n linkStrength: this.forceDirectedLinkStrength(),\n friction: this.forceDirectedFriction(),\n charge: this.forceDirectedCharge(),\n chargeDistance: this.forceDirectedChargeDistance(),\n theta: this.forceDirectedTheta(),\n gravity: this.forceDirectedGravity()\n });\n case \"ForceDirected2\":\n return new GraphLayouts.ForceDirected(this._graphData, this._size.width, this._size.height, {\n linkDistance: this.forceDirectedLinkDistance(),\n linkStrength: this.forceDirectedLinkStrength(),\n friction: this.forceDirectedFriction(),\n charge: this.forceDirectedCharge(),\n chargeDistance: this.forceDirectedChargeDistance(),\n theta: this.forceDirectedTheta(),\n gravity: this.forceDirectedGravity()\n });\n case \"Hierarchy\":\n return new GraphLayouts.Hierarchy(this._graphData, this._size.width, this._size.height, {\n rankdir: this.hierarchyRankDirection(),\n nodesep: this.hierarchyNodeSeparation(),\n edgesep: this.hierarchyEdgeSeparation(),\n ranksep: this.hierarchyRankSeparation(),\n digraph: this.hierarchyDigraph()\n });\n default:\n }\n return null; // new GraphLayouts.None(this.graphData, this._size.width, this._size.height);\n }\n\n getNeighborMap(vertex) {\n const vertices = {};\n const edges = {};\n\n if (vertex) {\n const nedges = this._graphData.nodeEdges(vertex.id());\n for (let i = 0; i < nedges.length; ++i) {\n const edge = this._graphData.edge(nedges[i]);\n edges[edge.id()] = edge;\n if (edge._sourceVertex.id() !== vertex.id()) {\n vertices[edge._sourceVertex.id()] = edge._sourceVertex;\n }\n if (edge._targetVertex.id() !== vertex.id()) {\n vertices[edge._targetVertex.id()] = edge._targetVertex;\n }\n }\n }\n\n return {\n vertices,\n edges\n };\n }\n\n highlightVerticies(vertexMap?: { [id: string]: boolean }) {\n const context = this;\n const vertexElements = this.svgV.selectAll(\".graphVertex\");\n vertexElements\n .classed(\"graphVertex-highlighted\", d => !vertexMap || vertexMap[d.id()])\n .style(\"filter\", d => vertexMap && vertexMap[d.id()] ? \"url(#\" + this.id() + \"_glow)\" : null)\n .transition().duration(this.transitionDuration())\n .on(\"end\", function (d) {\n if (vertexMap && vertexMap[d.id()]) {\n if (d._placeholderElement.node() && d._placeholderElement.node().parentNode) {\n d._placeholderElement.node().parentNode.appendChild(d._placeholderElement.node());\n }\n }\n })\n .style(\"opacity\", function (d) {\n if (!vertexMap || vertexMap[d.id()]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightEdges(edgeMap) {\n const context = this;\n const edgeElements = this.svgE.selectAll(\".graphEdge\");\n edgeElements\n .classed(\"graphEdge-highlighted\", function (d) { return !edgeMap || edgeMap[d.id()]; })\n .style(\"stroke-width\", function (o) {\n if (edgeMap && edgeMap[o.id()]) {\n return context.highlight.edge;\n }\n return \"1px\";\n }).transition().duration(this.transitionDuration())\n .style(\"opacity\", function (o) {\n if (!edgeMap || edgeMap[o.id()]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightVertex(_element, d) {\n if (this.highlightOnMouseOverVertex()) {\n if (d) {\n const highlight = this.getNeighborMap(d);\n highlight.vertices[d.id()] = d;\n this.highlightVerticies(highlight.vertices);\n this.highlightEdges(highlight.edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n highlightEdge(_element, d) {\n if (this.highlightOnMouseOverEdge()) {\n if (d) {\n const vertices = {};\n vertices[d._sourceVertex.id()] = d._sourceVertex;\n vertices[d._targetVertex.id()] = d._targetVertex;\n const edges = {};\n edges[d.id()] = d;\n this.highlightVerticies(vertices);\n this.highlightEdges(edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n refreshIncidentEdges(d, skipPushMarkers) {\n this._graphData.nodeEdges(d.id()).forEach(glEdge => {\n const edge: any = this._graphData.edge(glEdge);\n edge\n .points([], false, skipPushMarkers)\n ;\n });\n }\n\n // Events ---\n centroids(): Vertex[] {\n return (this._graphData.nodes() as any[]).filter(vertex => vertex.centroid());\n }\n\n selectionChanged() {\n if (this.highlightSelectedPathToCentroid()) {\n const highlightedEdges = {};\n this.centroids().forEach(centroid => {\n this.selection().forEach(selection => {\n this._graphData.undirectedShortestPath(centroid.id(), selection.id()).forEach(e => {\n highlightedEdges[e.id()] = true;\n });\n });\n });\n this.svgE.selectAll(\".graphEdge\")\n .classed(\"shortest-path\", d => highlightedEdges[d.id()] === true)\n ;\n }\n }\n\n vertex_click(_row, _col, _sel, more) {\n if (more && more.vertex) {\n more.vertex._placeholderElement.node().parentNode.appendChild(more.vertex._placeholderElement.node());\n }\n IGraph.prototype.vertex_click.apply(this, arguments);\n }\n\n vertex_dblclick(_row, _col, _sel, _opts) {\n }\n\n vertex_contextmenu(_row, _col, _sel, _opts) {\n }\n\n vertex_mouseover(element, d) {\n this.highlightVertex(element, d);\n }\n\n vertex_mouseout(_element, _d) {\n this.highlightVertex(null, null);\n }\n\n edge_mouseover(element, d) {\n this.highlightEdge(element, d);\n }\n\n edge_mouseout(_element, _d) {\n this.highlightEdge(null, null);\n }\n\n addMarkers(clearFirst: boolean = false) {\n if (clearFirst) {\n this.defs.select(\"#\" + this._id + \"_arrowHead\").remove();\n this.defs.select(\"#\" + this._id + \"_circleFoot\").remove();\n this.defs.select(\"#\" + this._id + \"_circleHead\").remove();\n this.defs.select(\"#\" + this._id + \"_glow\").remove();\n }\n this.defs.append(\"marker\")\n .attr(\"class\", \"marker\")\n .attr(\"id\", this._id + \"_arrowHead\")\n .attr(\"viewBox\", \"0 0 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 5)\n .attr(\"markerWidth\", 8)\n .attr(\"markerHeight\", 8)\n .attr(\"markerUnits\", \"strokeWidth\")\n .attr(\"orient\", \"auto\")\n .append(\"polyline\")\n .attr(\"points\", \"0,0 10,5 0,10 1,5\")\n ;\n this.defs.append(\"marker\")\n .attr(\"class\", \"marker\")\n .attr(\"id\", this._id + \"_circleFoot\")\n .attr(\"viewBox\", \"0 0 10 10\")\n .attr(\"refX\", 1)\n .attr(\"refY\", 5)\n .attr(\"markerWidth\", 7)\n .attr(\"markerHeight\", 7)\n .attr(\"markerUnits\", \"strokeWidth\")\n .attr(\"orient\", \"auto\")\n .append(\"circle\")\n .attr(\"cx\", 5)\n .attr(\"cy\", 5)\n .attr(\"r\", 4)\n ;\n this.defs.append(\"marker\")\n .attr(\"class\", \"marker\")\n .attr(\"id\", this._id + \"_circleHead\")\n .attr(\"viewBox\", \"0 0 10 10\")\n .attr(\"refX\", 9)\n .attr(\"refY\", 5)\n .attr(\"markerWidth\", 7)\n .attr(\"markerHeight\", 7)\n .attr(\"markerUnits\", \"strokeWidth\")\n .attr(\"orient\", \"auto\")\n .append(\"circle\")\n .attr(\"cx\", 5)\n .attr(\"cy\", 5)\n .attr(\"r\", 4)\n ;\n }\n\n // IGraph ---\n edge_click: (_row, _col, _sel, _more) => void;\n edge_dblclick: (_row, _col, _sel, _more) => void;\n\n // ITooltip ---\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n\n // Progess Events ---\n progress(what: \"start\" | \"end\" | \"layout-start\" | \"layout-tick\" | \"layout-end\") {\n }\n}\nGraph.prototype._class += \" graph_Graph\";\nGraph.prototype.implements(IGraph.prototype);\nGraph.prototype.implements(ITooltip.prototype);\n\nexport interface Graph {\n allowDragging(): boolean;\n allowDragging(_: boolean): this;\n dragSingleNeighbors(): boolean;\n dragSingleNeighbors(_: boolean): this;\n layout(): GraphLayoutType;\n layout(_: GraphLayoutType): this;\n // scale: { (): string; (_: string): this; };\n applyScaleOnLayout(): boolean;\n applyScaleOnLayout(_: boolean): this;\n highlightOnMouseOverVertex(): boolean;\n highlightOnMouseOverVertex(_: boolean): this;\n highlightOnMouseOverEdge(): boolean;\n highlightOnMouseOverEdge(_: boolean): this;\n transitionDuration(): number;\n transitionDuration(_: number): this;\n showEdges(): boolean;\n showEdges(_: boolean): this;\n snapToGrid(): number;\n snapToGrid(_: number): this;\n selectionClearOnBackgroundClick(): boolean;\n selectionClearOnBackgroundClick(_: boolean): this;\n\n centroidColor(): string;\n centroidColor(_: string): this;\n highlightSelectedPathToCentroid(): boolean;\n highlightSelectedPathToCentroid(_: boolean): this;\n\n hierarchyRankDirection(): string;\n hierarchyRankDirection(_: string): this;\n hierarchyNodeSeparation(): number;\n hierarchyNodeSeparation(_: number): this;\n hierarchyEdgeSeparation(): number;\n hierarchyEdgeSeparation(_: number): this;\n hierarchyRankSeparation(): number;\n hierarchyRankSeparation(_: number): this;\n hierarchyDigraph(): boolean;\n hierarchyDigraph(_: boolean): this;\n\n forceDirectedLinkDistance(): number;\n forceDirectedLinkDistance(_: number): this;\n forceDirectedLinkStrength(): number;\n forceDirectedLinkStrength(_: number): this;\n forceDirectedFriction(): number;\n forceDirectedFriction(_: number): this;\n forceDirectedCharge(): number;\n forceDirectedCharge(_: number): this;\n forceDirectedChargeDistance(): number;\n forceDirectedChargeDistance(_: number): this;\n forceDirectedTheta(): number;\n forceDirectedTheta(_: number): this;\n forceDirectedGravity(): number;\n forceDirectedGravity(_: number): this;\n}\n\nGraph.prototype.publish(\"allowDragging\", true, \"boolean\", \"Allow Dragging of Vertices\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"dragSingleNeighbors\", false, \"boolean\", \"Dragging a Vertex also moves its singleton neighbors\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"layout\", \"Circle\", \"set\", \"Default Layout\", [\"Circle\", \"ForceDirected\", \"ForceDirected2\", \"Hierarchy\", \"None\"], { tags: [\"Basic\"] });\nGraph.prototype.publish(\"scale\", \"100%\", \"set\", \"Zoom Level\", [\"all\", \"width\", \"selection\", \"100%\", \"90%\", \"75%\", \"50%\", \"25%\", \"10%\"], { tags: [\"Basic\"] });\nGraph.prototype.publish(\"applyScaleOnLayout\", false, \"boolean\", \"Shrink to fit on Layout\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"highlightOnMouseOverVertex\", false, \"boolean\", \"Highlight Vertex on Mouse Over\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"highlightOnMouseOverEdge\", false, \"boolean\", \"Highlight Edge on Mouse Over\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"transitionDuration\", 250, \"number\", \"Transition Duration\", null, { tags: [\"Intermediate\"] });\nGraph.prototype.publish(\"showEdges\", true, \"boolean\", \"Show Edges\", null, { tags: [\"Intermediate\"] });\nGraph.prototype.publish(\"snapToGrid\", 0, \"number\", \"Snap to Grid\", null, { tags: [\"Private\"] });\nGraph.prototype.publish(\"selectionClearOnBackgroundClick\", false, \"boolean\", \"Clear selection on background click\");\n\nGraph.prototype.publish(\"centroidColor\", \"#00A000\", \"html-color\", \"Centroid Color\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"highlightSelectedPathToCentroid\", false, \"boolean\", \"Highlight path to Center Vertex (for selected vertices)\", null, { tags: [\"Basic\"] });\n\nGraph.prototype.publish(\"hierarchyRankDirection\", \"TB\", \"set\", \"Direction for Rank Nodes\", [\"TB\", \"BT\", \"LR\", \"RL\"], { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyNodeSeparation\", 50, \"number\", \"Number of pixels that separate nodes horizontally in the layout\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyEdgeSeparation\", 10, \"number\", \"Number of pixels that separate edges horizontally in the layout\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyRankSeparation\", 50, \"number\", \"Number of pixels between each rank in the layout\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyDigraph\", true, \"boolean\", \"Directional Graph\", null, { tags: [\"Advanced\"] });\n\nGraph.prototype.publish(\"forceDirectedLinkDistance\", 300, \"number\", \"Target distance between linked nodes\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedLinkStrength\", 1, \"number\", \"Strength (rigidity) of links\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedFriction\", 0.9, \"number\", \"Friction coefficient\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedCharge\", -25, \"number\", \"Charge strength \", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedChargeDistance\", 10000, \"number\", \"Maximum distance over which charge forces are applied\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedTheta\", 0.8, \"number\", \"Barnes–Hut approximation criterion\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedGravity\", 0.1, \"number\", \"Gravitational strength\", null, { tags: [\"Advanced\"] });\n\nconst _origScale = Graph.prototype.scale;\nGraph.prototype.scale = function (_?, transitionDuration?) {\n const retVal = _origScale.apply(this, arguments);\n if (arguments.length) {\n this.zoomTo(_, transitionDuration);\n }\n return retVal;\n};\n","import { PropertyExt } from \"@hpcc-js/common\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Edge } from \"./Edge\";\nimport { Graph, IGraphData } from \"./Graph\";\nimport { IAnnotation, Vertex } from \"./Vertex\";\n\ninterface IAnnotationIndexes {\n iconCol: number;\n iconFillCol: number;\n tooltipCol: number;\n shapeStrokeCol: number;\n shapeFillCol: number;\n}\n\nexport class Annotation extends PropertyExt {\n protected _owner: AdjacencyGraph;\n\n owner(): AdjacencyGraph;\n owner(_: AdjacencyGraph): this;\n owner(_?: AdjacencyGraph): AdjacencyGraph | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.iconColumn();\n }\n\n indexes(): IAnnotationIndexes {\n const columns = this._owner.columns();\n return {\n iconCol: columns.indexOf(this.iconColumn()),\n iconFillCol: columns.indexOf(this.iconFillColumn()),\n tooltipCol: columns.indexOf(this.tooltipColumn()),\n shapeStrokeCol: columns.indexOf(this.shapeStrokeColumn()),\n shapeFillCol: columns.indexOf(this.shapeFillColumn())\n };\n }\n\n mapper(): (row) => IAnnotation {\n const indexes = this.indexes();\n return (row) => ({\n faChar: row[indexes.iconCol],\n tooltip: row[indexes.tooltipCol],\n shape_colorFill: row[indexes.shapeFillCol] || this.shapeFillDefault(),\n shape_colorStroke: row[indexes.shapeStrokeCol] || this.shapeStrokeDefault(),\n image_colorFill: row[indexes.iconFillCol] || this.iconFillDefault()\n });\n }\n}\nAnnotation.prototype._class += \" graph_Annotation\";\nexport interface Annotation {\n iconColumn(): string;\n iconColumn(_: string): this;\n iconFillDefault(): string;\n iconFillDefault(_: string): this;\n iconFillColumn(): string;\n iconFillColumn(_: string): this;\n tooltipColumn(): string;\n tooltipColumn(_: string): this;\n shapeStrokeDefault(): string;\n shapeStrokeDefault(_: string): this;\n shapeStrokeColumn(): string;\n shapeStrokeColumn(_: string): this;\n shapeFillDefault(): string;\n shapeFillDefault(_: string): this;\n shapeFillColumn(): string;\n shapeFillColumn(_: string): this;\n}\nAnnotation.prototype.publish(\"iconColumn\", \"\", \"set\", \"Icon column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"iconFillDefault\", \"white\", \"html-color\", \"Icon fill default color\");\nAnnotation.prototype.publish(\"iconFillColumn\", \"\", \"set\", \"Icon fill color column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"tooltipColumn\", \"\", \"set\", \"Tooltip column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"shapeStrokeDefault\", \"darkred\", \"html-color\", \"Shape stroke default color\");\nAnnotation.prototype.publish(\"shapeStrokeColumn\", \"\", \"set\", \"Shape stroke color column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"shapeFillDefault\", \"red\", \"html-color\", \"Shape fill default color\");\nAnnotation.prototype.publish(\"shapeFillColumn\", \"\", \"set\", \"Shape fill color column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\n\nexport class AdjacencyGraph extends Graph {\n\n private _vertexMap: { [key: string]: Vertex } = {};\n private _edgeMap: { [key: string]: Edge } = {};\n private _prevAdjacencyDataHash: string;\n private _merge: boolean = false;\n private _adjacencyData: object[] = [];\n\n constructor() {\n super();\n }\n\n linksColumns(): string[] {\n const linksCol: number = this.columns().indexOf(this.linksColumn());\n const linksField = this._db.field(linksCol);\n if (linksField) {\n return linksField.children().map(field => field.label());\n }\n return [];\n }\n\n validAnnotations() {\n return this.annotations().filter(a => a.valid());\n }\n\n updateData() {\n const prevAdjacencyDataHash = hashSum([this._adjacencyData, this.uidColumn(), this.labelColumn(), this.iconColumn(), this.linksColumn(), this.linkUidColumn(), this.linkLabelColumn(), this.validAnnotations().map(a => a.hashSum())]);\n if (this._prevAdjacencyDataHash !== prevAdjacencyDataHash) {\n this._prevAdjacencyDataHash = prevAdjacencyDataHash;\n\n const columns = this.columns();\n const uidCol: number = columns.indexOf(this.uidColumn());\n const labelCol: number = columns.indexOf(this.labelColumn());\n const iconCol: number = columns.indexOf(this.iconColumn());\n const linksCol: number = columns.indexOf(this.linksColumn());\n\n const linksColumns = this.linksColumns();\n const linksUidCol: number = linksColumns.indexOf(this.linkUidColumn());\n const linksLabelCol: number = linksColumns.indexOf(this.linkLabelColumn());\n\n const annotationMappers = this.validAnnotations().map(a => a.mapper());\n\n const vertexMap: { [key: string]: Vertex } = {};\n const edgeMap: { [key: string]: Edge } = {};\n const graphData: IGraphData = {\n vertices: this._adjacencyData.map(row => {\n const uid = row[uidCol];\n if (uid !== undefined) {\n let retVal = vertexMap[uid] || this._vertexMap[uid];\n if (!retVal) {\n retVal = new Vertex();\n }\n vertexMap[uid] = retVal;\n\n retVal\n .text(row[labelCol])\n .data(row)\n .faChar(row[iconCol])\n .annotationIcons(annotationMappers.map(am => am(row)))\n ;\n\n return retVal;\n }\n }).filter(v => !!v),\n edges: []\n };\n for (const row of this._adjacencyData) {\n const uid = row[uidCol];\n const links = row[linksCol];\n if (uid !== undefined && links !== undefined) {\n for (const childRow of links) {\n const linkUid = childRow[linksUidCol];\n const linkLabel = childRow[linksLabelCol];\n const edgeID = `${uid}->${linkUid}`;\n let retVal = edgeMap[edgeID] || this._edgeMap[edgeID];\n if (!retVal) {\n if (vertexMap[uid] && vertexMap[linkUid]) {\n retVal = new Edge()\n .sourceVertex(vertexMap[uid])\n .targetVertex(vertexMap[linkUid])\n .data(childRow)\n ;\n } else {\n console.log(\"Missing vertices for edge: \" + edgeID);\n }\n }\n if (retVal) {\n retVal.text(linkLabel);\n edgeMap[edgeID] = retVal;\n graphData.edges.push(retVal);\n }\n }\n }\n }\n this._vertexMap = vertexMap;\n this._edgeMap = edgeMap;\n super.data(graphData, this._merge);\n }\n }\n\n data(): IGraphData;\n data(_: IGraphData, merge?: boolean): this;\n data(_?: IGraphData | object[], merge?: boolean): IGraphData | object[] | this {\n if (!arguments.length) return this._adjacencyData;\n if (_ instanceof Array) {\n this._merge = merge;\n this._adjacencyData = _;\n return this;\n }\n throw new Error(\"Invalid data shape.\");\n }\n\n update(domNode, element) {\n this.updateData();\n super.update(domNode, element);\n }\n\n click(row, col, sel) {\n console.log(\"click\");\n }\n}\nAdjacencyGraph.prototype._class += \" graph_AdjacencyGraph\";\n\nexport interface AdjacencyGraph {\n uidColumn(): string;\n uidColumn(_: string): this;\n labelColumn(): string;\n labelColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n linksColumn(): string;\n linksColumn(_: string): this;\n linkUidColumn(): string;\n linkUidColumn(_: string): this;\n linkLabelColumn(): string;\n linkLabelColumn(_: string): this;\n annotations(): Annotation[];\n annotations(_: Annotation[]): this;\n}\nAdjacencyGraph.prototype.publish(\"uidColumn\", \"\", \"set\", \"UID column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"labelColumn\", \"\", \"set\", \"Label column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"iconColumn\", \"\", \"set\", \"Icon column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"linksColumn\", \"\", \"set\", \"Links column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"linkUidColumn\", \"\", \"set\", \"Link UID column\", function (this: AdjacencyGraph) { return this.linksColumns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"linkLabelColumn\", \"\", \"set\", \"Link Label column\", function (this: AdjacencyGraph) { return this.linksColumns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"annotations\", [], \"propertyArray\", \"Annotations\", null, { autoExpand: Annotation });\n","import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n","export default function constant(x) {\n return function() {\n return x;\n };\n}\n","import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n","import {linkHorizontal} from \"d3-shape\";\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nexport default function() {\n return linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n}\n","import { Palette, PropertyExt, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { max as d3Max, mean as d3Mean, median as d3Median, min as d3Min, sum as d3Sum } from \"d3-array\";\nimport { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from \"d3-sankey\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Sankey.css\";\n\nconst d3Aggr = {\n mean: d3Mean,\n median: d3Median,\n min: d3Min,\n max: d3Max,\n sum: d3Sum\n};\n\nexport class SankeyColumn extends PropertyExt {\n _owner: Sankey;\n\n constructor() {\n super();\n }\n\n owner(): Sankey;\n owner(_: Sankey): this;\n owner(_?: Sankey): Sankey | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.column();\n }\n\n aggregate(values) {\n switch (this.aggrType()) {\n case null:\n case undefined:\n case \"\":\n return values.length;\n default:\n const columns = this._owner.columns();\n const colIdx = columns.indexOf(this.aggrColumn());\n return d3Aggr[this.aggrType()](values, function (value) {\n return +value[colIdx];\n });\n }\n }\n\n column: { (): string; (_: string): SankeyColumn; };\n aggrType: { (): string; (_: string): SankeyColumn; };\n aggrColumn: { (): string; (_: string): SankeyColumn; };\n\n}\nSankeyColumn.prototype._class += \" graph_Sankey.SankeyColumn\";\n\nSankeyColumn.prototype.publish(\"column\", null, \"set\", \"Field\", function () { return this._owner ? this._owner.columns() : []; }, { optional: true });\nSankeyColumn.prototype.publish(\"aggrType\", null, \"set\", \"Aggregation Type\", [null, \"mean\", \"median\", \"sum\", \"min\", \"max\"], { optional: true, disable: w => !w._owner || w._owner.mappings().indexOf(w) === 0 });\nSankeyColumn.prototype.publish(\"aggrColumn\", null, \"set\", \"Aggregation Field\", function () { return this._owner ? this._owner.columns() : []; }, { optional: true, disable: w => !w._owner || !w.aggrType() || w._owner.mappings().indexOf(w) === 0 });\n\nexport class Sankey extends SVGWidget {\n Column;\n _palette;\n _d3Sankey;\n _d3SankeyPath;\n _selection;\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this);\n this._drawStartPos = \"origin\";\n }\n\n sankeyData() {\n const retVal = {\n vertices: [],\n edges: []\n };\n if (this.data().length === 0) return retVal;\n const vertexIndex = {};\n const valueIdx = 2;\n const mappings = this.mappings().filter(mapping => mapping.valid());\n mappings.forEach(function (mapping, idx) {\n const view = this._db.rollupView([mapping.column()]);\n view.entries().forEach(function (row) {\n const id = mapping.column() + \":\" + idx + \":\" + row.key;\n if (!vertexIndex[id]) {\n retVal.vertices.push({\n __id: id,\n __category: mapping.column(),\n name: row.key,\n origRow: row.value,\n value: row.value[idx][valueIdx]\n });\n vertexIndex[id] = retVal.vertices.length - 1;\n }\n }, this);\n }, this);\n mappings.forEach(function (mapping, idx) {\n if (idx < mappings.length - 1) {\n const mapping2 = mappings[idx + 1];\n const view = this._db.rollupView([mapping.column(), mapping2.column()]);\n view.entries().forEach(function (row) {\n const sourceID = mapping.column() + \":\" + idx + \":\" + row.key;\n row.values.forEach(function (value) {\n const targetID = mapping2.column() + \":\" + (idx + 1) + \":\" + value.key;\n retVal.edges.push({\n __id: sourceID + \"_\" + targetID,\n source: vertexIndex[sourceID],\n target: vertexIndex[targetID],\n value: value.value[0][valueIdx]\n });\n });\n });\n }\n }, this);\n\n return retVal;\n }\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._d3Sankey = new d3Sankey();\n this._selection.widgetElement(element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._palette = this._palette.switch(this.paletteID());\n\n const strokeWidth = this.vertexStrokeWidth();\n\n const sankeyData = this.sankeyData();\n const sw2 = strokeWidth * 2;\n this._d3Sankey\n .extent([\n [strokeWidth, strokeWidth],\n [this.width() - sw2, this.height() - sw2]\n ])\n .nodeWidth(this.vertexWidth())\n .nodePadding(this.vertexPadding())\n ;\n this._d3Sankey({\n nodes: sankeyData.vertices,\n links: sankeyData.edges\n });\n const context = this;\n\n // Links ---\n const link = element.selectAll(\".link\").data(sankeyData.edges);\n link.enter().append(\"path\")\n .attr(\"class\", \"link\")\n .each(function () {\n d3Select(this)\n .append(\"title\")\n ;\n })\n .merge(link)\n .attr(\"d\", d3SankeyLinkHorizontal())\n .style(\"stroke-width\", function (d) {\n return Math.max(1, d.width);\n })\n .sort(function (a, b) { return b.width - a.width; })\n .select(\"title\")\n .text(function (d) {\n return d.source.name + \" → \" + d.target.name + \"\\n\" + d.value;\n })\n ;\n link.exit().remove();\n // Nodes ---\n const node = element.selectAll(\".node\").data(sankeyData.vertices);\n node.enter().append(\"g\")\n .attr(\"class\", \"node\")\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.origRow[0]), \"\", context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.origRow[0]), \"\", context._selection.selected(this));\n })\n .each(function () {\n const gElement = d3Select(this);\n gElement.append(\"rect\");\n gElement.append(\"text\");\n })\n /*\n .call(d3.behavior.drag()\n .origin(function (d) { return d; })\n .on(\"dragstart\", function () {\n this.parentNode.appendChild(this);\n })\n .on(\"drag\", dragmove)\n )\n */\n .merge(node)\n .attr(\"transform\", function (d) {\n let _x = 0;\n let _y = 0;\n if(d.x0)_x=d.x0;\n if(d.y0)_y=d.y0;\n return \"translate(\" + (_x+strokeWidth) + \",\" + (_y+strokeWidth) + \")\";\n })\n .each(function () {\n const n = d3Select(this);\n n.select(\"rect\")\n .attr(\"height\", function (d: any) { return d.y1 - d.y0; })\n .attr(\"width\", context._d3Sankey.nodeWidth())\n .style(\"fill\", function (d: any) { return context._palette(d.name); })\n .style(\"stroke\", function (d: any) { return context.vertexStrokeColor(); })\n .style(\"stroke-width\", function (d: any) { return strokeWidth; })\n .style(\"cursor\", (context.xAxisMovement() || context.yAxisMovement()) ? null : \"default\")\n ;\n n.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d: any) {\n return (d.y1 - d.y0)/2;\n })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d: any) { return d.name; })\n .filter(function (d: any) { return d.x0 < context.width() / 2; })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n });\n node.exit().remove();\n\n /*\n function dragmove(d) {\n var gElement = d3.select(this);\n if (context.xAxisMovement()) {\n d.x = Math.max(0, Math.min(context.width() - d.dx, d3.event.x));\n }\n if (context.yAxisMovement()) {\n d.y = Math.max(0, Math.min(context.height() - d.dy, d3.event.y));\n }\n gElement.attr(\"transform\", \"translate(\" + d.x + \",\" + d.y + \")\");\n context._d3Sankey.relayout();\n link.attr(\"d\", context._d3SankeyPath);\n\n gElement.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d) { return d.dy / 2; })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d) { return d.name; })\n .filter(function (d) { return d.x < context.width() / 2; })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n }\n */\n }\n\n paletteID: { (): string; (_: string): Sankey; };\n mappings: { (): SankeyColumn[]; (_: SankeyColumn[]): Sankey; };\n vertexStrokeWidth: { (): number; (_: number): Sankey; };\n vertexStrokeColor: { (): string; (_: string): Sankey; };\n vertexWidth: { (): number; (_: number): Sankey; };\n vertexPadding: { (): number; (_: number): Sankey; };\n xAxisMovement: { (): boolean; (_: boolean): Sankey; };\n yAxisMovement: { (): boolean; (_: boolean): Sankey; };\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n // Events ---\n click(row, column, selected) {\n console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n\n dblclick(row, column, selected) {\n console.log(\"Double Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n}\nSankey.prototype._class += \" graph_Sankey\";\nSankey.prototype.Column = SankeyColumn;\nSankey.prototype.mixin(Utility.SimpleSelectionMixin);\n\nSankey.prototype._palette = Palette.ordinal(\"default\");\n\nSankey.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Sankey.prototype._palette.switch());\nSankey.prototype.publish(\"mappings\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: SankeyColumn });\nSankey.prototype.publish(\"vertexStrokeWidth\", 1, \"number\", \"Vertex Stroke Width\");\nSankey.prototype.publish(\"vertexStrokeColor\", \"darkgray\", \"string\", \"Vertex Stroke Color\");\nSankey.prototype.publish(\"vertexWidth\", 36, \"number\", \"Vertex Width\");\nSankey.prototype.publish(\"vertexPadding\", 40, \"number\", \"Vertex Padding\");\nSankey.prototype.publish(\"xAxisMovement\", false, \"boolean\", \"Enable x-axis movement\");\nSankey.prototype.publish(\"yAxisMovement\", false, \"boolean\", \"Enable y-axis movement\");\n","import { Graph2 as GraphCollection } from \"@hpcc-js/util\";\nimport { curveBasis as d3CurveBasis, curveCardinal as d3CurveCardinal, line as d3Line } from \"d3-shape\";\nimport { EdgePlaceholder, SubgraphPlaceholder, VertexPlaceholder } from \"./placeholders\";\nimport { EdgeLayout } from \"./tree\";\n\nexport type Point = [number, number];\n\nconst lineBasis = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveBasis)\n ;\n\nconst lineCardinal = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveCardinal)\n ;\n\nexport interface ILayout {\n start(): Promise<this>;\n stop(): this;\n running(): boolean;\n\n edgePath(e: EdgePlaceholder, curveDepth: number): EdgeLayout;\n}\n\nexport type Size = { width: number, height: number };\nexport interface IGraph {\n size(): Size;\n graphData(): GraphCollection<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>;\n\n project(pos: number, clip: boolean);\n projectPlacholder(vp: VertexPlaceholder);\n\n moveSubgraphs(transition: boolean): this;\n\n moveVertexPlaceholder(vp: VertexPlaceholder, transition: boolean, moveEdges: boolean): this;\n moveVertices(transition: boolean): this;\n\n moveEdgePlaceholder(ep: EdgePlaceholder, transition: boolean): this;\n moveEdges(transition: boolean): this;\n\n progress(what: \"start\" | \"stop\" | \"layout-start\" | \"layout-tick\" | \"layout-stop\");\n}\n\nexport class Layout implements ILayout {\n\n protected _graph: IGraph;\n protected _running = false;\n\n constructor(graph: IGraph) {\n this._graph = graph;\n }\n\n start(): Promise<this> {\n this._running = true;\n this._graph.progress(\"layout-start\");\n return Promise.resolve(this);\n }\n\n stop() {\n this._running = false;\n this._graph.progress(\"layout-stop\");\n return this;\n }\n\n running(): boolean {\n return this._running;\n }\n\n protected center(points: Point[]): Point {\n if (points.length % 2 === 1) {\n return points[Math.floor(points.length / 2)];\n }\n const p1 = points[points.length / 2 - 1];\n const p2 = points[points.length / 2];\n return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2];\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } {\n const sPos = this._graph.projectPlacholder(ep.source);\n const tPos = this._graph.projectPlacholder(ep.target);\n const points: Point[] = [[sPos.x, sPos.y], [tPos.x, tPos.y]];\n\n if (curveDepth) {\n const dx = points[0][0] - points[1][0];\n const dy = points[0][1] - points[1][1];\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist) {\n const midX = (points[0][0] + points[1][0]) / 2 - dy * curveDepth / 100;\n const midY = (points[0][1] + points[1][1]) / 2 + dx * curveDepth / 100;\n return {\n path: lineCardinal([points[0], [midX, midY], points[1]]),\n labelPos: [midX, midY]\n };\n }\n }\n\n return {\n path: lineBasis(points),\n labelPos: this.center(points)\n };\n }\n}\n","import { Layout } from \"./layout\";\n\nconst rads = (degrees: number) => degrees * Math.PI / 180;\nconst radius = (vertexCount: number, sideLength: number) => sideLength / (2 * Math.sin(rads(180 / vertexCount)));\n\nexport class Circle extends Layout {\n\n constructor(graph, readonly sideLength = 60) {\n super(graph);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const size = this._graph.size();\n const data = this._graph.graphData();\n const vertices = data.allVertices();\n const edges = data.allEdges();\n edges.forEach(e => delete e.points);\n\n const r = radius(vertices.length, this.sideLength);\n const angle = 360 / vertices.length;\n vertices.forEach((v, i) => {\n delete v.fx;\n delete v.fy;\n v.x = size.width / 2 + Math.cos(rads(i * angle)) * r;\n v.y = size.height / 2 + Math.sin(rads(i * angle)) * r;\n });\n this._graph\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n this._running = false;\n return this;\n });\n }\n}\n","import { curveBasis as d3CurveBasis, line as d3Line } from \"d3-shape\";\nimport { dagre, Options } from \"./dagreWorker\";\nimport { Layout, Point } from \"./layout\";\nimport { EdgePlaceholder } from \"./placeholders\";\n\nconst lineBasis = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveBasis)\n ;\n\nconst clusterID = (id: string) => `cluster_${id}`;\nconst rClusterID = (id: string) => id.substring(8);\n\nfunction distance(x1, y1, x2, y2) {\n const a = x1 - x2;\n const b = y1 - y2;\n return Math.sqrt(a * a + b * b);\n}\n\nexport class Dagre extends Layout {\n\n constructor(graph, readonly _options: Options) {\n super(graph);\n }\n\n start() {\n super.start();\n const size = this._graph.size();\n const data = this._graph.graphData();\n\n return dagre({\n subgraphs: data.allSubgraphs().map(s => ({\n ...s.props,\n id: clusterID(s.id)\n })),\n nodes: data.allVertices().map(v => {\n delete v.fx;\n delete v.fy;\n const bbox = v.element.node().getBBox();\n return {\n width: bbox.width,\n height: bbox.height,\n ...v.props\n };\n }),\n links: data.allEdges().map(e => e.props),\n hierarchy: [\n ...data.allSubgraphs()\n .filter(s => !!data.subgraphParent(s.id))\n .map(s => ({\n parent: clusterID(data.subgraphParent(s.id).props.id),\n child: clusterID(s.id)\n })),\n ...data.allVertices()\n .filter(v => data.vertexParent(v.id) !== undefined)\n .map(v => ({\n parent: clusterID(data.vertexParent(v.id).props.id),\n child: v.id\n }))\n ]\n }, this._options).response.then((response: any) => {\n if (this.running()) {\n response.subgraphs.forEach(n => {\n const sg = data.subgraph(rClusterID(n.id));\n sg.x = n.x + size.width / 2;\n sg.y = n.y + size.height / 2;\n sg.props.width = n.width;\n sg.props.height = n.height;\n });\n response.nodes.forEach(n => {\n const v = data.vertex(n.id);\n v.x = n.x + size.width / 2;\n v.y = n.y + size.height / 2;\n });\n response.links.forEach(l => {\n const e = data.edge(l.id);\n const sourceDist = distance(e.source.x, e.source.y, l.points[0][0] + size.width / 2, l.points[0][1] + size.height / 2);\n const targetDist = distance(e.target.x, e.target.y, l.points[0][0] + size.width / 2, l.points[0][1] + size.height / 2);\n e.points = [\n sourceDist < targetDist ? [e.source.x, e.source.y] : [e.target.x, e.target.y],\n ...l.points.map(p => [p[0] + size.width / 2, p[1] + size.height / 2]),\n sourceDist < targetDist ? [e.target.x, e.target.y] : [e.source.x, e.source.y]\n ];\n });\n this._graph\n .moveVertices(true)\n .moveSubgraphs(true)\n .moveEdges(true)\n ;\n this.stop();\n }\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } {\n let points = [];\n let hasNaN = false;\n if (ep.points) {\n points = ep.points.map(p => {\n const x = this._graph.project(p[0], false);\n const y = this._graph.project(p[1], false);\n if (isNaN(x) || isNaN(y)) {\n hasNaN = true;\n }\n return [x, y];\n });\n }\n if (hasNaN || points.length < 2) {\n return super.edgePath(ep, curveDepth);\n }\n return {\n path: lineBasis(points),\n labelPos: this.center(points)\n };\n }\n\n}\n","export interface Subgraph {\n id: string;\n text: string;\n}\n\nexport interface Node {\n id: string;\n text: string;\n}\n\nexport interface Link {\n id: string;\n source: Node;\n target: Node;\n}\n\nexport interface Hierarchy {\n parent: string;\n child: string;\n}\n\nexport interface Data {\n subgraphs: Subgraph[];\n nodes: Node[];\n links: Link[];\n hierarchy: Hierarchy[];\n}\n\nexport interface Options {\n rankdir: \"TB\" | \"BT\" | \"LR\" | \"RL\";\n nodesep: number;\n edgesep: number;\n ranksep: number;\n digraph: boolean;\n}\n\nexport function dagre(data: Data, options: Options) {\n // eslint-disable-next-line quotes\n const workerCode = `!function(){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function t(e){throw new Error('Could not dynamically require \"'+e+'\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var n={exports:{}};n.exports=function(){function e(n,r,o){function i(s,u){if(!r[s]){if(!n[s]){if(!u&&t)return t(s);if(a)return a(s,!0);var c=new Error(\"Cannot find module '\"+s+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var f=r[s]={exports:{}};n[s][0].call(f.exports,(function(e){return i(n[s][1][e]||e)}),f,f.exports,e,n,r,o)}return r[s].exports}for(var a=t,s=0;s<o.length;s++)i(o[s]);return i}return e}()({1:[function(e,t,n){t.exports={graphlib:e(\"./lib/graphlib\"),layout:e(\"./lib/layout\"),debug:e(\"./lib/debug\"),util:{time:e(\"./lib/util\").time,notime:e(\"./lib/util\").notime},version:e(\"./lib/version\")}},{\"./lib/debug\":6,\"./lib/graphlib\":7,\"./lib/layout\":9,\"./lib/util\":29,\"./lib/version\":30}],2:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./greedy-fas\");function i(e){var t=\"greedy\"===e.graph().acyclicer?o(e,n(e)):a(e);function n(e){return function(t){return e.edge(t).weight}}r.forEach(t,(function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.uniqueId(\"rev\"))}))}function a(e){var t=[],n={},o={};function i(a){r.has(o,a)||(o[a]=!0,n[a]=!0,r.forEach(e.outEdges(a),(function(e){r.has(n,e.w)?t.push(e):i(e.w)})),delete n[a])}return r.forEach(e.nodes(),i),t}function s(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}}))}t.exports={run:i,undo:s}},{\"./greedy-fas\":8,\"./lodash\":10}],3:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\");function i(e){function t(n){var o=e.children(n),i=e.node(n);if(o.length&&r.forEach(o,t),r.has(i,\"minRank\")){i.borderLeft=[],i.borderRight=[];for(var s=i.minRank,u=i.maxRank+1;s<u;++s)a(e,\"borderLeft\",\"_bl\",n,i,s),a(e,\"borderRight\",\"_br\",n,i,s)}}r.forEach(e.children(),t)}function a(e,t,n,r,i,a){var s={width:0,height:0,rank:a,borderType:t},u=i[t][a-1],c=o.addDummyNode(e,\"border\",s,n);i[t][a]=c,e.setParent(c,r),u&&e.setEdge(u,c,{weight:1})}t.exports=i},{\"./lodash\":10,\"./util\":29}],4:[function(e,t,n){var r=e(\"./lodash\");function o(e){var t=e.graph().rankdir.toLowerCase();\"lr\"!==t&&\"rl\"!==t||a(e)}function i(e){var t=e.graph().rankdir.toLowerCase();\"bt\"!==t&&\"rl\"!==t||u(e),\"lr\"!==t&&\"rl\"!==t||(f(e),a(e))}function a(e){r.forEach(e.nodes(),(function(t){s(e.node(t))})),r.forEach(e.edges(),(function(t){s(e.edge(t))}))}function s(e){var t=e.width;e.width=e.height,e.height=t}function u(e){r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,c),r.has(n,\"y\")&&c(n)}))}function c(e){e.y=-e.y}function f(e){r.forEach(e.nodes(),(function(t){d(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,d),r.has(n,\"x\")&&d(n)}))}function d(e){var t=e.x;e.x=e.y,e.y=t}t.exports={adjust:o,undo:i}},{\"./lodash\":10}],5:[function(e,t,n){function r(){var e={};e._next=e._prev=e,this._sentinel=e}function o(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function i(e,t){if(\"_next\"!==e&&\"_prev\"!==e)return t}t.exports=r,r.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return o(t),t},r.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&o(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},r.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,i)),n=n._prev;return\"[\"+e.join(\", \")+\"]\"}},{}],6:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\"),i=e(\"./graphlib\").Graph;function a(e){var t=o.buildLayerMatrix(e),n=new i({compound:!0,multigraph:!0}).setGraph({});return r.forEach(e.nodes(),(function(t){n.setNode(t,{label:t}),n.setParent(t,\"layer\"+e.node(t).rank)})),r.forEach(e.edges(),(function(e){n.setEdge(e.v,e.w,{},e.name)})),r.forEach(t,(function(e,t){var o=\"layer\"+t;n.setNode(o,{rank:\"same\"}),r.reduce(e,(function(e,t){return n.setEdge(e,t,{style:\"invis\"}),t}))})),n}t.exports={debugOrdering:a}},{\"./graphlib\":7,\"./lodash\":10,\"./util\":29}],7:[function(e,t,n){var r;if(\"function\"==typeof e)try{r=e(\"graphlib\")}catch(e){}r||(r=window.graphlib),t.exports=r},{graphlib:31}],8:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./graphlib\").Graph,i=e(\"./data/list\");t.exports=s;var a=r.constant(1);function s(e,t){if(e.nodeCount()<=1)return[];var n=f(e,t||a),o=u(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(o,(function(t){return e.outEdges(t.v,t.w)})),!0)}function u(e,t,n){for(var r,o=[],i=t[t.length-1],a=t[0];e.nodeCount();){for(;r=a.dequeue();)c(e,t,n,r);for(;r=i.dequeue();)c(e,t,n,r);if(e.nodeCount())for(var s=t.length-2;s>0;--s)if(r=t[s].dequeue()){o=o.concat(c(e,t,n,r,!0));break}}return o}function c(e,t,n,o,i){var a=i?[]:void 0;return r.forEach(e.inEdges(o.v),(function(r){var o=e.edge(r),s=e.node(r.v);i&&a.push({v:r.v,w:r.w}),s.out-=o,d(t,n,s)})),r.forEach(e.outEdges(o.v),(function(r){var o=e.edge(r),i=r.w,a=e.node(i);a.in-=o,d(t,n,a)})),e.removeNode(o.v),a}function f(e,t){var n=new o,a=0,s=0;r.forEach(e.nodes(),(function(e){n.setNode(e,{v:e,in:0,out:0})})),r.forEach(e.edges(),(function(e){var r=n.edge(e.v,e.w)||0,o=t(e),i=r+o;n.setEdge(e.v,e.w,i),s=Math.max(s,n.node(e.v).out+=o),a=Math.max(a,n.node(e.w).in+=o)}));var u=r.range(s+a+3).map((function(){return new i})),c=a+1;return r.forEach(n.nodes(),(function(e){d(u,c,n.node(e))})),{graph:n,buckets:u,zeroIdx:c}}function d(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},{\"./data/list\":5,\"./graphlib\":7,\"./lodash\":10}],9:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./acyclic\"),i=e(\"./normalize\"),a=e(\"./rank\"),s=e(\"./util\").normalizeRanks,u=e(\"./parent-dummy-chains\"),c=e(\"./util\").removeEmptyRanks,f=e(\"./nesting-graph\"),d=e(\"./add-border-segments\"),h=e(\"./coordinate-system\"),l=e(\"./order\"),p=e(\"./position\"),v=e(\"./util\"),_=e(\"./graphlib\").Graph;function y(e,t){var n=t&&t.debugTiming?v.time:v.notime;n(\"layout\",(function(){var t=n(\" buildLayoutGraph\",(function(){return I(e)}));n(\" runLayout\",(function(){g(t,n)})),n(\" updateInputGraph\",(function(){b(e,t)}))}))}function g(e,t){t(\" makeSpaceForEdgeLabels\",(function(){S(e)})),t(\" removeSelfEdges\",(function(){B(e)})),t(\" acyclic\",(function(){o.run(e)})),t(\" nestingGraph.run\",(function(){f.run(e)})),t(\" rank\",(function(){a(v.asNonCompoundGraph(e))})),t(\" injectEdgeLabelProxies\",(function(){C(e)})),t(\" removeEmptyRanks\",(function(){c(e)})),t(\" nestingGraph.cleanup\",(function(){f.cleanup(e)})),t(\" normalizeRanks\",(function(){s(e)})),t(\" assignRankMinMax\",(function(){N(e)})),t(\" removeEdgeLabelProxies\",(function(){T(e)})),t(\" normalize.run\",(function(){i.run(e)})),t(\" parentDummyChains\",(function(){u(e)})),t(\" addBorderSegments\",(function(){d(e)})),t(\" order\",(function(){l(e)})),t(\" insertSelfEdges\",(function(){G(e)})),t(\" adjustCoordinateSystem\",(function(){h.adjust(e)})),t(\" position\",(function(){p(e)})),t(\" positionSelfEdges\",(function(){R(e)})),t(\" removeBorderNodes\",(function(){D(e)})),t(\" normalize.undo\",(function(){i.undo(e)})),t(\" fixupEdgeLabelCoords\",(function(){P(e)})),t(\" undoCoordinateSystem\",(function(){h.undo(e)})),t(\" translateGraph\",(function(){M(e)})),t(\" assignNodeIntersects\",(function(){L(e)})),t(\" reversePoints\",(function(){F(e)})),t(\" acyclic.undo\",(function(){o.undo(e)}))}function b(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),o=t.node(n);r&&(r.x=o.x,r.y=o.y,t.children(n).length&&(r.width=o.width,r.height=o.height))})),r.forEach(e.edges(),(function(n){var o=e.edge(n),i=t.edge(n);o.points=i.points,r.has(i,\"x\")&&(o.x=i.x,o.y=i.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}t.exports=y;var m=[\"nodesep\",\"edgesep\",\"ranksep\",\"marginx\",\"marginy\"],x={ranksep:50,edgesep:20,nodesep:50,rankdir:\"tb\"},w=[\"acyclicer\",\"ranker\",\"rankdir\",\"align\"],E=[\"width\",\"height\"],j={width:0,height:0},k=[\"minlen\",\"weight\",\"width\",\"height\",\"labeloffset\"],A={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:\"r\"},O=[\"labelpos\"];function I(e){var t=new _({multigraph:!0,compound:!0}),n=z(e.graph());return t.setGraph(r.merge({},x,U(n,m),r.pick(n,w))),r.forEach(e.nodes(),(function(n){var o=z(e.node(n));t.setNode(n,r.defaults(U(o,E),j)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var o=z(e.edge(n));t.setEdge(n,r.merge({},A,U(o,k),r.pick(o,O)))})),t}function S(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,\"c\"!==r.labelpos.toLowerCase()&&(\"TB\"===t.rankdir||\"BT\"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}function C(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),o={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};v.addDummyNode(e,\"edge-proxy\",o,\"_ep\")}}))}function N(e){var t=0;r.forEach(e.nodes(),(function(n){var o=e.node(n);o.borderTop&&(o.minRank=e.node(o.borderTop).rank,o.maxRank=e.node(o.borderBottom).rank,t=r.max(t,o.maxRank))})),e.graph().maxRank=t}function T(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);\"edge-proxy\"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}function M(e){var t=Number.POSITIVE_INFINITY,n=0,o=Number.POSITIVE_INFINITY,i=0,a=e.graph(),s=a.marginx||0,u=a.marginy||0;function c(e){var r=e.x,a=e.y,s=e.width,u=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),o=Math.min(o,a-u/2),i=Math.max(i,a+u/2)}r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,\"x\")&&c(n)})),t-=s,o-=u,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=o})),r.forEach(e.edges(),(function(n){var i=e.edge(n);r.forEach(i.points,(function(e){e.x-=t,e.y-=o})),r.has(i,\"x\")&&(i.x-=t),r.has(i,\"y\")&&(i.y-=o)})),a.width=n-t+s,a.height=i-o+u}function L(e){r.forEach(e.edges(),(function(t){var n,r,o=e.edge(t),i=e.node(t.v),a=e.node(t.w);o.points?(n=o.points[0],r=o.points[o.points.length-1]):(o.points=[],n=a,r=i),o.points.unshift(v.intersectRect(i,n)),o.points.push(v.intersectRect(a,r))}))}function P(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,\"x\"))switch(\"l\"!==n.labelpos&&\"r\"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case\"l\":n.x-=n.width/2+n.labeloffset;break;case\"r\":n.x+=n.width/2+n.labeloffset}}))}function F(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}function D(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),o=e.node(n.borderTop),i=e.node(n.borderBottom),a=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(i.y-o.y),n.x=a.x+n.width/2,n.y=o.y+n.height/2}})),r.forEach(e.nodes(),(function(t){\"border\"===e.node(t).dummy&&e.removeNode(t)}))}function B(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}function G(e){var t=v.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,o){var i=e.node(t);i.order=o+n,r.forEach(i.selfEdges,(function(t){v.addDummyNode(e,\"selfedge\",{width:t.label.width,height:t.label.height,rank:i.rank,order:o+ ++n,e:t.e,label:t.label},\"_se\")})),delete i.selfEdges}))}))}function R(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if(\"selfedge\"===n.dummy){var r=e.node(n.e.v),o=r.x+r.width/2,i=r.y,a=n.x-o,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:o+2*a/3,y:i-s},{x:o+5*a/6,y:i-s},{x:o+a,y:i},{x:o+5*a/6,y:i+s},{x:o+2*a/3,y:i+s}],n.label.x=n.x,n.label.y=n.y}}))}function U(e,t){return r.mapValues(r.pick(e,t),Number)}function z(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},{\"./acyclic\":2,\"./add-border-segments\":3,\"./coordinate-system\":4,\"./graphlib\":7,\"./lodash\":10,\"./nesting-graph\":11,\"./normalize\":12,\"./order\":17,\"./parent-dummy-chains\":22,\"./position\":24,\"./rank\":26,\"./util\":29}],10:[function(e,t,n){var r;if(\"function\"==typeof e)try{r={cloneDeep:e(\"lodash/cloneDeep\"),constant:e(\"lodash/constant\"),defaults:e(\"lodash/defaults\"),each:e(\"lodash/each\"),filter:e(\"lodash/filter\"),find:e(\"lodash/find\"),flatten:e(\"lodash/flatten\"),forEach:e(\"lodash/forEach\"),forIn:e(\"lodash/forIn\"),has:e(\"lodash/has\"),isUndefined:e(\"lodash/isUndefined\"),last:e(\"lodash/last\"),map:e(\"lodash/map\"),mapValues:e(\"lodash/mapValues\"),max:e(\"lodash/max\"),merge:e(\"lodash/merge\"),min:e(\"lodash/min\"),minBy:e(\"lodash/minBy\"),now:e(\"lodash/now\"),pick:e(\"lodash/pick\"),range:e(\"lodash/range\"),reduce:e(\"lodash/reduce\"),sortBy:e(\"lodash/sortBy\"),uniqueId:e(\"lodash/uniqueId\"),values:e(\"lodash/values\"),zipObject:e(\"lodash/zipObject\")}}catch(e){}r||(r=window._),t.exports=r},{\"lodash/cloneDeep\":227,\"lodash/constant\":228,\"lodash/defaults\":229,\"lodash/each\":230,\"lodash/filter\":232,\"lodash/find\":233,\"lodash/flatten\":235,\"lodash/forEach\":236,\"lodash/forIn\":237,\"lodash/has\":239,\"lodash/isUndefined\":258,\"lodash/last\":261,\"lodash/map\":262,\"lodash/mapValues\":263,\"lodash/max\":264,\"lodash/merge\":266,\"lodash/min\":267,\"lodash/minBy\":268,\"lodash/now\":270,\"lodash/pick\":271,\"lodash/range\":273,\"lodash/reduce\":274,\"lodash/sortBy\":276,\"lodash/uniqueId\":286,\"lodash/values\":287,\"lodash/zipObject\":288}],11:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\");function i(e){var t=o.addDummyNode(e,\"root\",{},\"_root\"),n=s(e),i=r.max(r.values(n))-1,c=2*i+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=c}));var f=u(e)+1;r.forEach(e.children(),(function(r){a(e,t,c,f,i,n,r)})),e.graph().nodeRankFactor=c}function a(e,t,n,i,s,u,c){var f=e.children(c);if(f.length){var d=o.addBorderNode(e,\"_bt\"),h=o.addBorderNode(e,\"_bb\"),l=e.node(c);e.setParent(d,c),l.borderTop=d,e.setParent(h,c),l.borderBottom=h,r.forEach(f,(function(r){a(e,t,n,i,s,u,r);var o=e.node(r),f=o.borderTop?o.borderTop:r,l=o.borderBottom?o.borderBottom:r,p=o.borderTop?i:2*i,v=f!==l?1:s-u[c]+1;e.setEdge(d,f,{weight:p,minlen:v,nestingEdge:!0}),e.setEdge(l,h,{weight:p,minlen:v,nestingEdge:!0})})),e.parent(c)||e.setEdge(t,d,{weight:0,minlen:s+u[c]})}else c!==t&&e.setEdge(t,c,{weight:0,minlen:n})}function s(e){var t={};function n(o,i){var a=e.children(o);a&&a.length&&r.forEach(a,(function(e){n(e,i+1)})),t[o]=i}return r.forEach(e.children(),(function(e){n(e,1)})),t}function u(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}function c(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}t.exports={run:i,cleanup:c}},{\"./lodash\":10,\"./util\":29}],12:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\");function i(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){a(e,t)}))}function a(e,t){var n=t.v,r=e.node(n).rank,i=t.w,a=e.node(i).rank,s=t.name,u=e.edge(t),c=u.labelRank;if(a!==r+1){var f,d,h;for(e.removeEdge(t),h=0,++r;r<a;++h,++r)u.points=[],d={width:0,height:0,edgeLabel:u,edgeObj:t,rank:r},f=o.addDummyNode(e,\"edge\",d,\"_d\"),r===c&&(d.width=u.width,d.height=u.height,d.dummy=\"edge-label\",d.labelpos=u.labelpos),e.setEdge(n,f,{weight:u.weight},s),0===h&&e.graph().dummyChains.push(f),n=f;e.setEdge(n,i,{weight:u.weight},s)}}function s(e){r.forEach(e.graph().dummyChains,(function(t){var n,r=e.node(t),o=r.edgeLabel;for(e.setEdge(r.edgeObj,o);r.dummy;)n=e.successors(t)[0],e.removeNode(t),o.points.push({x:r.x,y:r.y}),\"edge-label\"===r.dummy&&(o.x=r.x,o.y=r.y,o.width=r.width,o.height=r.height),t=n,r=e.node(t)}))}t.exports={run:i,undo:s}},{\"./lodash\":10,\"./util\":29}],13:[function(e,t,n){var r=e(\"../lodash\");function o(e,t,n){var o,i={};r.forEach(n,(function(n){for(var r,a,s=e.parent(n);s;){if((r=e.parent(s))?(a=i[r],i[r]=s):(a=o,o=s),a&&a!==s)return void t.setEdge(a,s);s=r}}))}t.exports=o},{\"../lodash\":10}],14:[function(e,t,n){var r=e(\"../lodash\");function o(e,t){return r.map(t,(function(t){var n=e.inEdges(t);if(n.length){var o=r.reduce(n,(function(t,n){var r=e.edge(n),o=e.node(n.v);return{sum:t.sum+r.weight*o.order,weight:t.weight+r.weight}}),{sum:0,weight:0});return{v:t,barycenter:o.sum/o.weight,weight:o.weight}}return{v:t}}))}t.exports=o},{\"../lodash\":10}],15:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graphlib\").Graph;function i(e,t,n){var i=a(e),s=new o({compound:!0}).setGraph({root:i}).setDefaultNodeLabel((function(t){return e.node(t)}));return r.forEach(e.nodes(),(function(o){var a=e.node(o),u=e.parent(o);(a.rank===t||a.minRank<=t&&t<=a.maxRank)&&(s.setNode(o),s.setParent(o,u||i),r.forEach(e[n](o),(function(t){var n=t.v===o?t.w:t.v,i=s.edge(n,o),a=r.isUndefined(i)?0:i.weight;s.setEdge(n,o,{weight:e.edge(t).weight+a})})),r.has(a,\"minRank\")&&s.setNode(o,{borderLeft:a.borderLeft[t],borderRight:a.borderRight[t]}))})),s}function a(e){for(var t;e.hasNode(t=r.uniqueId(\"_root\")););return t}t.exports=i},{\"../graphlib\":7,\"../lodash\":10}],16:[function(e,t,n){var r=e(\"../lodash\");function o(e,t){for(var n=0,r=1;r<t.length;++r)n+=i(e,t[r-1],t[r]);return n}function i(e,t,n){for(var o=r.zipObject(n,r.map(n,(function(e,t){return t}))),i=r.flatten(r.map(t,(function(t){return r.sortBy(r.map(e.outEdges(t),(function(t){return{pos:o[t.w],weight:e.edge(t).weight}})),\"pos\")})),!0),a=1;a<n.length;)a<<=1;var s=2*a-1;a-=1;var u=r.map(new Array(s),(function(){return 0})),c=0;return r.forEach(i.forEach((function(e){var t=e.pos+a;u[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=u[t+1]),u[t=t-1>>1]+=e.weight;c+=e.weight*n}))),c}t.exports=o},{\"../lodash\":10}],17:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./init-order\"),i=e(\"./cross-count\"),a=e(\"./sort-subgraph\"),s=e(\"./build-layer-graph\"),u=e(\"./add-subgraph-constraints\"),c=e(\"../graphlib\").Graph,f=e(\"../util\");function d(e){var t=f.maxRank(e),n=h(e,r.range(1,t+1),\"inEdges\"),a=h(e,r.range(t-1,-1,-1),\"outEdges\"),s=o(e);p(e,s);for(var u,c=Number.POSITIVE_INFINITY,d=0,v=0;v<4;++d,++v){l(d%2?n:a,d%4>=2),s=f.buildLayerMatrix(e);var _=i(e,s);_<c&&(v=0,u=r.cloneDeep(s),c=_)}p(e,u)}function h(e,t,n){return r.map(t,(function(t){return s(e,t,n)}))}function l(e,t){var n=new c;r.forEach(e,(function(e){var o=e.graph().root,i=a(e,o,n,t);r.forEach(i.vs,(function(t,n){e.node(t).order=n})),u(e,n,i.vs)}))}function p(e,t){r.forEach(t,(function(t){r.forEach(t,(function(t,n){e.node(t).order=n}))}))}t.exports=d},{\"../graphlib\":7,\"../lodash\":10,\"../util\":29,\"./add-subgraph-constraints\":13,\"./build-layer-graph\":15,\"./cross-count\":16,\"./init-order\":18,\"./sort-subgraph\":20}],18:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t={},n=r.filter(e.nodes(),(function(t){return!e.children(t).length})),o=r.max(r.map(n,(function(t){return e.node(t).rank}))),i=r.map(r.range(o+1),(function(){return[]}));function a(n){if(!r.has(t,n)){t[n]=!0;var o=e.node(n);i[o.rank].push(n),r.forEach(e.successors(n),a)}}var s=r.sortBy(n,(function(t){return e.node(t).rank}));return r.forEach(s,a),i}t.exports=o},{\"../lodash\":10}],19:[function(e,t,n){var r=e(\"../lodash\");function o(e,t){var n={};return r.forEach(e,(function(e,t){var o=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};r.isUndefined(e.barycenter)||(o.barycenter=e.barycenter,o.weight=e.weight)})),r.forEach(t.edges(),(function(e){var t=n[e.v],o=n[e.w];r.isUndefined(t)||r.isUndefined(o)||(o.indegree++,t.out.push(n[e.w]))})),i(r.filter(n,(function(e){return!e.indegree})))}function i(e){var t=[];function n(e){return function(t){t.merged||(r.isUndefined(t.barycenter)||r.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&a(e,t)}}function o(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var i=e.pop();t.push(i),r.forEach(i.in.reverse(),n(i)),r.forEach(i.out,o(i))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,[\"vs\",\"i\",\"barycenter\",\"weight\"])}))}function a(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}t.exports=o},{\"../lodash\":10}],20:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./barycenter\"),i=e(\"./resolve-conflicts\"),a=e(\"./sort\");function s(e,t,n,f){var d=e.children(t),h=e.node(t),l=h?h.borderLeft:void 0,p=h?h.borderRight:void 0,v={};l&&(d=r.filter(d,(function(e){return e!==l&&e!==p})));var _=o(e,d);r.forEach(_,(function(t){if(e.children(t.v).length){var o=s(e,t.v,n,f);v[t.v]=o,r.has(o,\"barycenter\")&&c(t,o)}}));var y=i(_,n);u(y,v);var g=a(y,f);if(l&&(g.vs=r.flatten([l,g.vs,p],!0),e.predecessors(l).length)){var b=e.node(e.predecessors(l)[0]),m=e.node(e.predecessors(p)[0]);r.has(g,\"barycenter\")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+b.order+m.order)/(g.weight+2),g.weight+=2}return g}function u(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}function c(e,t){r.isUndefined(e.barycenter)?(e.barycenter=t.barycenter,e.weight=t.weight):(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight)}t.exports=s},{\"../lodash\":10,\"./barycenter\":14,\"./resolve-conflicts\":19,\"./sort\":21}],21:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../util\");function i(e,t){var n=o.partition(e,(function(e){return r.has(e,\"barycenter\")})),i=n.lhs,u=r.sortBy(n.rhs,(function(e){return-e.i})),c=[],f=0,d=0,h=0;i.sort(s(!!t)),h=a(c,u,h),r.forEach(i,(function(e){h+=e.vs.length,c.push(e.vs),f+=e.barycenter*e.weight,d+=e.weight,h=a(c,u,h)}));var l={vs:r.flatten(c,!0)};return d&&(l.barycenter=f/d,l.weight=d),l}function a(e,t,n){for(var o;t.length&&(o=r.last(t)).i<=n;)t.pop(),e.push(o.vs),n++;return n}function s(e){return function(t,n){return t.barycenter<n.barycenter?-1:t.barycenter>n.barycenter?1:e?n.i-t.i:t.i-n.i}}t.exports=i},{\"../lodash\":10,\"../util\":29}],22:[function(e,t,n){var r=e(\"./lodash\");function o(e){var t=a(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),o=r.edgeObj,a=i(e,t,o.v,o.w),s=a.path,u=a.lca,c=0,f=s[c],d=!0;n!==o.w;){if(r=e.node(n),d){for(;(f=s[c])!==u&&e.node(f).maxRank<r.rank;)c++;f===u&&(d=!1)}if(!d){for(;c<s.length-1&&e.node(f=s[c+1]).minRank<=r.rank;)c++;f=s[c]}e.setParent(n,f),n=e.successors(n)[0]}}))}function i(e,t,n,r){var o,i,a=[],s=[],u=Math.min(t[n].low,t[r].low),c=Math.max(t[n].lim,t[r].lim);o=n;do{o=e.parent(o),a.push(o)}while(o&&(t[o].low>u||c>t[o].lim));for(i=o,o=r;(o=e.parent(o))!==i;)s.push(o);return{path:a.concat(s.reverse()),lca:i}}function a(e){var t={},n=0;function o(i){var a=n;r.forEach(e.children(i),o),t[i]={low:a,lim:n++}}return r.forEach(e.children(),o),t}t.exports=o},{\"./lodash\":10}],23:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graphlib\").Graph,i=e(\"../util\");function a(e,t){var n={};function o(t,o){var i=0,a=0,s=t.length,f=r.last(o);return r.forEach(o,(function(t,d){var h=u(e,t),l=h?e.node(h).order:s;(h||t===f)&&(r.forEach(o.slice(a,d+1),(function(t){r.forEach(e.predecessors(t),(function(r){var o=e.node(r),a=o.order;!(a<i||l<a)||o.dummy&&e.node(t).dummy||c(n,r,t)}))})),a=d+1,i=l)})),o}return r.reduce(t,o),n}function s(e,t){var n={};function o(t,o,i,a,s){var u;r.forEach(r.range(o,i),(function(o){u=t[o],e.node(u).dummy&&r.forEach(e.predecessors(u),(function(t){var r=e.node(t);r.dummy&&(r.order<a||r.order>s)&&c(n,t,u)}))}))}function i(t,n){var i,a=-1,s=0;return r.forEach(n,(function(r,u){if(\"border\"===e.node(r).dummy){var c=e.predecessors(r);c.length&&(i=e.node(c[0]).order,o(n,s,u,a,i),s=u,a=i)}o(n,s,n.length,i,t.length)})),n}return r.reduce(t,i),n}function u(e,t){if(e.node(t).dummy)return r.find(e.predecessors(t),(function(t){return e.node(t).dummy}))}function c(e,t,n){if(t>n){var r=t;t=n,n=r}var o=e[t];o||(e[t]=o={}),o[n]=!0}function f(e,t,n){if(t>n){var o=t;t=n,n=o}return r.has(e[t],n)}function d(e,t,n,o){var i={},a={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){i[e]=e,a[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var u=o(e);if(u.length){u=r.sortBy(u,(function(e){return s[e]}));for(var c=(u.length-1)/2,d=Math.floor(c),h=Math.ceil(c);d<=h;++d){var l=u[d];a[e]===e&&t<s[l]&&!f(n,e,l)&&(a[l]=e,a[e]=i[e]=i[l],t=s[l])}}}))})),{root:i,align:a}}function h(e,t,n,o,i){var a={},s=l(e,t,n,i),u=i?\"borderLeft\":\"borderRight\";function c(e,t){for(var n=s.nodes(),r=n.pop(),o={};r;)o[r]?e(r):(o[r]=!0,n.push(r),n=n.concat(t(r))),r=n.pop()}function f(e){a[e]=s.inEdges(e).reduce((function(e,t){return Math.max(e,a[t.v]+s.edge(t))}),0)}function d(t){var n=s.outEdges(t).reduce((function(e,t){return Math.min(e,a[t.w]-s.edge(t))}),Number.POSITIVE_INFINITY),r=e.node(t);n!==Number.POSITIVE_INFINITY&&r.borderType!==u&&(a[t]=Math.max(a[t],n))}return c(f,s.predecessors.bind(s)),c(d,s.successors.bind(s)),r.forEach(o,(function(e){a[e]=a[n[e]]})),a}function l(e,t,n,i){var a=new o,s=e.graph(),u=g(s.nodesep,s.edgesep,i);return r.forEach(t,(function(t){var o;r.forEach(t,(function(t){var r=n[t];if(a.setNode(r),o){var i=n[o],s=a.edge(i,r);a.setEdge(i,r,Math.max(u(e,t,o),s||0))}o=t}))})),a}function p(e,t){return r.minBy(r.values(t),(function(t){var n=Number.NEGATIVE_INFINITY,o=Number.POSITIVE_INFINITY;return r.forIn(t,(function(t,r){var i=b(e,r)/2;n=Math.max(t+i,n),o=Math.min(t-i,o)})),n-o}))}function v(e,t){var n=r.values(t),o=r.min(n),i=r.max(n);r.forEach([\"u\",\"d\"],(function(n){r.forEach([\"l\",\"r\"],(function(a){var s,u=n+a,c=e[u];if(c!==t){var f=r.values(c);(s=\"l\"===a?o-r.min(f):i-r.max(f))&&(e[u]=r.mapValues(c,(function(e){return e+s})))}}))}))}function _(e,t){return r.mapValues(e.ul,(function(n,o){if(t)return e[t.toLowerCase()][o];var i=r.sortBy(r.map(e,o));return(i[1]+i[2])/2}))}function y(e){var t,n=i.buildLayerMatrix(e),o=r.merge(a(e,n),s(e,n)),u={};r.forEach([\"u\",\"d\"],(function(i){t=\"u\"===i?n:r.values(n).reverse(),r.forEach([\"l\",\"r\"],(function(n){\"r\"===n&&(t=r.map(t,(function(e){return r.values(e).reverse()})));var a=(\"u\"===i?e.predecessors:e.successors).bind(e),s=d(e,t,o,a),c=h(e,t,s.root,s.align,\"r\"===n);\"r\"===n&&(c=r.mapValues(c,(function(e){return-e}))),u[i+n]=c}))}));var c=p(e,u);return v(u,c),_(u,e.graph().align)}function g(e,t,n){return function(o,i,a){var s,u=o.node(i),c=o.node(a),f=0;if(f+=u.width/2,r.has(u,\"labelpos\"))switch(u.labelpos.toLowerCase()){case\"l\":s=-u.width/2;break;case\"r\":s=u.width/2}if(s&&(f+=n?s:-s),s=0,f+=(u.dummy?t:e)/2,f+=(c.dummy?t:e)/2,f+=c.width/2,r.has(c,\"labelpos\"))switch(c.labelpos.toLowerCase()){case\"l\":s=c.width/2;break;case\"r\":s=-c.width/2}return s&&(f+=n?s:-s),s=0,f}}function b(e,t){return e.node(t).width}t.exports={positionX:y,findType1Conflicts:a,findType2Conflicts:s,addConflict:c,hasConflict:f,verticalAlignment:d,horizontalCompaction:h,alignCoordinates:v,findSmallestWidthAlignment:p,balance:_}},{\"../graphlib\":7,\"../lodash\":10,\"../util\":29}],24:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../util\"),i=e(\"./bk\").positionX;function a(e){s(e=o.asNonCompoundGraph(e)),r.forEach(i(e),(function(t,n){e.node(n).x=t}))}function s(e){var t=o.buildLayerMatrix(e),n=e.graph().ranksep,i=0;r.forEach(t,(function(t){var o=r.max(r.map(t,(function(t){return e.node(t).height})));r.forEach(t,(function(t){e.node(t).y=i+o/2})),i+=o+n}))}t.exports=a},{\"../lodash\":10,\"../util\":29,\"./bk\":23}],25:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graphlib\").Graph,i=e(\"./util\").slack;function a(e){var t,n,r=new o({directed:!1}),a=e.nodes()[0],f=e.nodeCount();for(r.setNode(a,{});s(r,e)<f;)t=u(r,e),n=r.hasNode(t.v)?i(e,t):-i(e,t),c(r,e,n);return r}function s(e,t){function n(o){r.forEach(t.nodeEdges(o),(function(r){var a=r.v,s=o===a?r.w:a;e.hasNode(s)||i(t,r)||(e.setNode(s,{}),e.setEdge(o,s,{}),n(s))}))}return r.forEach(e.nodes(),n),e.nodeCount()}function u(e,t){return r.minBy(t.edges(),(function(n){if(e.hasNode(n.v)!==e.hasNode(n.w))return i(t,n)}))}function c(e,t,n){r.forEach(e.nodes(),(function(e){t.node(e).rank+=n}))}t.exports=a},{\"../graphlib\":7,\"../lodash\":10,\"./util\":28}],26:[function(e,t,n){var r=e(\"./util\").longestPath,o=e(\"./feasible-tree\"),i=e(\"./network-simplex\");function a(e){switch(e.graph().ranker){case\"network-simplex\":default:c(e);break;case\"tight-tree\":u(e);break;case\"longest-path\":s(e)}}t.exports=a;var s=r;function u(e){r(e),o(e)}function c(e){i(e)}},{\"./feasible-tree\":25,\"./network-simplex\":27,\"./util\":28}],27:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./feasible-tree\"),i=e(\"./util\").slack,a=e(\"./util\").longestPath,s=e(\"../graphlib\").alg.preorder,u=e(\"../graphlib\").alg.postorder,c=e(\"../util\").simplify;function f(e){e=c(e),a(e);var t,n=o(e);for(p(n),d(n,e);t=_(n);)g(n,e,t,y(n,e,t))}function d(e,t){var n=u(e,e.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){h(e,t,n)}))}function h(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=l(e,t,n)}function l(e,t,n){var o=e.node(n).parent,i=!0,a=t.edge(n,o),s=0;return a||(i=!1,a=t.edge(o,n)),s=a.weight,r.forEach(t.nodeEdges(n),(function(r){var a=r.v===n,u=a?r.w:r.v;if(u!==o){var c=a===i,f=t.edge(r).weight;if(s+=c?f:-f,m(e,n,u)){var d=e.edge(n,u).cutvalue;s+=c?-d:d}}})),s}function p(e,t){arguments.length<2&&(t=e.nodes()[0]),v(e,{},1,t)}function v(e,t,n,o,i){var a=n,s=e.node(o);return t[o]=!0,r.forEach(e.neighbors(o),(function(i){r.has(t,i)||(n=v(e,t,n,i,o))})),s.low=a,s.lim=n++,i?s.parent=i:delete s.parent,n}function _(e){return r.find(e.edges(),(function(t){return e.edge(t).cutvalue<0}))}function y(e,t,n){var o=n.v,a=n.w;t.hasEdge(o,a)||(o=n.w,a=n.v);var s=e.node(o),u=e.node(a),c=s,f=!1;s.lim>u.lim&&(c=u,f=!0);var d=r.filter(t.edges(),(function(t){return f===x(e,e.node(t.v),c)&&f!==x(e,e.node(t.w),c)}));return r.minBy(d,(function(e){return i(t,e)}))}function g(e,t,n,r){var o=n.v,i=n.w;e.removeEdge(o,i),e.setEdge(r.v,r.w,{}),p(e),d(e,t),b(e,t)}function b(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),o=s(e,n);o=o.slice(1),r.forEach(o,(function(n){var r=e.node(n).parent,o=t.edge(n,r),i=!1;o||(o=t.edge(r,n),i=!0),t.node(n).rank=t.node(r).rank+(i?o.minlen:-o.minlen)}))}function m(e,t,n){return e.hasEdge(t,n)}function x(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}t.exports=f,f.initLowLimValues=p,f.initCutValues=d,f.calcCutValue=l,f.leaveEdge=_,f.enterEdge=y,f.exchangeEdges=g},{\"../graphlib\":7,\"../lodash\":10,\"../util\":29,\"./feasible-tree\":25,\"./util\":28}],28:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t={};function n(o){var i=e.node(o);if(r.has(t,o))return i.rank;t[o]=!0;var a=r.min(r.map(e.outEdges(o),(function(t){return n(t.w)-e.edge(t).minlen})));return a!==Number.POSITIVE_INFINITY&&null!=a||(a=0),i.rank=a}r.forEach(e.sources(),n)}function i(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}t.exports={longestPath:o,slack:i}},{\"../lodash\":10}],29:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./graphlib\").Graph;function i(e,t,n,o){var i;do{i=r.uniqueId(o)}while(e.hasNode(i));return n.dummy=t,e.setNode(i,n),i}function a(e){var t=(new o).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},o=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})})),t}function s(e){var t=new o({multigraph:e.isMultigraph()}).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){e.children(n).length||t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){t.setEdge(n,e.edge(n))})),t}function u(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.outEdges(t),(function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)}function c(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.inEdges(t),(function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)}function f(e,t){var n,r,o=e.x,i=e.y,a=t.x-o,s=t.y-i,u=e.width/2,c=e.height/2;if(!a&&!s)throw new Error(\"Not possible to find intersection inside of the rectangle\");return Math.abs(s)*u>Math.abs(a)*c?(s<0&&(c=-c),n=c*a/s,r=c):(a<0&&(u=-u),n=u,r=u*s/a),{x:o+n,y:i+r}}function d(e){var t=r.map(r.range(v(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var o=e.node(n),i=o.rank;r.isUndefined(i)||(t[i][o.order]=n)})),t}function h(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var o=e.node(n);r.has(o,\"rank\")&&(o.rank-=t)}))}function l(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var o=e.node(r).rank-t;n[o]||(n[o]=[]),n[o].push(r)}));var o=0,i=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%i!=0?--o:o&&r.forEach(t,(function(t){e.node(t).rank+=o}))}))}function p(e,t,n,r){var o={width:0,height:0};return arguments.length>=4&&(o.rank=n,o.order=r),i(e,\"border\",o,t)}function v(e){return r.max(r.map(e.nodes(),(function(t){var n=e.node(t).rank;if(!r.isUndefined(n))return n})))}function _(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n}function y(e,t){var n=r.now();try{return t()}finally{console.log(e+\" time: \"+(r.now()-n)+\"ms\")}}function g(e,t){return t()}t.exports={addDummyNode:i,simplify:a,asNonCompoundGraph:s,successorWeights:u,predecessorWeights:c,intersectRect:f,buildLayerMatrix:d,normalizeRanks:h,removeEmptyRanks:l,addBorderNode:p,maxRank:v,partition:_,time:y,notime:g}},{\"./graphlib\":7,\"./lodash\":10}],30:[function(e,t,n){t.exports=\"0.8.5\"},{}],31:[function(e,t,n){var r=e(\"./lib\");t.exports={Graph:r.Graph,json:e(\"./lib/json\"),alg:e(\"./lib/alg\"),version:r.version}},{\"./lib\":47,\"./lib/alg\":38,\"./lib/json\":48}],32:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t,n={},o=[];function i(o){r.has(n,o)||(n[o]=!0,t.push(o),r.each(e.successors(o),i),r.each(e.predecessors(o),i))}return r.each(e.nodes(),(function(e){t=[],i(e),t.length&&o.push(t)})),o}t.exports=o},{\"../lodash\":49}],33:[function(e,t,n){var r=e(\"../lodash\");function o(e,t,n){r.isArray(t)||(t=[t]);var o=(e.isDirected()?e.successors:e.neighbors).bind(e),a=[],s={};return r.each(t,(function(t){if(!e.hasNode(t))throw new Error(\"Graph does not have node: \"+t);i(e,t,\"post\"===n,s,o,a)})),a}function i(e,t,n,o,a,s){r.has(o,t)||(o[t]=!0,n||s.push(t),r.each(a(t),(function(t){i(e,t,n,o,a,s)})),n&&s.push(t))}t.exports=o},{\"../lodash\":49}],34:[function(e,t,n){var r=e(\"./dijkstra\"),o=e(\"../lodash\");function i(e,t,n){return o.transform(e.nodes(),(function(o,i){o[i]=r(e,i,t,n)}),{})}t.exports=i},{\"../lodash\":49,\"./dijkstra\":35}],35:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../data/priority-queue\");t.exports=a;var i=r.constant(1);function a(e,t,n,r){return s(e,String(t),n||i,r||function(t){return e.outEdges(t)})}function s(e,t,n,r){var i,a,s={},u=new o,c=function(e){var t=e.v!==i?e.v:e.w,r=s[t],o=n(e),c=a.distance+o;if(o<0)throw new Error(\"dijkstra does not allow negative edge weights. Bad edge: \"+e+\" Weight: \"+o);c<r.distance&&(r.distance=c,r.predecessor=i,u.decrease(t,c))};for(e.nodes().forEach((function(e){var n=e===t?0:Number.POSITIVE_INFINITY;s[e]={distance:n},u.add(e,n)}));u.size()>0&&(i=u.removeMin(),(a=s[i]).distance!==Number.POSITIVE_INFINITY);)r(i).forEach(c);return s}},{\"../data/priority-queue\":45,\"../lodash\":49}],36:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./tarjan\");function i(e){return r.filter(o(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}t.exports=i},{\"../lodash\":49,\"./tarjan\":43}],37:[function(e,t,n){var r=e(\"../lodash\");t.exports=i;var o=r.constant(1);function i(e,t,n){return a(e,t||o,n||function(t){return e.outEdges(t)})}function a(e,t,n){var r={},o=e.nodes();return o.forEach((function(e){r[e]={},r[e][e]={distance:0},o.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var o=n.v===e?n.w:n.v,i=t(n);r[e][o]={distance:i,predecessor:e}}))})),o.forEach((function(e){var t=r[e];o.forEach((function(n){var i=r[n];o.forEach((function(n){var r=i[e],o=t[n],a=i[n],s=r.distance+o.distance;s<a.distance&&(a.distance=s,a.predecessor=o.predecessor)}))}))})),r}},{\"../lodash\":49}],38:[function(e,t,n){t.exports={components:e(\"./components\"),dijkstra:e(\"./dijkstra\"),dijkstraAll:e(\"./dijkstra-all\"),findCycles:e(\"./find-cycles\"),floydWarshall:e(\"./floyd-warshall\"),isAcyclic:e(\"./is-acyclic\"),postorder:e(\"./postorder\"),preorder:e(\"./preorder\"),prim:e(\"./prim\"),tarjan:e(\"./tarjan\"),topsort:e(\"./topsort\")}},{\"./components\":32,\"./dijkstra\":35,\"./dijkstra-all\":34,\"./find-cycles\":36,\"./floyd-warshall\":37,\"./is-acyclic\":39,\"./postorder\":40,\"./preorder\":41,\"./prim\":42,\"./tarjan\":43,\"./topsort\":44}],39:[function(e,t,n){var r=e(\"./topsort\");function o(e){try{r(e)}catch(e){if(e instanceof r.CycleException)return!1;throw e}return!0}t.exports=o},{\"./topsort\":44}],40:[function(e,t,n){var r=e(\"./dfs\");function o(e,t){return r(e,t,\"post\")}t.exports=o},{\"./dfs\":33}],41:[function(e,t,n){var r=e(\"./dfs\");function o(e,t){return r(e,t,\"pre\")}t.exports=o},{\"./dfs\":33}],42:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graph\"),i=e(\"../data/priority-queue\");function a(e,t){var n,a=new o,s={},u=new i;function c(e){var r=e.v===n?e.w:e.v,o=u.priority(r);if(void 0!==o){var i=t(e);i<o&&(s[r]=n,u.decrease(r,i))}}if(0===e.nodeCount())return a;r.each(e.nodes(),(function(e){u.add(e,Number.POSITIVE_INFINITY),a.setNode(e)})),u.decrease(e.nodes()[0],0);for(var f=!1;u.size()>0;){if(n=u.removeMin(),r.has(s,n))a.setEdge(n,s[n]);else{if(f)throw new Error(\"Input graph is not connected: \"+e);f=!0}e.nodeEdges(n).forEach(c)}return a}t.exports=a},{\"../data/priority-queue\":45,\"../graph\":46,\"../lodash\":49}],43:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t=0,n=[],o={},i=[];function a(s){var u=o[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach((function(e){r.has(o,e)?o[e].onStack&&(u.lowlink=Math.min(u.lowlink,o[e].index)):(a(e),u.lowlink=Math.min(u.lowlink,o[e].lowlink))})),u.lowlink===u.index){var c,f=[];do{c=n.pop(),o[c].onStack=!1,f.push(c)}while(s!==c);i.push(f)}}return e.nodes().forEach((function(e){r.has(o,e)||a(e)})),i}t.exports=o},{\"../lodash\":49}],44:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t={},n={},o=[];function a(s){if(r.has(n,s))throw new i;r.has(t,s)||(n[s]=!0,t[s]=!0,r.each(e.predecessors(s),a),delete n[s],o.push(s))}if(r.each(e.sinks(),a),r.size(t)!==e.nodeCount())throw new i;return o}function i(){}t.exports=o,o.CycleException=i,i.prototype=new Error},{\"../lodash\":49}],45:[function(e,t,n){var r=e(\"../lodash\");function o(){this._arr=[],this._keyIndices={}}t.exports=o,o.prototype.size=function(){return this._arr.length},o.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},o.prototype.has=function(e){return r.has(this._keyIndices,e)},o.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},o.prototype.min=function(){if(0===this.size())throw new Error(\"Queue underflow\");return this._arr[0].key},o.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var o=this._arr,i=o.length;return n[e]=i,o.push({key:e,priority:t}),this._decrease(i),!0}return!1},o.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},o.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error(\"New priority is greater than current priority. Key: \"+e+\" Old: \"+this._arr[n].priority+\" New: \"+t);this._arr[n].priority=t,this._decrease(n)},o.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,o=e;n<t.length&&(o=t[n].priority<t[o].priority?n:o,r<t.length&&(o=t[r].priority<t[o].priority?r:o),o!==e&&(this._swap(e,o),this._heapify(o)))},o.prototype._decrease=function(e){for(var t,n=this._arr,r=n[e].priority;0!==e&&!(n[t=e>>1].priority<r);)this._swap(e,t),e=t},o.prototype._swap=function(e,t){var n=this._arr,r=this._keyIndices,o=n[e],i=n[t];n[e]=i,n[t]=o,r[i.key]=e,r[o.key]=t}},{\"../lodash\":49}],46:[function(e,t,n){var r=e(\"./lodash\");t.exports=s;var o=\"\\\\0\",i=\"\\\\0\",a=\"\u0001\";function s(e){this._isDirected=!r.has(e,\"directed\")||e.directed,this._isMultigraph=!!r.has(e,\"multigraph\")&&e.multigraph,this._isCompound=!!r.has(e,\"compound\")&&e.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[i]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function u(e,t){e[t]?e[t]++:e[t]=1}function c(e,t){--e[t]||delete e[t]}function f(e,t,n,i){var s=\"\"+t,u=\"\"+n;if(!e&&s>u){var c=s;s=u,u=c}return s+a+u+a+(r.isUndefined(i)?o:i)}function d(e,t,n,r){var o=\"\"+t,i=\"\"+n;if(!e&&o>i){var a=o;o=i,i=a}var s={v:o,w:i};return r&&(s.name=r),s}function h(e,t){return f(e,t.v,t.w,t.name)}s.prototype._nodeCount=0,s.prototype._edgeCount=0,s.prototype.isDirected=function(){return this._isDirected},s.prototype.isMultigraph=function(){return this._isMultigraph},s.prototype.isCompound=function(){return this._isCompound},s.prototype.setGraph=function(e){return this._label=e,this},s.prototype.graph=function(){return this._label},s.prototype.setDefaultNodeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultNodeLabelFn=e,this},s.prototype.nodeCount=function(){return this._nodeCount},s.prototype.nodes=function(){return r.keys(this._nodes)},s.prototype.sources=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._in[t])}))},s.prototype.sinks=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._out[t])}))},s.prototype.setNodes=function(e,t){var n=arguments,o=this;return r.each(e,(function(e){n.length>1?o.setNode(e,t):o.setNode(e)})),this},s.prototype.setNode=function(e,t){return r.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=i,this._children[e]={},this._children[i][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},s.prototype.node=function(e){return this._nodes[e]},s.prototype.hasNode=function(e){return r.has(this._nodes,e)},s.prototype.removeNode=function(e){var t=this;if(r.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],r.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),r.each(r.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],r.each(r.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},s.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error(\"Cannot set parent in a non-compound graph\");if(r.isUndefined(t))t=i;else{for(var n=t+=\"\";!r.isUndefined(n);n=this.parent(n))if(n===e)throw new Error(\"Setting \"+t+\" as parent of \"+e+\" would create a cycle\");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},s.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},s.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==i)return t}},s.prototype.children=function(e){if(r.isUndefined(e)&&(e=i),this._isCompound){var t=this._children[e];if(t)return r.keys(t)}else{if(e===i)return this.nodes();if(this.hasNode(e))return[]}},s.prototype.predecessors=function(e){var t=this._preds[e];if(t)return r.keys(t)},s.prototype.successors=function(e){var t=this._sucs[e];if(t)return r.keys(t)},s.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return r.union(t,this.successors(e))},s.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},s.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),r.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var o={};function i(e){var r=n.parent(e);return void 0===r||t.hasNode(r)?(o[e]=r,r):r in o?o[r]:i(r)}return this._isCompound&&r.each(t.nodes(),(function(e){t.setParent(e,i(e))})),t},s.prototype.setDefaultEdgeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultEdgeLabelFn=e,this},s.prototype.edgeCount=function(){return this._edgeCount},s.prototype.edges=function(){return r.values(this._edgeObjs)},s.prototype.setPath=function(e,t){var n=this,o=arguments;return r.reduce(e,(function(e,r){return o.length>1?n.setEdge(e,r,t):n.setEdge(e,r),r})),this},s.prototype.setEdge=function(){var e,t,n,o,i=!1,a=arguments[0];\"object\"==typeof a&&null!==a&&\"v\"in a?(e=a.v,t=a.w,n=a.name,2===arguments.length&&(o=arguments[1],i=!0)):(e=a,t=arguments[1],n=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),e=\"\"+e,t=\"\"+t,r.isUndefined(n)||(n=\"\"+n);var s=f(this._isDirected,e,t,n);if(r.has(this._edgeLabels,s))return i&&(this._edgeLabels[s]=o),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error(\"Cannot set a named edge when isMultigraph = false\");this.setNode(e),this.setNode(t),this._edgeLabels[s]=i?o:this._defaultEdgeLabelFn(e,t,n);var c=d(this._isDirected,e,t,n);return e=c.v,t=c.w,Object.freeze(c),this._edgeObjs[s]=c,u(this._preds[t],e),u(this._sucs[e],t),this._in[t][s]=c,this._out[e][s]=c,this._edgeCount++,this},s.prototype.edge=function(e,t,n){var r=1===arguments.length?h(this._isDirected,arguments[0]):f(this._isDirected,e,t,n);return this._edgeLabels[r]},s.prototype.hasEdge=function(e,t,n){var o=1===arguments.length?h(this._isDirected,arguments[0]):f(this._isDirected,e,t,n);return r.has(this._edgeLabels,o)},s.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?h(this._isDirected,arguments[0]):f(this._isDirected,e,t,n),o=this._edgeObjs[r];return o&&(e=o.v,t=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],c(this._preds[t],e),c(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},s.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var o=r.values(n);return t?r.filter(o,(function(e){return e.v===t})):o}},s.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var o=r.values(n);return t?r.filter(o,(function(e){return e.w===t})):o}},s.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},{\"./lodash\":49}],47:[function(e,t,n){t.exports={Graph:e(\"./graph\"),version:e(\"./version\")}},{\"./graph\":46,\"./version\":50}],48:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./graph\");function i(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:a(e),edges:s(e)};return r.isUndefined(e.graph())||(t.value=r.clone(e.graph())),t}function a(e){return r.map(e.nodes(),(function(t){var n=e.node(t),o=e.parent(t),i={v:t};return r.isUndefined(n)||(i.value=n),r.isUndefined(o)||(i.parent=o),i}))}function s(e){return r.map(e.edges(),(function(t){var n=e.edge(t),o={v:t.v,w:t.w};return r.isUndefined(t.name)||(o.name=t.name),r.isUndefined(n)||(o.value=n),o}))}function u(e){var t=new o(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}t.exports={write:i,read:u}},{\"./graph\":46,\"./lodash\":49}],49:[function(e,t,n){var r;if(\"function\"==typeof e)try{r={clone:e(\"lodash/clone\"),constant:e(\"lodash/constant\"),each:e(\"lodash/each\"),filter:e(\"lodash/filter\"),has:e(\"lodash/has\"),isArray:e(\"lodash/isArray\"),isEmpty:e(\"lodash/isEmpty\"),isFunction:e(\"lodash/isFunction\"),isUndefined:e(\"lodash/isUndefined\"),keys:e(\"lodash/keys\"),map:e(\"lodash/map\"),reduce:e(\"lodash/reduce\"),size:e(\"lodash/size\"),transform:e(\"lodash/transform\"),union:e(\"lodash/union\"),values:e(\"lodash/values\")}}catch(e){}r||(r=window._),t.exports=r},{\"lodash/clone\":226,\"lodash/constant\":228,\"lodash/each\":230,\"lodash/filter\":232,\"lodash/has\":239,\"lodash/isArray\":243,\"lodash/isEmpty\":247,\"lodash/isFunction\":248,\"lodash/isUndefined\":258,\"lodash/keys\":259,\"lodash/map\":262,\"lodash/reduce\":274,\"lodash/size\":275,\"lodash/transform\":284,\"lodash/union\":285,\"lodash/values\":287}],50:[function(e,t,n){t.exports=\"2.1.8\"},{}],51:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"DataView\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],52:[function(e,t,n){var r=e(\"./_hashClear\"),o=e(\"./_hashDelete\"),i=e(\"./_hashGet\"),a=e(\"./_hashHas\"),s=e(\"./_hashSet\");function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},{\"./_hashClear\":172,\"./_hashDelete\":173,\"./_hashGet\":174,\"./_hashHas\":175,\"./_hashSet\":176}],53:[function(e,t,n){var r=e(\"./_listCacheClear\"),o=e(\"./_listCacheDelete\"),i=e(\"./_listCacheGet\"),a=e(\"./_listCacheHas\"),s=e(\"./_listCacheSet\");function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},{\"./_listCacheClear\":188,\"./_listCacheDelete\":189,\"./_listCacheGet\":190,\"./_listCacheHas\":191,\"./_listCacheSet\":192}],54:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"Map\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],55:[function(e,t,n){var r=e(\"./_mapCacheClear\"),o=e(\"./_mapCacheDelete\"),i=e(\"./_mapCacheGet\"),a=e(\"./_mapCacheHas\"),s=e(\"./_mapCacheSet\");function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},{\"./_mapCacheClear\":193,\"./_mapCacheDelete\":194,\"./_mapCacheGet\":195,\"./_mapCacheHas\":196,\"./_mapCacheSet\":197}],56:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"Promise\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],57:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"Set\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],58:[function(e,t,n){var r=e(\"./_MapCache\"),o=e(\"./_setCacheAdd\"),i=e(\"./_setCacheHas\");function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}a.prototype.add=a.prototype.push=o,a.prototype.has=i,t.exports=a},{\"./_MapCache\":55,\"./_setCacheAdd\":210,\"./_setCacheHas\":211}],59:[function(e,t,n){var r=e(\"./_ListCache\"),o=e(\"./_stackClear\"),i=e(\"./_stackDelete\"),a=e(\"./_stackGet\"),s=e(\"./_stackHas\"),u=e(\"./_stackSet\");function c(e){var t=this.__data__=new r(e);this.size=t.size}c.prototype.clear=o,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=s,c.prototype.set=u,t.exports=c},{\"./_ListCache\":53,\"./_stackClear\":215,\"./_stackDelete\":216,\"./_stackGet\":217,\"./_stackHas\":218,\"./_stackSet\":219}],60:[function(e,t,n){var r=e(\"./_root\").Symbol;t.exports=r},{\"./_root\":208}],61:[function(e,t,n){var r=e(\"./_root\").Uint8Array;t.exports=r},{\"./_root\":208}],62:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"WeakMap\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],63:[function(e,t,n){function r(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}t.exports=r},{}],64:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}t.exports=r},{}],65:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var a=e[n];t(a,n,e)&&(i[o++]=a)}return i}t.exports=r},{}],66:[function(e,t,n){var r=e(\"./_baseIndexOf\");function o(e,t){return!(null==e||!e.length)&&r(e,t,0)>-1}t.exports=o},{\"./_baseIndexOf\":95}],67:[function(e,t,n){function r(e,t,n){for(var r=-1,o=null==e?0:e.length;++r<o;)if(n(t,e[r]))return!0;return!1}t.exports=r},{}],68:[function(e,t,n){var r=e(\"./_baseTimes\"),o=e(\"./isArguments\"),i=e(\"./isArray\"),a=e(\"./isBuffer\"),s=e(\"./_isIndex\"),u=e(\"./isTypedArray\"),c=Object.prototype.hasOwnProperty;function f(e,t){var n=i(e),f=!n&&o(e),d=!n&&!f&&a(e),h=!n&&!f&&!d&&u(e),l=n||f||d||h,p=l?r(e.length,String):[],v=p.length;for(var _ in e)!t&&!c.call(e,_)||l&&(\"length\"==_||d&&(\"offset\"==_||\"parent\"==_)||h&&(\"buffer\"==_||\"byteLength\"==_||\"byteOffset\"==_)||s(_,v))||p.push(_);return p}t.exports=f},{\"./_baseTimes\":125,\"./_isIndex\":181,\"./isArguments\":242,\"./isArray\":243,\"./isBuffer\":246,\"./isTypedArray\":257}],69:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}t.exports=r},{}],70:[function(e,t,n){function r(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}t.exports=r},{}],71:[function(e,t,n){function r(e,t,n,r){var o=-1,i=null==e?0:e.length;for(r&&i&&(n=e[++o]);++o<i;)n=t(n,e[o],o,e);return n}t.exports=r},{}],72:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}t.exports=r},{}],73:[function(e,t,n){var r=e(\"./_baseProperty\")(\"length\");t.exports=r},{\"./_baseProperty\":117}],74:[function(e,t,n){var r=e(\"./_baseAssignValue\"),o=e(\"./eq\");function i(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}t.exports=i},{\"./_baseAssignValue\":79,\"./eq\":231}],75:[function(e,t,n){var r=e(\"./_baseAssignValue\"),o=e(\"./eq\"),i=Object.prototype.hasOwnProperty;function a(e,t,n){var a=e[t];i.call(e,t)&&o(a,n)&&(void 0!==n||t in e)||r(e,t,n)}t.exports=a},{\"./_baseAssignValue\":79,\"./eq\":231}],76:[function(e,t,n){var r=e(\"./eq\");function o(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}t.exports=o},{\"./eq\":231}],77:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./keys\");function i(e,t){return e&&r(t,o(t),e)}t.exports=i},{\"./_copyObject\":143,\"./keys\":259}],78:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./keysIn\");function i(e,t){return e&&r(t,o(t),e)}t.exports=i},{\"./_copyObject\":143,\"./keysIn\":260}],79:[function(e,t,n){var r=e(\"./_defineProperty\");function o(e,t,n){\"__proto__\"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}t.exports=o},{\"./_defineProperty\":153}],80:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_arrayEach\"),i=e(\"./_assignValue\"),a=e(\"./_baseAssign\"),s=e(\"./_baseAssignIn\"),u=e(\"./_cloneBuffer\"),c=e(\"./_copyArray\"),f=e(\"./_copySymbols\"),d=e(\"./_copySymbolsIn\"),h=e(\"./_getAllKeys\"),l=e(\"./_getAllKeysIn\"),p=e(\"./_getTag\"),v=e(\"./_initCloneArray\"),_=e(\"./_initCloneByTag\"),y=e(\"./_initCloneObject\"),g=e(\"./isArray\"),b=e(\"./isBuffer\"),m=e(\"./isMap\"),x=e(\"./isObject\"),w=e(\"./isSet\"),E=e(\"./keys\"),j=1,k=2,A=4,O=\"[object Arguments]\",I=\"[object Array]\",S=\"[object Boolean]\",C=\"[object Date]\",N=\"[object Error]\",T=\"[object Function]\",M=\"[object GeneratorFunction]\",L=\"[object Map]\",P=\"[object Number]\",F=\"[object Object]\",D=\"[object RegExp]\",B=\"[object Set]\",G=\"[object String]\",R=\"[object Symbol]\",U=\"[object WeakMap]\",z=\"[object ArrayBuffer]\",V=\"[object DataView]\",q=\"[object Float32Array]\",K=\"[object Float64Array]\",H=\"[object Int8Array]\",Y=\"[object Int16Array]\",$=\"[object Int32Array]\",W=\"[object Uint8Array]\",J=\"[object Uint8ClampedArray]\",X=\"[object Uint16Array]\",Z=\"[object Uint32Array]\",Q={};function ee(e,t,n,I,S,C){var N,L=t&j,P=t&k,D=t&A;if(n&&(N=S?n(e,I,S,C):n(e)),void 0!==N)return N;if(!x(e))return e;var B=g(e);if(B){if(N=v(e),!L)return c(e,N)}else{var G=p(e),R=G==T||G==M;if(b(e))return u(e,L);if(G==F||G==O||R&&!S){if(N=P||R?{}:y(e),!L)return P?d(e,s(N,e)):f(e,a(N,e))}else{if(!Q[G])return S?e:{};N=_(e,G,L)}}C||(C=new r);var U=C.get(e);if(U)return U;C.set(e,N),w(e)?e.forEach((function(r){N.add(ee(r,t,n,r,e,C))})):m(e)&&e.forEach((function(r,o){N.set(o,ee(r,t,n,o,e,C))}));var z=D?P?l:h:P?keysIn:E,V=B?void 0:z(e);return o(V||e,(function(r,o){V&&(r=e[o=r]),i(N,o,ee(r,t,n,o,e,C))})),N}Q[O]=Q[I]=Q[z]=Q[V]=Q[S]=Q[C]=Q[q]=Q[K]=Q[H]=Q[Y]=Q[$]=Q[L]=Q[P]=Q[F]=Q[D]=Q[B]=Q[G]=Q[R]=Q[W]=Q[J]=Q[X]=Q[Z]=!0,Q[N]=Q[T]=Q[U]=!1,t.exports=ee},{\"./_Stack\":59,\"./_arrayEach\":64,\"./_assignValue\":75,\"./_baseAssign\":77,\"./_baseAssignIn\":78,\"./_cloneBuffer\":135,\"./_copyArray\":142,\"./_copySymbols\":144,\"./_copySymbolsIn\":145,\"./_getAllKeys\":159,\"./_getAllKeysIn\":160,\"./_getTag\":168,\"./_initCloneArray\":177,\"./_initCloneByTag\":178,\"./_initCloneObject\":179,\"./isArray\":243,\"./isBuffer\":246,\"./isMap\":250,\"./isObject\":251,\"./isSet\":254,\"./keys\":259}],81:[function(e,t,n){var r=e(\"./isObject\"),o=Object.create,i=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();t.exports=i},{\"./isObject\":251}],82:[function(e,t,n){var r=e(\"./_baseForOwn\"),o=e(\"./_createBaseEach\")(r);t.exports=o},{\"./_baseForOwn\":88,\"./_createBaseEach\":148}],83:[function(e,t,n){var r=e(\"./isSymbol\");function o(e,t,n){for(var o=-1,i=e.length;++o<i;){var a=e[o],s=t(a);if(null!=s&&(void 0===u?s==s&&!r(s):n(s,u)))var u=s,c=a}return c}t.exports=o},{\"./isSymbol\":256}],84:[function(e,t,n){var r=e(\"./_baseEach\");function o(e,t){var n=[];return r(e,(function(e,r,o){t(e,r,o)&&n.push(e)})),n}t.exports=o},{\"./_baseEach\":82}],85:[function(e,t,n){function r(e,t,n,r){for(var o=e.length,i=n+(r?1:-1);r?i--:++i<o;)if(t(e[i],i,e))return i;return-1}t.exports=r},{}],86:[function(e,t,n){var r=e(\"./_arrayPush\"),o=e(\"./_isFlattenable\");function i(e,t,n,a,s){var u=-1,c=e.length;for(n||(n=o),s||(s=[]);++u<c;){var f=e[u];t>0&&n(f)?t>1?i(f,t-1,n,a,s):r(s,f):a||(s[s.length]=f)}return s}t.exports=i},{\"./_arrayPush\":70,\"./_isFlattenable\":180}],87:[function(e,t,n){var r=e(\"./_createBaseFor\")();t.exports=r},{\"./_createBaseFor\":149}],88:[function(e,t,n){var r=e(\"./_baseFor\"),o=e(\"./keys\");function i(e,t){return e&&r(e,t,o)}t.exports=i},{\"./_baseFor\":87,\"./keys\":259}],89:[function(e,t,n){var r=e(\"./_castPath\"),o=e(\"./_toKey\");function i(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&n<i;)e=e[o(t[n++])];return n&&n==i?e:void 0}t.exports=i},{\"./_castPath\":133,\"./_toKey\":223}],90:[function(e,t,n){var r=e(\"./_arrayPush\"),o=e(\"./isArray\");function i(e,t,n){var i=t(e);return o(e)?i:r(i,n(e))}t.exports=i},{\"./_arrayPush\":70,\"./isArray\":243}],91:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./_getRawTag\"),i=e(\"./_objectToString\"),a=\"[object Null]\",s=\"[object Undefined]\",u=r?r.toStringTag:void 0;function c(e){return null==e?void 0===e?s:a:u&&u in Object(e)?o(e):i(e)}t.exports=c},{\"./_Symbol\":60,\"./_getRawTag\":165,\"./_objectToString\":205}],92:[function(e,t,n){function r(e,t){return e>t}t.exports=r},{}],93:[function(e,t,n){var r=Object.prototype.hasOwnProperty;function o(e,t){return null!=e&&r.call(e,t)}t.exports=o},{}],94:[function(e,t,n){function r(e,t){return null!=e&&t in Object(e)}t.exports=r},{}],95:[function(e,t,n){var r=e(\"./_baseFindIndex\"),o=e(\"./_baseIsNaN\"),i=e(\"./_strictIndexOf\");function a(e,t,n){return t==t?i(e,t,n):r(e,o,n)}t.exports=a},{\"./_baseFindIndex\":85,\"./_baseIsNaN\":101,\"./_strictIndexOf\":220}],96:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isObjectLike\"),i=\"[object Arguments]\";function a(e){return o(e)&&r(e)==i}t.exports=a},{\"./_baseGetTag\":91,\"./isObjectLike\":252}],97:[function(e,t,n){var r=e(\"./_baseIsEqualDeep\"),o=e(\"./isObjectLike\");function i(e,t,n,a,s){return e===t||(null==e||null==t||!o(e)&&!o(t)?e!=e&&t!=t:r(e,t,n,a,i,s))}t.exports=i},{\"./_baseIsEqualDeep\":98,\"./isObjectLike\":252}],98:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_equalArrays\"),i=e(\"./_equalByTag\"),a=e(\"./_equalObjects\"),s=e(\"./_getTag\"),u=e(\"./isArray\"),c=e(\"./isBuffer\"),f=e(\"./isTypedArray\"),d=1,h=\"[object Arguments]\",l=\"[object Array]\",p=\"[object Object]\",v=Object.prototype.hasOwnProperty;function _(e,t,n,_,y,g){var b=u(e),m=u(t),x=b?l:s(e),w=m?l:s(t),E=(x=x==h?p:x)==p,j=(w=w==h?p:w)==p,k=x==w;if(k&&c(e)){if(!c(t))return!1;b=!0,E=!1}if(k&&!E)return g||(g=new r),b||f(e)?o(e,t,n,_,y,g):i(e,t,x,n,_,y,g);if(!(n&d)){var A=E&&v.call(e,\"__wrapped__\"),O=j&&v.call(t,\"__wrapped__\");if(A||O){var I=A?e.value():e,S=O?t.value():t;return g||(g=new r),y(I,S,n,_,g)}}return!!k&&(g||(g=new r),a(e,t,n,_,y,g))}t.exports=_},{\"./_Stack\":59,\"./_equalArrays\":154,\"./_equalByTag\":155,\"./_equalObjects\":156,\"./_getTag\":168,\"./isArray\":243,\"./isBuffer\":246,\"./isTypedArray\":257}],99:[function(e,t,n){var r=e(\"./_getTag\"),o=e(\"./isObjectLike\"),i=\"[object Map]\";function a(e){return o(e)&&r(e)==i}t.exports=a},{\"./_getTag\":168,\"./isObjectLike\":252}],100:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_baseIsEqual\"),i=1,a=2;function s(e,t,n,s){var u=n.length,c=u,f=!s;if(null==e)return!c;for(e=Object(e);u--;){var d=n[u];if(f&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++u<c;){var h=(d=n[u])[0],l=e[h],p=d[1];if(f&&d[2]){if(void 0===l&&!(h in e))return!1}else{var v=new r;if(s)var _=s(l,p,h,e,t,v);if(!(void 0===_?o(p,l,i|a,s,v):_))return!1}}return!0}t.exports=s},{\"./_Stack\":59,\"./_baseIsEqual\":97}],101:[function(e,t,n){function r(e){return e!=e}t.exports=r},{}],102:[function(e,t,n){var r=e(\"./isFunction\"),o=e(\"./_isMasked\"),i=e(\"./isObject\"),a=e(\"./_toSource\"),s=/[\\\\\\\\^$.*+?()[\\\\]{}|]/g,u=/^\\\\[object .+?Constructor\\\\]$/,c=Function.prototype,f=Object.prototype,d=c.toString,h=f.hasOwnProperty,l=RegExp(\"^\"+d.call(h).replace(s,\"\\\\\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g,\"$1.*?\")+\"$\");function p(e){return!(!i(e)||o(e))&&(r(e)?l:u).test(a(e))}t.exports=p},{\"./_isMasked\":185,\"./_toSource\":224,\"./isFunction\":248,\"./isObject\":251}],103:[function(e,t,n){var r=e(\"./_getTag\"),o=e(\"./isObjectLike\"),i=\"[object Set]\";function a(e){return o(e)&&r(e)==i}t.exports=a},{\"./_getTag\":168,\"./isObjectLike\":252}],104:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isLength\"),i=e(\"./isObjectLike\"),a=\"[object Arguments]\",s=\"[object Array]\",u=\"[object Boolean]\",c=\"[object Date]\",f=\"[object Error]\",d=\"[object Function]\",h=\"[object Map]\",l=\"[object Number]\",p=\"[object Object]\",v=\"[object RegExp]\",_=\"[object Set]\",y=\"[object String]\",g=\"[object WeakMap]\",b=\"[object ArrayBuffer]\",m=\"[object DataView]\",x=\"[object Float64Array]\",w=\"[object Int8Array]\",E=\"[object Int16Array]\",j=\"[object Int32Array]\",k=\"[object Uint8Array]\",A=\"[object Uint8ClampedArray]\",O=\"[object Uint16Array]\",I=\"[object Uint32Array]\",S={};function C(e){return i(e)&&o(e.length)&&!!S[r(e)]}S[\"[object Float32Array]\"]=S[x]=S[w]=S[E]=S[j]=S[k]=S[A]=S[O]=S[I]=!0,S[a]=S[s]=S[b]=S[u]=S[m]=S[c]=S[f]=S[d]=S[h]=S[l]=S[p]=S[v]=S[_]=S[y]=S[g]=!1,t.exports=C},{\"./_baseGetTag\":91,\"./isLength\":249,\"./isObjectLike\":252}],105:[function(e,t,n){var r=e(\"./_baseMatches\"),o=e(\"./_baseMatchesProperty\"),i=e(\"./identity\"),a=e(\"./isArray\"),s=e(\"./property\");function u(e){return\"function\"==typeof e?e:null==e?i:\"object\"==typeof e?a(e)?o(e[0],e[1]):r(e):s(e)}t.exports=u},{\"./_baseMatches\":110,\"./_baseMatchesProperty\":111,\"./identity\":241,\"./isArray\":243,\"./property\":272}],106:[function(e,t,n){var r=e(\"./_isPrototype\"),o=e(\"./_nativeKeys\"),i=Object.prototype.hasOwnProperty;function a(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))i.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}t.exports=a},{\"./_isPrototype\":186,\"./_nativeKeys\":202}],107:[function(e,t,n){var r=e(\"./isObject\"),o=e(\"./_isPrototype\"),i=e(\"./_nativeKeysIn\"),a=Object.prototype.hasOwnProperty;function s(e){if(!r(e))return i(e);var t=o(e),n=[];for(var s in e)(\"constructor\"!=s||!t&&a.call(e,s))&&n.push(s);return n}t.exports=s},{\"./_isPrototype\":186,\"./_nativeKeysIn\":203,\"./isObject\":251}],108:[function(e,t,n){function r(e,t){return e<t}t.exports=r},{}],109:[function(e,t,n){var r=e(\"./_baseEach\"),o=e(\"./isArrayLike\");function i(e,t){var n=-1,i=o(e)?Array(e.length):[];return r(e,(function(e,r,o){i[++n]=t(e,r,o)})),i}t.exports=i},{\"./_baseEach\":82,\"./isArrayLike\":244}],110:[function(e,t,n){var r=e(\"./_baseIsMatch\"),o=e(\"./_getMatchData\"),i=e(\"./_matchesStrictComparable\");function a(e){var t=o(e);return 1==t.length&&t[0][2]?i(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}t.exports=a},{\"./_baseIsMatch\":100,\"./_getMatchData\":162,\"./_matchesStrictComparable\":199}],111:[function(e,t,n){var r=e(\"./_baseIsEqual\"),o=e(\"./get\"),i=e(\"./hasIn\"),a=e(\"./_isKey\"),s=e(\"./_isStrictComparable\"),u=e(\"./_matchesStrictComparable\"),c=e(\"./_toKey\"),f=1,d=2;function h(e,t){return a(e)&&s(t)?u(c(e),t):function(n){var a=o(n,e);return void 0===a&&a===t?i(n,e):r(t,a,f|d)}}t.exports=h},{\"./_baseIsEqual\":97,\"./_isKey\":183,\"./_isStrictComparable\":187,\"./_matchesStrictComparable\":199,\"./_toKey\":223,\"./get\":238,\"./hasIn\":240}],112:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_assignMergeValue\"),i=e(\"./_baseFor\"),a=e(\"./_baseMergeDeep\"),s=e(\"./isObject\"),u=e(\"./keysIn\"),c=e(\"./_safeGet\");function f(e,t,n,d,h){e!==t&&i(t,(function(i,u){if(h||(h=new r),s(i))a(e,t,u,n,f,d,h);else{var l=d?d(c(e,u),i,u+\"\",e,t,h):void 0;void 0===l&&(l=i),o(e,u,l)}}),u)}t.exports=f},{\"./_Stack\":59,\"./_assignMergeValue\":74,\"./_baseFor\":87,\"./_baseMergeDeep\":113,\"./_safeGet\":209,\"./isObject\":251,\"./keysIn\":260}],113:[function(e,t,n){var r=e(\"./_assignMergeValue\"),o=e(\"./_cloneBuffer\"),i=e(\"./_cloneTypedArray\"),a=e(\"./_copyArray\"),s=e(\"./_initCloneObject\"),u=e(\"./isArguments\"),c=e(\"./isArray\"),f=e(\"./isArrayLikeObject\"),d=e(\"./isBuffer\"),h=e(\"./isFunction\"),l=e(\"./isObject\"),p=e(\"./isPlainObject\"),v=e(\"./isTypedArray\"),_=e(\"./_safeGet\"),y=e(\"./toPlainObject\");function g(e,t,n,g,b,m,x){var w=_(e,n),E=_(t,n),j=x.get(E);if(j)r(e,n,j);else{var k=m?m(w,E,n+\"\",e,t,x):void 0,A=void 0===k;if(A){var O=c(E),I=!O&&d(E),S=!O&&!I&&v(E);k=E,O||I||S?c(w)?k=w:f(w)?k=a(w):I?(A=!1,k=o(E,!0)):S?(A=!1,k=i(E,!0)):k=[]:p(E)||u(E)?(k=w,u(w)?k=y(w):l(w)&&!h(w)||(k=s(E))):A=!1}A&&(x.set(E,k),b(k,E,g,m,x),x.delete(E)),r(e,n,k)}}t.exports=g},{\"./_assignMergeValue\":74,\"./_cloneBuffer\":135,\"./_cloneTypedArray\":139,\"./_copyArray\":142,\"./_initCloneObject\":179,\"./_safeGet\":209,\"./isArguments\":242,\"./isArray\":243,\"./isArrayLikeObject\":245,\"./isBuffer\":246,\"./isFunction\":248,\"./isObject\":251,\"./isPlainObject\":253,\"./isTypedArray\":257,\"./toPlainObject\":282}],114:[function(e,t,n){var r=e(\"./_arrayMap\"),o=e(\"./_baseIteratee\"),i=e(\"./_baseMap\"),a=e(\"./_baseSortBy\"),s=e(\"./_baseUnary\"),u=e(\"./_compareMultiple\"),c=e(\"./identity\");function f(e,t,n){var f=-1;t=r(t.length?t:[c],s(o));var d=i(e,(function(e,n,o){return{criteria:r(t,(function(t){return t(e)})),index:++f,value:e}}));return a(d,(function(e,t){return u(e,t,n)}))}t.exports=f},{\"./_arrayMap\":69,\"./_baseIteratee\":105,\"./_baseMap\":109,\"./_baseSortBy\":124,\"./_baseUnary\":127,\"./_compareMultiple\":141,\"./identity\":241}],115:[function(e,t,n){var r=e(\"./_basePickBy\"),o=e(\"./hasIn\");function i(e,t){return r(e,t,(function(t,n){return o(e,n)}))}t.exports=i},{\"./_basePickBy\":116,\"./hasIn\":240}],116:[function(e,t,n){var r=e(\"./_baseGet\"),o=e(\"./_baseSet\"),i=e(\"./_castPath\");function a(e,t,n){for(var a=-1,s=t.length,u={};++a<s;){var c=t[a],f=r(e,c);n(f,c)&&o(u,i(c,e),f)}return u}t.exports=a},{\"./_baseGet\":89,\"./_baseSet\":122,\"./_castPath\":133}],117:[function(e,t,n){function r(e){return function(t){return null==t?void 0:t[e]}}t.exports=r},{}],118:[function(e,t,n){var r=e(\"./_baseGet\");function o(e){return function(t){return r(t,e)}}t.exports=o},{\"./_baseGet\":89}],119:[function(e,t,n){var r=Math.ceil,o=Math.max;function i(e,t,n,i){for(var a=-1,s=o(r((t-e)/(n||1)),0),u=Array(s);s--;)u[i?s:++a]=e,e+=n;return u}t.exports=i},{}],120:[function(e,t,n){function r(e,t,n,r,o){return o(e,(function(e,o,i){n=r?(r=!1,e):t(n,e,o,i)})),n}t.exports=r},{}],121:[function(e,t,n){var r=e(\"./identity\"),o=e(\"./_overRest\"),i=e(\"./_setToString\");function a(e,t){return i(o(e,t,r),e+\"\")}t.exports=a},{\"./_overRest\":207,\"./_setToString\":213,\"./identity\":241}],122:[function(e,t,n){var r=e(\"./_assignValue\"),o=e(\"./_castPath\"),i=e(\"./_isIndex\"),a=e(\"./isObject\"),s=e(\"./_toKey\");function u(e,t,n,u){if(!a(e))return e;for(var c=-1,f=(t=o(t,e)).length,d=f-1,h=e;null!=h&&++c<f;){var l=s(t[c]),p=n;if(c!=d){var v=h[l];void 0===(p=u?u(v,l,h):void 0)&&(p=a(v)?v:i(t[c+1])?[]:{})}r(h,l,p),h=h[l]}return e}t.exports=u},{\"./_assignValue\":75,\"./_castPath\":133,\"./_isIndex\":181,\"./_toKey\":223,\"./isObject\":251}],123:[function(e,t,n){var r=e(\"./constant\"),o=e(\"./_defineProperty\"),i=e(\"./identity\"),a=o?function(e,t){return o(e,\"toString\",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:i;t.exports=a},{\"./_defineProperty\":153,\"./constant\":228,\"./identity\":241}],124:[function(e,t,n){function r(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}t.exports=r},{}],125:[function(e,t,n){function r(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}t.exports=r},{}],126:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./_arrayMap\"),i=e(\"./isArray\"),a=e(\"./isSymbol\"),s=1/0,u=r?r.prototype:void 0,c=u?u.toString:void 0;function f(e){if(\"string\"==typeof e)return e;if(i(e))return o(e,f)+\"\";if(a(e))return c?c.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-s?\"-0\":t}t.exports=f},{\"./_Symbol\":60,\"./_arrayMap\":69,\"./isArray\":243,\"./isSymbol\":256}],127:[function(e,t,n){function r(e){return function(t){return e(t)}}t.exports=r},{}],128:[function(e,t,n){var r=e(\"./_SetCache\"),o=e(\"./_arrayIncludes\"),i=e(\"./_arrayIncludesWith\"),a=e(\"./_cacheHas\"),s=e(\"./_createSet\"),u=e(\"./_setToArray\"),c=200;function f(e,t,n){var f=-1,d=o,h=e.length,l=!0,p=[],v=p;if(n)l=!1,d=i;else if(h>=c){var _=t?null:s(e);if(_)return u(_);l=!1,d=a,v=new r}else v=t?[]:p;e:for(;++f<h;){var y=e[f],g=t?t(y):y;if(y=n||0!==y?y:0,l&&g==g){for(var b=v.length;b--;)if(v[b]===g)continue e;t&&v.push(g),p.push(y)}else d(v,g,n)||(v!==p&&v.push(g),p.push(y))}return p}t.exports=f},{\"./_SetCache\":58,\"./_arrayIncludes\":66,\"./_arrayIncludesWith\":67,\"./_cacheHas\":131,\"./_createSet\":152,\"./_setToArray\":212}],129:[function(e,t,n){var r=e(\"./_arrayMap\");function o(e,t){return r(t,(function(t){return e[t]}))}t.exports=o},{\"./_arrayMap\":69}],130:[function(e,t,n){function r(e,t,n){for(var r=-1,o=e.length,i=t.length,a={};++r<o;){var s=r<i?t[r]:void 0;n(a,e[r],s)}return a}t.exports=r},{}],131:[function(e,t,n){function r(e,t){return e.has(t)}t.exports=r},{}],132:[function(e,t,n){var r=e(\"./identity\");function o(e){return\"function\"==typeof e?e:r}t.exports=o},{\"./identity\":241}],133:[function(e,t,n){var r=e(\"./isArray\"),o=e(\"./_isKey\"),i=e(\"./_stringToPath\"),a=e(\"./toString\");function s(e,t){return r(e)?e:o(e,t)?[e]:i(a(e))}t.exports=s},{\"./_isKey\":183,\"./_stringToPath\":222,\"./isArray\":243,\"./toString\":283}],134:[function(e,t,n){var r=e(\"./_Uint8Array\");function o(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}t.exports=o},{\"./_Uint8Array\":61}],135:[function(e,t,n){var r=e(\"./_root\"),o=\"object\"==typeof n&&n&&!n.nodeType&&n,i=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o?r.Buffer:void 0,s=a?a.allocUnsafe:void 0;function u(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}t.exports=u},{\"./_root\":208}],136:[function(e,t,n){var r=e(\"./_cloneArrayBuffer\");function o(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}t.exports=o},{\"./_cloneArrayBuffer\":134}],137:[function(e,t,n){var r=/\\\\w*$/;function o(e){var t=new e.constructor(e.source,r.exec(e));return t.lastIndex=e.lastIndex,t}t.exports=o},{}],138:[function(e,t,n){var r=e(\"./_Symbol\"),o=r?r.prototype:void 0,i=o?o.valueOf:void 0;function a(e){return i?Object(i.call(e)):{}}t.exports=a},{\"./_Symbol\":60}],139:[function(e,t,n){var r=e(\"./_cloneArrayBuffer\");function o(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}t.exports=o},{\"./_cloneArrayBuffer\":134}],140:[function(e,t,n){var r=e(\"./isSymbol\");function o(e,t){if(e!==t){var n=void 0!==e,o=null===e,i=e==e,a=r(e),s=void 0!==t,u=null===t,c=t==t,f=r(t);if(!u&&!f&&!a&&e>t||a&&s&&c&&!u&&!f||o&&s&&c||!n&&c||!i)return 1;if(!o&&!a&&!f&&e<t||f&&n&&i&&!o&&!a||u&&n&&i||!s&&i||!c)return-1}return 0}t.exports=o},{\"./isSymbol\":256}],141:[function(e,t,n){var r=e(\"./_compareAscending\");function o(e,t,n){for(var o=-1,i=e.criteria,a=t.criteria,s=i.length,u=n.length;++o<s;){var c=r(i[o],a[o]);if(c)return o>=u?c:c*(\"desc\"==n[o]?-1:1)}return e.index-t.index}t.exports=o},{\"./_compareAscending\":140}],142:[function(e,t,n){function r(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}t.exports=r},{}],143:[function(e,t,n){var r=e(\"./_assignValue\"),o=e(\"./_baseAssignValue\");function i(e,t,n,i){var a=!n;n||(n={});for(var s=-1,u=t.length;++s<u;){var c=t[s],f=i?i(n[c],e[c],c,n,e):void 0;void 0===f&&(f=e[c]),a?o(n,c,f):r(n,c,f)}return n}t.exports=i},{\"./_assignValue\":75,\"./_baseAssignValue\":79}],144:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./_getSymbols\");function i(e,t){return r(e,o(e),t)}t.exports=i},{\"./_copyObject\":143,\"./_getSymbols\":166}],145:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./_getSymbolsIn\");function i(e,t){return r(e,o(e),t)}t.exports=i},{\"./_copyObject\":143,\"./_getSymbolsIn\":167}],146:[function(e,t,n){var r=e(\"./_root\")[\"__core-js_shared__\"];t.exports=r},{\"./_root\":208}],147:[function(e,t,n){var r=e(\"./_baseRest\"),o=e(\"./_isIterateeCall\");function i(e){return r((function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(a=e.length>3&&\"function\"==typeof a?(i--,a):void 0,s&&o(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),t=Object(t);++r<i;){var u=n[r];u&&e(t,u,r,a)}return t}))}t.exports=i},{\"./_baseRest\":121,\"./_isIterateeCall\":182}],148:[function(e,t,n){var r=e(\"./isArrayLike\");function o(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var i=n.length,a=t?i:-1,s=Object(n);(t?a--:++a<i)&&!1!==o(s[a],a,s););return n}}t.exports=o},{\"./isArrayLike\":244}],149:[function(e,t,n){function r(e){return function(t,n,r){for(var o=-1,i=Object(t),a=r(t),s=a.length;s--;){var u=a[e?s:++o];if(!1===n(i[u],u,i))break}return t}}t.exports=r},{}],150:[function(e,t,n){var r=e(\"./_baseIteratee\"),o=e(\"./isArrayLike\"),i=e(\"./keys\");function a(e){return function(t,n,a){var s=Object(t);if(!o(t)){var u=r(n,3);t=i(t),n=function(e){return u(s[e],e,s)}}var c=e(t,n,a);return c>-1?s[u?t[c]:c]:void 0}}t.exports=a},{\"./_baseIteratee\":105,\"./isArrayLike\":244,\"./keys\":259}],151:[function(e,t,n){var r=e(\"./_baseRange\"),o=e(\"./_isIterateeCall\"),i=e(\"./toFinite\");function a(e){return function(t,n,a){return a&&\"number\"!=typeof a&&o(t,n,a)&&(n=a=void 0),t=i(t),void 0===n?(n=t,t=0):n=i(n),a=void 0===a?t<n?1:-1:i(a),r(t,n,a,e)}}t.exports=a},{\"./_baseRange\":119,\"./_isIterateeCall\":182,\"./toFinite\":279}],152:[function(e,t,n){var r=e(\"./_Set\"),o=e(\"./noop\"),i=e(\"./_setToArray\"),a=1/0,s=r&&1/i(new r([,-0]))[1]==a?function(e){return new r(e)}:o;t.exports=s},{\"./_Set\":57,\"./_setToArray\":212,\"./noop\":269}],153:[function(e,t,n){var r=e(\"./_getNative\"),o=function(){try{var e=r(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}();t.exports=o},{\"./_getNative\":163}],154:[function(e,t,n){var r=e(\"./_SetCache\"),o=e(\"./_arraySome\"),i=e(\"./_cacheHas\"),a=1,s=2;function u(e,t,n,u,c,f){var d=n&a,h=e.length,l=t.length;if(h!=l&&!(d&&l>h))return!1;var p=f.get(e);if(p&&f.get(t))return p==t;var v=-1,_=!0,y=n&s?new r:void 0;for(f.set(e,t),f.set(t,e);++v<h;){var g=e[v],b=t[v];if(u)var m=d?u(b,g,v,t,e,f):u(g,b,v,e,t,f);if(void 0!==m){if(m)continue;_=!1;break}if(y){if(!o(t,(function(e,t){if(!i(y,t)&&(g===e||c(g,e,n,u,f)))return y.push(t)}))){_=!1;break}}else if(g!==b&&!c(g,b,n,u,f)){_=!1;break}}return f.delete(e),f.delete(t),_}t.exports=u},{\"./_SetCache\":58,\"./_arraySome\":72,\"./_cacheHas\":131}],155:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./_Uint8Array\"),i=e(\"./eq\"),a=e(\"./_equalArrays\"),s=e(\"./_mapToArray\"),u=e(\"./_setToArray\"),c=1,f=2,d=\"[object Boolean]\",h=\"[object Date]\",l=\"[object Error]\",p=\"[object Map]\",v=\"[object Number]\",_=\"[object RegExp]\",y=\"[object Set]\",g=\"[object String]\",b=\"[object Symbol]\",m=\"[object ArrayBuffer]\",x=\"[object DataView]\",w=r?r.prototype:void 0,E=w?w.valueOf:void 0;function j(e,t,n,r,w,j,k){switch(n){case x:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case m:return!(e.byteLength!=t.byteLength||!j(new o(e),new o(t)));case d:case h:case v:return i(+e,+t);case l:return e.name==t.name&&e.message==t.message;case _:case g:return e==t+\"\";case p:var A=s;case y:var O=r&c;if(A||(A=u),e.size!=t.size&&!O)return!1;var I=k.get(e);if(I)return I==t;r|=f,k.set(e,t);var S=a(A(e),A(t),r,w,j,k);return k.delete(e),S;case b:if(E)return E.call(e)==E.call(t)}return!1}t.exports=j},{\"./_Symbol\":60,\"./_Uint8Array\":61,\"./_equalArrays\":154,\"./_mapToArray\":198,\"./_setToArray\":212,\"./eq\":231}],156:[function(e,t,n){var r=e(\"./_getAllKeys\"),o=1,i=Object.prototype.hasOwnProperty;function a(e,t,n,a,s,u){var c=n&o,f=r(e),d=f.length;if(d!=r(t).length&&!c)return!1;for(var h=d;h--;){var l=f[h];if(!(c?l in t:i.call(t,l)))return!1}var p=u.get(e);if(p&&u.get(t))return p==t;var v=!0;u.set(e,t),u.set(t,e);for(var _=c;++h<d;){var y=e[l=f[h]],g=t[l];if(a)var b=c?a(g,y,l,t,e,u):a(y,g,l,e,t,u);if(!(void 0===b?y===g||s(y,g,n,a,u):b)){v=!1;break}_||(_=\"constructor\"==l)}if(v&&!_){var m=e.constructor,x=t.constructor;m==x||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof x&&x instanceof x||(v=!1)}return u.delete(e),u.delete(t),v}t.exports=a},{\"./_getAllKeys\":159}],157:[function(e,t,n){var r=e(\"./flatten\"),o=e(\"./_overRest\"),i=e(\"./_setToString\");function a(e){return i(o(e,void 0,r),e+\"\")}t.exports=a},{\"./_overRest\":207,\"./_setToString\":213,\"./flatten\":235}],158:[function(t,n,r){(function(e){var t=\"object\"==typeof e&&e&&e.Object===Object&&e;n.exports=t}).call(this,void 0!==e?e:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],159:[function(e,t,n){var r=e(\"./_baseGetAllKeys\"),o=e(\"./_getSymbols\"),i=e(\"./keys\");function a(e){return r(e,i,o)}t.exports=a},{\"./_baseGetAllKeys\":90,\"./_getSymbols\":166,\"./keys\":259}],160:[function(e,t,n){var r=e(\"./_baseGetAllKeys\"),o=e(\"./_getSymbolsIn\"),i=e(\"./keysIn\");function a(e){return r(e,i,o)}t.exports=a},{\"./_baseGetAllKeys\":90,\"./_getSymbolsIn\":167,\"./keysIn\":260}],161:[function(e,t,n){var r=e(\"./_isKeyable\");function o(e,t){var n=e.__data__;return r(t)?n[\"string\"==typeof t?\"string\":\"hash\"]:n.map}t.exports=o},{\"./_isKeyable\":184}],162:[function(e,t,n){var r=e(\"./_isStrictComparable\"),o=e(\"./keys\");function i(e){for(var t=o(e),n=t.length;n--;){var i=t[n],a=e[i];t[n]=[i,a,r(a)]}return t}t.exports=i},{\"./_isStrictComparable\":187,\"./keys\":259}],163:[function(e,t,n){var r=e(\"./_baseIsNative\"),o=e(\"./_getValue\");function i(e,t){var n=o(e,t);return r(n)?n:void 0}t.exports=i},{\"./_baseIsNative\":102,\"./_getValue\":169}],164:[function(e,t,n){var r=e(\"./_overArg\")(Object.getPrototypeOf,Object);t.exports=r},{\"./_overArg\":206}],165:[function(e,t,n){var r=e(\"./_Symbol\"),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=r?r.toStringTag:void 0;function u(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var o=a.call(e);return r&&(t?e[s]=n:delete e[s]),o}t.exports=u},{\"./_Symbol\":60}],166:[function(e,t,n){var r=e(\"./_arrayFilter\"),o=e(\"./stubArray\"),i=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(e){return null==e?[]:(e=Object(e),r(a(e),(function(t){return i.call(e,t)})))}:o;t.exports=s},{\"./_arrayFilter\":65,\"./stubArray\":277}],167:[function(e,t,n){var r=e(\"./_arrayPush\"),o=e(\"./_getPrototype\"),i=e(\"./_getSymbols\"),a=e(\"./stubArray\"),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,i(e)),e=o(e);return t}:a;t.exports=s},{\"./_arrayPush\":70,\"./_getPrototype\":164,\"./_getSymbols\":166,\"./stubArray\":277}],168:[function(e,t,n){var r=e(\"./_DataView\"),o=e(\"./_Map\"),i=e(\"./_Promise\"),a=e(\"./_Set\"),s=e(\"./_WeakMap\"),u=e(\"./_baseGetTag\"),c=e(\"./_toSource\"),f=\"[object Map]\",d=\"[object Object]\",h=\"[object Promise]\",l=\"[object Set]\",p=\"[object WeakMap]\",v=\"[object DataView]\",_=c(r),y=c(o),g=c(i),b=c(a),m=c(s),x=u;(r&&x(new r(new ArrayBuffer(1)))!=v||o&&x(new o)!=f||i&&x(i.resolve())!=h||a&&x(new a)!=l||s&&x(new s)!=p)&&(x=function(e){var t=u(e),n=t==d?e.constructor:void 0,r=n?c(n):\"\";if(r)switch(r){case _:return v;case y:return f;case g:return h;case b:return l;case m:return p}return t}),t.exports=x},{\"./_DataView\":51,\"./_Map\":54,\"./_Promise\":56,\"./_Set\":57,\"./_WeakMap\":62,\"./_baseGetTag\":91,\"./_toSource\":224}],169:[function(e,t,n){function r(e,t){return null==e?void 0:e[t]}t.exports=r},{}],170:[function(e,t,n){var r=e(\"./_castPath\"),o=e(\"./isArguments\"),i=e(\"./isArray\"),a=e(\"./_isIndex\"),s=e(\"./isLength\"),u=e(\"./_toKey\");function c(e,t,n){for(var c=-1,f=(t=r(t,e)).length,d=!1;++c<f;){var h=u(t[c]);if(!(d=null!=e&&n(e,h)))break;e=e[h]}return d||++c!=f?d:!!(f=null==e?0:e.length)&&s(f)&&a(h,f)&&(i(e)||o(e))}t.exports=c},{\"./_castPath\":133,\"./_isIndex\":181,\"./_toKey\":223,\"./isArguments\":242,\"./isArray\":243,\"./isLength\":249}],171:[function(e,t,n){var r=RegExp(\"[\\\\\\\\u200d\\\\\\\\ud800-\\\\\\\\udfff\\\\\\\\u0300-\\\\\\\\u036f\\\\\\\\ufe20-\\\\\\\\ufe2f\\\\\\\\u20d0-\\\\\\\\u20ff\\\\\\\\ufe0e\\\\\\\\ufe0f]\");function o(e){return r.test(e)}t.exports=o},{}],172:[function(e,t,n){var r=e(\"./_nativeCreate\");function o(){this.__data__=r?r(null):{},this.size=0}t.exports=o},{\"./_nativeCreate\":201}],173:[function(e,t,n){function r(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}t.exports=r},{}],174:[function(e,t,n){var r=e(\"./_nativeCreate\"),o=\"__lodash_hash_undefined__\",i=Object.prototype.hasOwnProperty;function a(e){var t=this.__data__;if(r){var n=t[e];return n===o?void 0:n}return i.call(t,e)?t[e]:void 0}t.exports=a},{\"./_nativeCreate\":201}],175:[function(e,t,n){var r=e(\"./_nativeCreate\"),o=Object.prototype.hasOwnProperty;function i(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}t.exports=i},{\"./_nativeCreate\":201}],176:[function(e,t,n){var r=e(\"./_nativeCreate\"),o=\"__lodash_hash_undefined__\";function i(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?o:t,this}t.exports=i},{\"./_nativeCreate\":201}],177:[function(e,t,n){var r=Object.prototype.hasOwnProperty;function o(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&r.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}t.exports=o},{}],178:[function(e,t,n){var r=e(\"./_cloneArrayBuffer\"),o=e(\"./_cloneDataView\"),i=e(\"./_cloneRegExp\"),a=e(\"./_cloneSymbol\"),s=e(\"./_cloneTypedArray\"),u=\"[object Boolean]\",c=\"[object Date]\",f=\"[object Map]\",d=\"[object Number]\",h=\"[object RegExp]\",l=\"[object Set]\",p=\"[object String]\",v=\"[object Symbol]\",_=\"[object ArrayBuffer]\",y=\"[object DataView]\",g=\"[object Float32Array]\",b=\"[object Float64Array]\",m=\"[object Int8Array]\",x=\"[object Int16Array]\",w=\"[object Int32Array]\",E=\"[object Uint8Array]\",j=\"[object Uint8ClampedArray]\",k=\"[object Uint16Array]\",A=\"[object Uint32Array]\";function O(e,t,n){var O=e.constructor;switch(t){case _:return r(e);case u:case c:return new O(+e);case y:return o(e,n);case g:case b:case m:case x:case w:case E:case j:case k:case A:return s(e,n);case f:return new O;case d:case p:return new O(e);case h:return i(e);case l:return new O;case v:return a(e)}}t.exports=O},{\"./_cloneArrayBuffer\":134,\"./_cloneDataView\":136,\"./_cloneRegExp\":137,\"./_cloneSymbol\":138,\"./_cloneTypedArray\":139}],179:[function(e,t,n){var r=e(\"./_baseCreate\"),o=e(\"./_getPrototype\"),i=e(\"./_isPrototype\");function a(e){return\"function\"!=typeof e.constructor||i(e)?{}:r(o(e))}t.exports=a},{\"./_baseCreate\":81,\"./_getPrototype\":164,\"./_isPrototype\":186}],180:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./isArguments\"),i=e(\"./isArray\"),a=r?r.isConcatSpreadable:void 0;function s(e){return i(e)||o(e)||!!(a&&e&&e[a])}t.exports=s},{\"./_Symbol\":60,\"./isArguments\":242,\"./isArray\":243}],181:[function(e,t,n){var r=9007199254740991,o=/^(?:0|[1-9]\\\\d*)$/;function i(e,t){var n=typeof e;return!!(t=null==t?r:t)&&(\"number\"==n||\"symbol\"!=n&&o.test(e))&&e>-1&&e%1==0&&e<t}t.exports=i},{}],182:[function(e,t,n){var r=e(\"./eq\"),o=e(\"./isArrayLike\"),i=e(\"./_isIndex\"),a=e(\"./isObject\");function s(e,t,n){if(!a(n))return!1;var s=typeof t;return!!(\"number\"==s?o(n)&&i(t,n.length):\"string\"==s&&t in n)&&r(n[t],e)}t.exports=s},{\"./_isIndex\":181,\"./eq\":231,\"./isArrayLike\":244,\"./isObject\":251}],183:[function(e,t,n){var r=e(\"./isArray\"),o=e(\"./isSymbol\"),i=/\\\\.|\\\\[(?:[^[\\\\]]*|([\"'])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\.)*?\\\\1)\\\\]/,a=/^\\\\w*$/;function s(e,t){if(r(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!o(e))||a.test(e)||!i.test(e)||null!=t&&e in Object(t)}t.exports=s},{\"./isArray\":243,\"./isSymbol\":256}],184:[function(e,t,n){function r(e){var t=typeof e;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==e:null===e}t.exports=r},{}],185:[function(e,t,n){var r,o=e(\"./_coreJsData\"),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\";function a(e){return!!i&&i in e}t.exports=a},{\"./_coreJsData\":146}],186:[function(e,t,n){var r=Object.prototype;function o(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||r)}t.exports=o},{}],187:[function(e,t,n){var r=e(\"./isObject\");function o(e){return e==e&&!r(e)}t.exports=o},{\"./isObject\":251}],188:[function(e,t,n){function r(){this.__data__=[],this.size=0}t.exports=r},{}],189:[function(e,t,n){var r=e(\"./_assocIndexOf\"),o=Array.prototype.splice;function i(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():o.call(t,n,1),--this.size,0))}t.exports=i},{\"./_assocIndexOf\":76}],190:[function(e,t,n){var r=e(\"./_assocIndexOf\");function o(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}t.exports=o},{\"./_assocIndexOf\":76}],191:[function(e,t,n){var r=e(\"./_assocIndexOf\");function o(e){return r(this.__data__,e)>-1}t.exports=o},{\"./_assocIndexOf\":76}],192:[function(e,t,n){var r=e(\"./_assocIndexOf\");function o(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}t.exports=o},{\"./_assocIndexOf\":76}],193:[function(e,t,n){var r=e(\"./_Hash\"),o=e(\"./_ListCache\"),i=e(\"./_Map\");function a(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}t.exports=a},{\"./_Hash\":52,\"./_ListCache\":53,\"./_Map\":54}],194:[function(e,t,n){var r=e(\"./_getMapData\");function o(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}t.exports=o},{\"./_getMapData\":161}],195:[function(e,t,n){var r=e(\"./_getMapData\");function o(e){return r(this,e).get(e)}t.exports=o},{\"./_getMapData\":161}],196:[function(e,t,n){var r=e(\"./_getMapData\");function o(e){return r(this,e).has(e)}t.exports=o},{\"./_getMapData\":161}],197:[function(e,t,n){var r=e(\"./_getMapData\");function o(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}t.exports=o},{\"./_getMapData\":161}],198:[function(e,t,n){function r(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}t.exports=r},{}],199:[function(e,t,n){function r(e,t){return function(n){return null!=n&&n[e]===t&&(void 0!==t||e in Object(n))}}t.exports=r},{}],200:[function(e,t,n){var r=e(\"./memoize\"),o=500;function i(e){var t=r(e,(function(e){return n.size===o&&n.clear(),e})),n=t.cache;return t}t.exports=i},{\"./memoize\":265}],201:[function(e,t,n){var r=e(\"./_getNative\")(Object,\"create\");t.exports=r},{\"./_getNative\":163}],202:[function(e,t,n){var r=e(\"./_overArg\")(Object.keys,Object);t.exports=r},{\"./_overArg\":206}],203:[function(e,t,n){function r(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}t.exports=r},{}],204:[function(e,t,n){var r=e(\"./_freeGlobal\"),o=\"object\"==typeof n&&n&&!n.nodeType&&n,i=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o&&r.process,s=function(){try{var e=i&&i.require&&i.require(\"util\").types;return e||a&&a.binding&&a.binding(\"util\")}catch(e){}}();t.exports=s},{\"./_freeGlobal\":158}],205:[function(e,t,n){var r=Object.prototype.toString;function o(e){return r.call(e)}t.exports=o},{}],206:[function(e,t,n){function r(e,t){return function(n){return e(t(n))}}t.exports=r},{}],207:[function(e,t,n){var r=e(\"./_apply\"),o=Math.max;function i(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,a=-1,s=o(i.length-t,0),u=Array(s);++a<s;)u[a]=i[t+a];a=-1;for(var c=Array(t+1);++a<t;)c[a]=i[a];return c[t]=n(u),r(e,this,c)}}t.exports=i},{\"./_apply\":63}],208:[function(e,t,n){var r=e(\"./_freeGlobal\"),o=\"object\"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function(\"return this\")();t.exports=i},{\"./_freeGlobal\":158}],209:[function(e,t,n){function r(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}t.exports=r},{}],210:[function(e,t,n){var r=\"__lodash_hash_undefined__\";function o(e){return this.__data__.set(e,r),this}t.exports=o},{}],211:[function(e,t,n){function r(e){return this.__data__.has(e)}t.exports=r},{}],212:[function(e,t,n){function r(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}t.exports=r},{}],213:[function(e,t,n){var r=e(\"./_baseSetToString\"),o=e(\"./_shortOut\")(r);t.exports=o},{\"./_baseSetToString\":123,\"./_shortOut\":214}],214:[function(e,t,n){var r=800,o=16,i=Date.now;function a(e){var t=0,n=0;return function(){var a=i(),s=o-(a-n);if(n=a,s>0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}t.exports=a},{}],215:[function(e,t,n){var r=e(\"./_ListCache\");function o(){this.__data__=new r,this.size=0}t.exports=o},{\"./_ListCache\":53}],216:[function(e,t,n){function r(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}t.exports=r},{}],217:[function(e,t,n){function r(e){return this.__data__.get(e)}t.exports=r},{}],218:[function(e,t,n){function r(e){return this.__data__.has(e)}t.exports=r},{}],219:[function(e,t,n){var r=e(\"./_ListCache\"),o=e(\"./_Map\"),i=e(\"./_MapCache\"),a=200;function s(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length<a-1)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(e,t),this.size=n.size,this}t.exports=s},{\"./_ListCache\":53,\"./_Map\":54,\"./_MapCache\":55}],220:[function(e,t,n){function r(e,t,n){for(var r=n-1,o=e.length;++r<o;)if(e[r]===t)return r;return-1}t.exports=r},{}],221:[function(e,t,n){var r=e(\"./_asciiSize\"),o=e(\"./_hasUnicode\"),i=e(\"./_unicodeSize\");function a(e){return o(e)?i(e):r(e)}t.exports=a},{\"./_asciiSize\":73,\"./_hasUnicode\":171,\"./_unicodeSize\":225}],222:[function(e,t,n){var r=e(\"./_memoizeCapped\"),o=/[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))/g,i=/\\\\\\\\(\\\\\\\\)?/g,a=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(i,\"$1\"):n||e)})),t}));t.exports=a},{\"./_memoizeCapped\":200}],223:[function(e,t,n){var r=e(\"./isSymbol\"),o=1/0;function i(e){if(\"string\"==typeof e||r(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-o?\"-0\":t}t.exports=i},{\"./isSymbol\":256}],224:[function(e,t,n){var r=Function.prototype.toString;function o(e){if(null!=e){try{return r.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}t.exports=o},{}],225:[function(e,t,n){var r=\"\\\\\\\\ud800-\\\\\\\\udfff\",o=\"[\"+r+\"]\",i=\"[\\\\\\\\u0300-\\\\\\\\u036f\\\\\\\\ufe20-\\\\\\\\ufe2f\\\\\\\\u20d0-\\\\\\\\u20ff]\",a=\"\\\\\\\\ud83c[\\\\\\\\udffb-\\\\\\\\udfff]\",s=\"[^\"+r+\"]\",u=\"(?:\\\\\\\\ud83c[\\\\\\\\udde6-\\\\\\\\uddff]){2}\",c=\"[\\\\\\\\ud800-\\\\\\\\udbff][\\\\\\\\udc00-\\\\\\\\udfff]\",f=\"(?:\"+i+\"|\"+a+\")?\",d=\"[\\\\\\\\ufe0e\\\\\\\\ufe0f]?\",h=d+f+\"(?:\\\\\\\\u200d(?:\"+[s,u,c].join(\"|\")+\")\"+d+f+\")*\",l=\"(?:\"+[s+i+\"?\",i,u,c,o].join(\"|\")+\")\",p=RegExp(a+\"(?=\"+a+\")|\"+l+h,\"g\");function v(e){for(var t=p.lastIndex=0;p.test(e);)++t;return t}t.exports=v},{}],226:[function(e,t,n){var r=e(\"./_baseClone\"),o=4;function i(e){return r(e,o)}t.exports=i},{\"./_baseClone\":80}],227:[function(e,t,n){var r=e(\"./_baseClone\"),o=1,i=4;function a(e){return r(e,o|i)}t.exports=a},{\"./_baseClone\":80}],228:[function(e,t,n){function r(e){return function(){return e}}t.exports=r},{}],229:[function(e,t,n){var r=e(\"./_baseRest\"),o=e(\"./eq\"),i=e(\"./_isIterateeCall\"),a=e(\"./keysIn\"),s=Object.prototype,u=s.hasOwnProperty,c=r((function(e,t){e=Object(e);var n=-1,r=t.length,c=r>2?t[2]:void 0;for(c&&i(t[0],t[1],c)&&(r=1);++n<r;)for(var f=t[n],d=a(f),h=-1,l=d.length;++h<l;){var p=d[h],v=e[p];(void 0===v||o(v,s[p])&&!u.call(e,p))&&(e[p]=f[p])}return e}));t.exports=c},{\"./_baseRest\":121,\"./_isIterateeCall\":182,\"./eq\":231,\"./keysIn\":260}],230:[function(e,t,n){t.exports=e(\"./forEach\")},{\"./forEach\":236}],231:[function(e,t,n){function r(e,t){return e===t||e!=e&&t!=t}t.exports=r},{}],232:[function(e,t,n){var r=e(\"./_arrayFilter\"),o=e(\"./_baseFilter\"),i=e(\"./_baseIteratee\"),a=e(\"./isArray\");function s(e,t){return(a(e)?r:o)(e,i(t,3))}t.exports=s},{\"./_arrayFilter\":65,\"./_baseFilter\":84,\"./_baseIteratee\":105,\"./isArray\":243}],233:[function(e,t,n){var r=e(\"./_createFind\")(e(\"./findIndex\"));t.exports=r},{\"./_createFind\":150,\"./findIndex\":234}],234:[function(e,t,n){var r=e(\"./_baseFindIndex\"),o=e(\"./_baseIteratee\"),i=e(\"./toInteger\"),a=Math.max;function s(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var u=null==n?0:i(n);return u<0&&(u=a(s+u,0)),r(e,o(t,3),u)}t.exports=s},{\"./_baseFindIndex\":85,\"./_baseIteratee\":105,\"./toInteger\":280}],235:[function(e,t,n){var r=e(\"./_baseFlatten\");function o(e){return null!=e&&e.length?r(e,1):[]}t.exports=o},{\"./_baseFlatten\":86}],236:[function(e,t,n){var r=e(\"./_arrayEach\"),o=e(\"./_baseEach\"),i=e(\"./_castFunction\"),a=e(\"./isArray\");function s(e,t){return(a(e)?r:o)(e,i(t))}t.exports=s},{\"./_arrayEach\":64,\"./_baseEach\":82,\"./_castFunction\":132,\"./isArray\":243}],237:[function(e,t,n){var r=e(\"./_baseFor\"),o=e(\"./_castFunction\"),i=e(\"./keysIn\");function a(e,t){return null==e?e:r(e,o(t),i)}t.exports=a},{\"./_baseFor\":87,\"./_castFunction\":132,\"./keysIn\":260}],238:[function(e,t,n){var r=e(\"./_baseGet\");function o(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}t.exports=o},{\"./_baseGet\":89}],239:[function(e,t,n){var r=e(\"./_baseHas\"),o=e(\"./_hasPath\");function i(e,t){return null!=e&&o(e,t,r)}t.exports=i},{\"./_baseHas\":93,\"./_hasPath\":170}],240:[function(e,t,n){var r=e(\"./_baseHasIn\"),o=e(\"./_hasPath\");function i(e,t){return null!=e&&o(e,t,r)}t.exports=i},{\"./_baseHasIn\":94,\"./_hasPath\":170}],241:[function(e,t,n){function r(e){return e}t.exports=r},{}],242:[function(e,t,n){var r=e(\"./_baseIsArguments\"),o=e(\"./isObjectLike\"),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,\"callee\")&&!s.call(e,\"callee\")};t.exports=u},{\"./_baseIsArguments\":96,\"./isObjectLike\":252}],243:[function(e,t,n){var r=Array.isArray;t.exports=r},{}],244:[function(e,t,n){var r=e(\"./isFunction\"),o=e(\"./isLength\");function i(e){return null!=e&&o(e.length)&&!r(e)}t.exports=i},{\"./isFunction\":248,\"./isLength\":249}],245:[function(e,t,n){var r=e(\"./isArrayLike\"),o=e(\"./isObjectLike\");function i(e){return o(e)&&r(e)}t.exports=i},{\"./isArrayLike\":244,\"./isObjectLike\":252}],246:[function(e,t,n){var r=e(\"./_root\"),o=e(\"./stubFalse\"),i=\"object\"==typeof n&&n&&!n.nodeType&&n,a=i&&\"object\"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===i?r.Buffer:void 0,u=(s?s.isBuffer:void 0)||o;t.exports=u},{\"./_root\":208,\"./stubFalse\":278}],247:[function(e,t,n){var r=e(\"./_baseKeys\"),o=e(\"./_getTag\"),i=e(\"./isArguments\"),a=e(\"./isArray\"),s=e(\"./isArrayLike\"),u=e(\"./isBuffer\"),c=e(\"./_isPrototype\"),f=e(\"./isTypedArray\"),d=\"[object Map]\",h=\"[object Set]\",l=Object.prototype.hasOwnProperty;function p(e){if(null==e)return!0;if(s(e)&&(a(e)||\"string\"==typeof e||\"function\"==typeof e.splice||u(e)||f(e)||i(e)))return!e.length;var t=o(e);if(t==d||t==h)return!e.size;if(c(e))return!r(e).length;for(var n in e)if(l.call(e,n))return!1;return!0}t.exports=p},{\"./_baseKeys\":106,\"./_getTag\":168,\"./_isPrototype\":186,\"./isArguments\":242,\"./isArray\":243,\"./isArrayLike\":244,\"./isBuffer\":246,\"./isTypedArray\":257}],248:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isObject\"),i=\"[object AsyncFunction]\",a=\"[object Function]\",s=\"[object GeneratorFunction]\",u=\"[object Proxy]\";function c(e){if(!o(e))return!1;var t=r(e);return t==a||t==s||t==i||t==u}t.exports=c},{\"./_baseGetTag\":91,\"./isObject\":251}],249:[function(e,t,n){var r=9007199254740991;function o(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=r}t.exports=o},{}],250:[function(e,t,n){var r=e(\"./_baseIsMap\"),o=e(\"./_baseUnary\"),i=e(\"./_nodeUtil\"),a=i&&i.isMap,s=a?o(a):r;t.exports=s},{\"./_baseIsMap\":99,\"./_baseUnary\":127,\"./_nodeUtil\":204}],251:[function(e,t,n){function r(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}t.exports=r},{}],252:[function(e,t,n){function r(e){return null!=e&&\"object\"==typeof e}t.exports=r},{}],253:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./_getPrototype\"),i=e(\"./isObjectLike\"),a=\"[object Object]\",s=Function.prototype,u=Object.prototype,c=s.toString,f=u.hasOwnProperty,d=c.call(Object);function h(e){if(!i(e)||r(e)!=a)return!1;var t=o(e);if(null===t)return!0;var n=f.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&c.call(n)==d}t.exports=h},{\"./_baseGetTag\":91,\"./_getPrototype\":164,\"./isObjectLike\":252}],254:[function(e,t,n){var r=e(\"./_baseIsSet\"),o=e(\"./_baseUnary\"),i=e(\"./_nodeUtil\"),a=i&&i.isSet,s=a?o(a):r;t.exports=s},{\"./_baseIsSet\":103,\"./_baseUnary\":127,\"./_nodeUtil\":204}],255:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isArray\"),i=e(\"./isObjectLike\"),a=\"[object String]\";function s(e){return\"string\"==typeof e||!o(e)&&i(e)&&r(e)==a}t.exports=s},{\"./_baseGetTag\":91,\"./isArray\":243,\"./isObjectLike\":252}],256:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isObjectLike\"),i=\"[object Symbol]\";function a(e){return\"symbol\"==typeof e||o(e)&&r(e)==i}t.exports=a},{\"./_baseGetTag\":91,\"./isObjectLike\":252}],257:[function(e,t,n){var r=e(\"./_baseIsTypedArray\"),o=e(\"./_baseUnary\"),i=e(\"./_nodeUtil\"),a=i&&i.isTypedArray,s=a?o(a):r;t.exports=s},{\"./_baseIsTypedArray\":104,\"./_baseUnary\":127,\"./_nodeUtil\":204}],258:[function(e,t,n){function r(e){return void 0===e}t.exports=r},{}],259:[function(e,t,n){var r=e(\"./_arrayLikeKeys\"),o=e(\"./_baseKeys\"),i=e(\"./isArrayLike\");function a(e){return i(e)?r(e):o(e)}t.exports=a},{\"./_arrayLikeKeys\":68,\"./_baseKeys\":106,\"./isArrayLike\":244}],260:[function(e,t,n){var r=e(\"./_arrayLikeKeys\"),o=e(\"./_baseKeysIn\"),i=e(\"./isArrayLike\");function a(e){return i(e)?r(e,!0):o(e)}t.exports=a},{\"./_arrayLikeKeys\":68,\"./_baseKeysIn\":107,\"./isArrayLike\":244}],261:[function(e,t,n){function r(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}t.exports=r},{}],262:[function(e,t,n){var r=e(\"./_arrayMap\"),o=e(\"./_baseIteratee\"),i=e(\"./_baseMap\"),a=e(\"./isArray\");function s(e,t){return(a(e)?r:i)(e,o(t,3))}t.exports=s},{\"./_arrayMap\":69,\"./_baseIteratee\":105,\"./_baseMap\":109,\"./isArray\":243}],263:[function(e,t,n){var r=e(\"./_baseAssignValue\"),o=e(\"./_baseForOwn\"),i=e(\"./_baseIteratee\");function a(e,t){var n={};return t=i(t,3),o(e,(function(e,o,i){r(n,o,t(e,o,i))})),n}t.exports=a},{\"./_baseAssignValue\":79,\"./_baseForOwn\":88,\"./_baseIteratee\":105}],264:[function(e,t,n){var r=e(\"./_baseExtremum\"),o=e(\"./_baseGt\"),i=e(\"./identity\");function a(e){return e&&e.length?r(e,i,o):void 0}t.exports=a},{\"./_baseExtremum\":83,\"./_baseGt\":92,\"./identity\":241}],265:[function(e,t,n){var r=e(\"./_MapCache\"),o=\"Expected a function\";function i(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new TypeError(o);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},{\"./_MapCache\":55}],266:[function(e,t,n){var r=e(\"./_baseMerge\"),o=e(\"./_createAssigner\")((function(e,t,n){r(e,t,n)}));t.exports=o},{\"./_baseMerge\":112,\"./_createAssigner\":147}],267:[function(e,t,n){var r=e(\"./_baseExtremum\"),o=e(\"./_baseLt\"),i=e(\"./identity\");function a(e){return e&&e.length?r(e,i,o):void 0}t.exports=a},{\"./_baseExtremum\":83,\"./_baseLt\":108,\"./identity\":241}],268:[function(e,t,n){var r=e(\"./_baseExtremum\"),o=e(\"./_baseIteratee\"),i=e(\"./_baseLt\");function a(e,t){return e&&e.length?r(e,o(t,2),i):void 0}t.exports=a},{\"./_baseExtremum\":83,\"./_baseIteratee\":105,\"./_baseLt\":108}],269:[function(e,t,n){function r(){}t.exports=r},{}],270:[function(e,t,n){var r=e(\"./_root\"),o=function(){return r.Date.now()};t.exports=o},{\"./_root\":208}],271:[function(e,t,n){var r=e(\"./_basePick\"),o=e(\"./_flatRest\")((function(e,t){return null==e?{}:r(e,t)}));t.exports=o},{\"./_basePick\":115,\"./_flatRest\":157}],272:[function(e,t,n){var r=e(\"./_baseProperty\"),o=e(\"./_basePropertyDeep\"),i=e(\"./_isKey\"),a=e(\"./_toKey\");function s(e){return i(e)?r(a(e)):o(e)}t.exports=s},{\"./_baseProperty\":117,\"./_basePropertyDeep\":118,\"./_isKey\":183,\"./_toKey\":223}],273:[function(e,t,n){var r=e(\"./_createRange\")();t.exports=r},{\"./_createRange\":151}],274:[function(e,t,n){var r=e(\"./_arrayReduce\"),o=e(\"./_baseEach\"),i=e(\"./_baseIteratee\"),a=e(\"./_baseReduce\"),s=e(\"./isArray\");function u(e,t,n){var u=s(e)?r:a,c=arguments.length<3;return u(e,i(t,4),n,c,o)}t.exports=u},{\"./_arrayReduce\":71,\"./_baseEach\":82,\"./_baseIteratee\":105,\"./_baseReduce\":120,\"./isArray\":243}],275:[function(e,t,n){var r=e(\"./_baseKeys\"),o=e(\"./_getTag\"),i=e(\"./isArrayLike\"),a=e(\"./isString\"),s=e(\"./_stringSize\"),u=\"[object Map]\",c=\"[object Set]\";function f(e){if(null==e)return 0;if(i(e))return a(e)?s(e):e.length;var t=o(e);return t==u||t==c?e.size:r(e).length}t.exports=f},{\"./_baseKeys\":106,\"./_getTag\":168,\"./_stringSize\":221,\"./isArrayLike\":244,\"./isString\":255}],276:[function(e,t,n){var r=e(\"./_baseFlatten\"),o=e(\"./_baseOrderBy\"),i=e(\"./_baseRest\"),a=e(\"./_isIterateeCall\"),s=i((function(e,t){if(null==e)return[];var n=t.length;return n>1&&a(e,t[0],t[1])?t=[]:n>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),o(e,r(t,1),[])}));t.exports=s},{\"./_baseFlatten\":86,\"./_baseOrderBy\":114,\"./_baseRest\":121,\"./_isIterateeCall\":182}],277:[function(e,t,n){function r(){return[]}t.exports=r},{}],278:[function(e,t,n){function r(){return!1}t.exports=r},{}],279:[function(e,t,n){var r=e(\"./toNumber\"),o=1/0,i=17976931348623157e292;function a(e){return e?(e=r(e))===o||e===-o?(e<0?-1:1)*i:e==e?e:0:0===e?e:0}t.exports=a},{\"./toNumber\":281}],280:[function(e,t,n){var r=e(\"./toFinite\");function o(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}t.exports=o},{\"./toFinite\":279}],281:[function(e,t,n){var r=e(\"./isObject\"),o=e(\"./isSymbol\"),i=NaN,a=/^\\\\s+|\\\\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,c=/^0o[0-7]+$/i,f=parseInt;function d(e){if(\"number\"==typeof e)return e;if(o(e))return i;if(r(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(a,\"\");var n=u.test(e);return n||c.test(e)?f(e.slice(2),n?2:8):s.test(e)?i:+e}t.exports=d},{\"./isObject\":251,\"./isSymbol\":256}],282:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./keysIn\");function i(e){return r(e,o(e))}t.exports=i},{\"./_copyObject\":143,\"./keysIn\":260}],283:[function(e,t,n){var r=e(\"./_baseToString\");function o(e){return null==e?\"\":r(e)}t.exports=o},{\"./_baseToString\":126}],284:[function(e,t,n){var r=e(\"./_arrayEach\"),o=e(\"./_baseCreate\"),i=e(\"./_baseForOwn\"),a=e(\"./_baseIteratee\"),s=e(\"./_getPrototype\"),u=e(\"./isArray\"),c=e(\"./isBuffer\"),f=e(\"./isFunction\"),d=e(\"./isObject\"),h=e(\"./isTypedArray\");function l(e,t,n){var l=u(e),p=l||c(e)||h(e);if(t=a(t,4),null==n){var v=e&&e.constructor;n=p?l?new v:[]:d(e)&&f(v)?o(s(e)):{}}return(p?r:i)(e,(function(e,r,o){return t(n,e,r,o)})),n}t.exports=l},{\"./_arrayEach\":64,\"./_baseCreate\":81,\"./_baseForOwn\":88,\"./_baseIteratee\":105,\"./_getPrototype\":164,\"./isArray\":243,\"./isBuffer\":246,\"./isFunction\":248,\"./isObject\":251,\"./isTypedArray\":257}],285:[function(e,t,n){var r=e(\"./_baseFlatten\"),o=e(\"./_baseRest\"),i=e(\"./_baseUniq\"),a=e(\"./isArrayLikeObject\"),s=o((function(e){return i(r(e,1,a,!0))}));t.exports=s},{\"./_baseFlatten\":86,\"./_baseRest\":121,\"./_baseUniq\":128,\"./isArrayLikeObject\":245}],286:[function(e,t,n){var r=e(\"./toString\"),o=0;function i(e){var t=++o;return r(e)+t}t.exports=i},{\"./toString\":283}],287:[function(e,t,n){var r=e(\"./_baseValues\"),o=e(\"./keys\");function i(e){return null==e?[]:r(e,o(e))}t.exports=i},{\"./_baseValues\":129,\"./keys\":259}],288:[function(e,t,n){var r=e(\"./_assignValue\"),o=e(\"./_baseZipObject\");function i(e,t){return o(e||[],t||[],r)}t.exports=i},{\"./_assignValue\":75,\"./_baseZipObject\":130}]},{},[1])(1);var r={exports:{}};\n/*!\n\t * @overview es6-promise - a tiny implementation of Promises/A+.\n\t * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n\t * @license Licensed under MIT license\n\t * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n\t * @version v4.2.8+1e68dce6\n\t */function o(e,t){var r=e.subgraphs,o=e.nodes,i=e.links,a=e.hierarchy,s=new n.exports.graphlib.Graph({multigraph:!0,compound:!0,directed:!1!==t.digraph}).setGraph(t).setDefaultNodeLabel((function(){return{}})).setDefaultEdgeLabel((function(){return{}}));r.forEach((function(e){s.setNode(e.id,e)})),o.forEach((function(e){s.setNode(e.id,e)})),i.forEach((function(e){s.setEdge(e.source.id,e.target.id,e,e.id)})),a.forEach((function(e){s.setParent(e.child,e.parent)})),n.exports.layout(s,{debugTiming:!1});var u=-s.graph().width/2||0,c=-s.graph().height/2;return s.nodes().forEach((function(e){var t=s.node(e);t.x+=u,t.y+=c})),s.edges().forEach((function(e){var t=s.edge(e);t.points=t.points.map((function(e){return[e.x+u,e.y+c]}))})),{subgraphs:r,nodes:o,links:i}}!function(t,n){t.exports=function(){function t(e){var t=typeof e;return null!==e&&(\"object\"===t||\"function\"===t)}function n(e){return\"function\"==typeof e}var r=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},o=0,i=void 0,a=void 0,s=function(e,t){m[o]=e,m[o+1]=t,2===(o+=2)&&(a?a(x):E())};function u(e){a=e}function c(e){s=e}var f=\"undefined\"!=typeof window?window:void 0,d=f||{},h=d.MutationObserver||d.WebKitMutationObserver,l=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),p=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function v(){return function(){return process.nextTick(x)}}function _(){return void 0!==i?function(){i(x)}:b()}function y(){var e=0,t=new h(x),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function g(){var e=new MessageChannel;return e.port1.onmessage=x,function(){return e.port2.postMessage(0)}}function b(){var e=setTimeout;return function(){return e(x,1)}}var m=new Array(1e3);function x(){for(var e=0;e<o;e+=2)(0,m[e])(m[e+1]),m[e]=void 0,m[e+1]=void 0;o=0}function w(){try{var e=Function(\"return this\")().require(\"vertx\");return i=e.runOnLoop||e.runOnContext,_()}catch(e){return b()}}var E=void 0;function j(e,t){var n=this,r=new this.constructor(O);void 0===r[A]&&Y(r);var o=n._state;if(o){var i=arguments[o-1];s((function(){return V(o,r,i,n._result)}))}else U(n,r,e,t);return r}function k(e){var t=this;if(e&&\"object\"==typeof e&&e.constructor===t)return e;var n=new t(O);return D(n,e),n}E=l?v():h?y():p?g():void 0===f?w():b();var A=Math.random().toString(36).substring(2);function O(){}var I=void 0,S=1,C=2;function N(){return new TypeError(\"You cannot resolve a promise with itself\")}function T(){return new TypeError(\"A promises callback cannot return that same promise.\")}function M(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}function L(e,t,n){s((function(e){var r=!1,o=M(n,t,(function(n){r||(r=!0,t!==n?D(e,n):G(e,n))}),(function(t){r||(r=!0,R(e,t))}),\"Settle: \"+(e._label||\" unknown promise\"));!r&&o&&(r=!0,R(e,o))}),e)}function P(e,t){t._state===S?G(e,t._result):t._state===C?R(e,t._result):U(t,void 0,(function(t){return D(e,t)}),(function(t){return R(e,t)}))}function F(e,t,r){t.constructor===e.constructor&&r===j&&t.constructor.resolve===k?P(e,t):void 0===r?G(e,t):n(r)?L(e,t,r):G(e,t)}function D(e,n){if(e===n)R(e,N());else if(t(n)){var r=void 0;try{r=n.then}catch(t){return void R(e,t)}F(e,n,r)}else G(e,n)}function B(e){e._onerror&&e._onerror(e._result),z(e)}function G(e,t){e._state===I&&(e._result=t,e._state=S,0!==e._subscribers.length&&s(z,e))}function R(e,t){e._state===I&&(e._state=C,e._result=t,s(B,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+S]=n,o[i+C]=r,0===i&&e._state&&s(z,e)}function z(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,o=void 0,i=e._result,a=0;a<t.length;a+=3)r=t[a],o=t[a+n],r?V(n,r,o,i):o(i);e._subscribers.length=0}}function V(e,t,r,o){var i=n(r),a=void 0,s=void 0,u=!0;if(i){try{a=r(o)}catch(e){u=!1,s=e}if(t===a)return void R(t,T())}else a=o;t._state!==I||(i&&u?D(t,a):!1===u?R(t,s):e===S?G(t,a):e===C&&R(t,a))}function q(e,t){try{t((function(t){D(e,t)}),(function(t){R(e,t)}))}catch(t){R(e,t)}}var K=0;function H(){return K++}function Y(e){e[A]=K++,e._state=void 0,e._result=void 0,e._subscribers=[]}function $(){return new Error(\"Array Methods must be provided an Array\")}var W=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(O),this.promise[A]||Y(this.promise),r(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?G(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&G(this.promise,this._result))):R(this.promise,$())}return e.prototype._enumerate=function(e){for(var t=0;this._state===I&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===k){var o=void 0,i=void 0,a=!1;try{o=e.then}catch(e){a=!0,i=e}if(o===j&&e._state!==I)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===te){var s=new n(O);a?R(s,i):F(s,e,o),this._willSettleAt(s,t)}else this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(r(e),t)},e.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===I&&(this._remaining--,e===C?R(r,n):this._result[t]=n),0===this._remaining&&G(r,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,(function(e){return n._settledAt(S,t,e)}),(function(e){return n._settledAt(C,t,e)}))},e}();function J(e){return new W(this,e).promise}function X(e){var t=this;return r(e)?new t((function(n,r){for(var o=e.length,i=0;i<o;i++)t.resolve(e[i]).then(n,r)})):new t((function(e,t){return t(new TypeError(\"You must pass an array to race.\"))}))}function Z(e){var t=new this(O);return R(t,e),t}function Q(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function ee(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}var te=function(){function e(t){this[A]=H(),this._result=this._state=void 0,this._subscribers=[],O!==t&&(\"function\"!=typeof t&&Q(),this instanceof e?q(this,t):ee())}return e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){var t=this,r=t.constructor;return n(e)?t.then((function(t){return r.resolve(e()).then((function(){return t}))}),(function(t){return r.resolve(e()).then((function(){throw t}))})):t.then(e,e)},e}();function ne(){var t=void 0;if(void 0!==e)t=e;else if(\"undefined\"!=typeof self)t=self;else try{t=Function(\"return this\")()}catch(e){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if(\"[object Promise]\"===r&&!n.cast)return}t.Promise=te}return te.prototype.then=j,te.all=J,te.race=X,te.resolve=k,te.reject=Z,te._setScheduler=u,te._setAsap=c,te._asap=s,te.polyfill=ne,te.Promise=te,te}()}(r),r.exports.polyfill(),self.onmessage=function(e){var t=o.apply(void 0,e.data);self.postMessage(t)}}();`;\n\n const workerBlob = new Blob([workerCode], { type: \"application/javascript\" });\n const workerUrl = URL.createObjectURL(workerBlob);\n const worker = new Worker(workerUrl);\n const response = new Promise<string>(resolve => {\n worker.onmessage = event => {\n resolve(event.data);\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n };\n worker.postMessage([data, options]);\n });\n return {\n terminate: () => worker.terminate(),\n response\n };\n}\n","import { forceCenter as d3ForceCenter, forceLink as d3ForceLink, forceManyBody as d3ForceManyBody, forceSimulation as d3ForceSimulation, forceX as d3ForceX, forceY as d3ForceY } from \"d3-force\";\n\nimport { Layout } from \"./layout\";\n\nimport { Options } from \"./forceDirectedWorker\";\n\n// Non worker ---\n\nexport class ForceDirectedBase extends Layout {\n\n protected _links;\n protected _charge;\n protected _center;\n protected _simulation;\n\n constructor(graph, readonly _options: Options) {\n super(graph);\n }\n\n start() {\n return super.start().then(() => {\n\n const size = this._graph.size();\n const data = this._graph.graphData();\n const vertices = data.allVertices();\n const edges = data.allEdges();\n edges.forEach(e => delete e.points);\n\n this._links = d3ForceLink(edges)\n .id(d => d.id)\n .distance(this._options.linkDistance)\n .strength(this._options.linkStrength)\n ;\n\n this._charge = d3ForceManyBody()\n .strength(this._options.repulsionStrength)\n .distanceMin(this._options.distanceMin)\n .distanceMax(this._options.distanceMax)\n ;\n\n this._center = d3ForceCenter(size.width / 2, size.height / 2);\n\n const fx = d3ForceX()\n .strength(this._options.forceStrength)\n ;\n const fy = d3ForceY()\n .strength(this._options.forceStrength)\n ;\n\n this._simulation = d3ForceSimulation(vertices.map(v => {\n const { width, height } = v.element.node().getBBox();\n v.fx = (this._options.pinCentroid && v.centroid) ? size.width / 2 : undefined;\n v.fy = (this._options.pinCentroid && v.centroid) ? size.height / 2 : undefined;\n v[\"width\"] = width;\n v[\"height\"] = height;\n return v;\n }))\n .force(\"link\", this._links)\n .force(\"charge\", this._charge)\n .force(\"center\", this._center)\n .force(\"x\", fx)\n .force(\"y\", fy)\n .alpha(this._options.alpha / 2)\n .alphaMin(this._options.alphaMin)\n .alphaDecay(this._options.alphaDecay)\n .velocityDecay(this._options.velocityDecay)\n .stop()\n ;\n\n return this;\n });\n }\n\n stop() {\n this._simulation.stop();\n return super.stop();\n }\n}\n\nexport class ForceDirected extends ForceDirectedBase {\n\n start() {\n return super.start().then(() => {\n this._simulation.tick(this._options.iterations);\n this.stop();\n this._graph\n .moveVertices(false)\n .moveEdges(false)\n ;\n return this;\n });\n }\n}\n\nexport class ForceDirectedAnimated extends ForceDirectedBase {\n\n start() {\n return super.start().then(() => {\n return new Promise<this>(resolve => {\n this._simulation\n .on(\"tick\", () => {\n this._graph\n .moveVertices(false)\n .moveEdges(false)\n ;\n this._graph.progress(\"layout-tick\");\n })\n .on(\"end\", () => {\n this._running = false;\n resolve(this);\n })\n .restart()\n ;\n });\n });\n }\n}\n","import constant from \"./constant\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","export type Engine = \"circo\" | \"dot\" | \"fdp\" | \"neato\" | \"osage\" | \"patchwork\" | \"twopi\";\n\nexport interface Cluster {\n id: string;\n text: string;\n children: Array<Cluster | Node>;\n\n // result ---\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n}\n\nexport interface Node {\n id: string;\n text: string;\n width: number;\n height: number;\n\n // result ---\n x?: number;\n y?: number;\n}\n\nexport function isCluster(item: Cluster | Node): item is Cluster {\n return (item as Cluster).children !== undefined;\n}\n\nexport interface Link {\n id: string;\n source: Node;\n target: Node;\n text: string;\n\n // result ---\n points?: Array<[number, number]>;\n}\n\nexport interface Data {\n items: Array<Cluster | Node>;\n links: Link[];\n raw: string;\n}\n\nexport interface Options {\n engine: Engine;\n wasmFolder: string;\n}\n\nexport function graphviz(data: Data, options: Options) {\n // eslint-disable-next-line quotes\n const workerCode = `!function(){\"use strict\";\n/*! *****************************************************************************\n Copyright (c) Microsoft Corporation.\n\n Permission to use, copy, modify, and/or distribute this software for any\n purpose with or without fee is hereby granted.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n PERFORMANCE OF THIS SOFTWARE.\n ***************************************************************************** */function r(r,e,t){if(t||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return r.concat(n||Array.prototype.slice.call(e))}function e(r,e){return e.forEach((function(e){e&&\"string\"!=typeof e&&!Array.isArray(e)&&Object.keys(e).forEach((function(t){if(\"default\"!==t&&!(t in r)){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}}))})),Object.freeze(r)}var t,n,o,i={exports:{}};t=i,n=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0,o=function(r){var e,t,o=void 0!==(r=r||{})?r:{};o.ready=new Promise((function(r,n){e=r,t=n}));var i,a,s=Object.assign({},o),u=\"./this.program\",c=\"\";\"undefined\"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf(\"blob:\")?c.substr(0,c.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",i=r=>{var e=new XMLHttpRequest;return e.open(\"GET\",r,!1),e.send(null),e.responseText},a=(r,e,t)=>{var n=new XMLHttpRequest;n.open(\"GET\",r,!0),n.responseType=\"arraybuffer\",n.onload=()=>{200==n.status||0==n.status&&n.response?e(n.response):t()},n.onerror=t,n.send(null)};var l,d,f=o.print||console.log.bind(console),p=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments,o.thisProgram&&(u=o.thisProgram),o.quit,o.wasmBinary&&(l=o.wasmBinary),o.noExitRuntime,\"object\"!=typeof WebAssembly&&L(\"no native wasm support detected\");var h=!1;function m(r,e){r||L(e)}var v,w,_,y,E,g,b=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function k(r,e,t){for(var n=e+t,o=e;r[o]&&!(o>=n);)++o;if(o-e>16&&r.subarray&&b)return b.decode(r.subarray(e,o));for(var i=\"\";e<o;){var a=r[e++];if(128&a){var s=63&r[e++];if(192!=(224&a)){var u=63&r[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&r[e++])<65536)i+=String.fromCharCode(a);else{var c=a-65536;i+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function D(r,e){return r?k(_,r,e):\"\"}function S(r,e,t,n){if(!(n>0))return 0;for(var o=t,i=t+n-1,a=0;a<r.length;++a){var s=r.charCodeAt(a);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&r.charCodeAt(++a)),s<=127){if(t>=i)break;e[t++]=s}else if(s<=2047){if(t+1>=i)break;e[t++]=192|s>>6,e[t++]=128|63&s}else if(s<=65535){if(t+2>=i)break;e[t++]=224|s>>12,e[t++]=128|s>>6&63,e[t++]=128|63&s}else{if(t+3>=i)break;e[t++]=240|s>>18,e[t++]=128|s>>12&63,e[t++]=128|s>>6&63,e[t++]=128|63&s}}return e[t]=0,t-o}function A(r){for(var e=0,t=0;t<r.length;++t){var n=r.charCodeAt(t);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&r.charCodeAt(++t)),n<=127?++e:e+=n<=2047?2:n<=65535?3:4}return e}function P(r){v=r,o.HEAP8=w=new Int8Array(r),o.HEAP16=new Int16Array(r),o.HEAP32=y=new Int32Array(r),o.HEAPU8=_=new Uint8Array(r),o.HEAPU16=new Uint16Array(r),o.HEAPU32=new Uint32Array(r),o.HEAPF32=new Float32Array(r),o.HEAPF64=E=new Float64Array(r)}o.INITIAL_MEMORY;var x,F,M,R,C=[],j=[],z=[],T=0,B=null;function N(r){T++,o.monitorRunDependencies&&o.monitorRunDependencies(T)}function O(r){if(T--,o.monitorRunDependencies&&o.monitorRunDependencies(T),0==T&&B){var e=B;B=null,e()}}function L(r){o.onAbort&&o.onAbort(r),p(r=\"Aborted(\"+r+\")\"),h=!0,r+=\". Build with -s ASSERTIONS=1 for more info.\";var e=new WebAssembly.RuntimeError(r);throw t(e),e}function I(r){return r.startsWith(\"data:application/octet-stream;base64,\")}function U(r){try{if(r==x&&l)return new Uint8Array(l);throw\"both async and sync fetching of the wasm failed\"}catch(r){L(r)}}o.preloadedImages={},o.preloadedAudios={},I(x=\"expatlib.wasm\")||(F=x,x=o.locateFile?o.locateFile(F,c):c+F);var H={11678:function(r){var e=o.getCache(o.CExpatJS)[r];if(!e.hasOwnProperty(\"startElement\"))throw\"a JSImplementation must implement all functions, you forgot CExpatJS::startElement.\";e.startElement()},11896:function(r){var e=o.getCache(o.CExpatJS)[r];if(!e.hasOwnProperty(\"endElement\"))throw\"a JSImplementation must implement all functions, you forgot CExpatJS::endElement.\";e.endElement()},12108:function(r){var e=o.getCache(o.CExpatJS)[r];if(!e.hasOwnProperty(\"characterData\"))throw\"a JSImplementation must implement all functions, you forgot CExpatJS::characterData.\";e.characterData()}};function G(r){for(;r.length>0;){var e=r.shift();if(\"function\"!=typeof e){var t=e.func;\"number\"==typeof t?void 0===e.arg?q(t)():q(t)(e.arg):t(void 0===e.arg?null:e.arg)}else e(o)}}function q(r){return g.get(r)}var W={splitPath:function(r){return/^(\\\\/?|)([\\\\s\\\\S]*?)((?:\\\\.{1,2}|[^\\\\/]+?|)(\\\\.[^.\\\\/]*|))(?:[\\\\/]*)$/.exec(r).slice(1)},normalizeArray:function(r,e){for(var t=0,n=r.length-1;n>=0;n--){var o=r[n];\".\"===o?r.splice(n,1):\"..\"===o?(r.splice(n,1),t++):t&&(r.splice(n,1),t--)}if(e)for(;t;t--)r.unshift(\"..\");return r},normalize:function(r){var e=\"/\"===r.charAt(0),t=\"/\"===r.substr(-1);return(r=W.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||e||(r=\".\"),r&&t&&(r+=\"/\"),(e?\"/\":\"\")+r},dirname:function(r){var e=W.splitPath(r),t=e[0],n=e[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):\".\"},basename:function(r){if(\"/\"===r)return\"/\";var e=(r=(r=W.normalize(r)).replace(/\\\\/$/,\"\")).lastIndexOf(\"/\");return-1===e?r:r.substr(e+1)},extname:function(r){return W.splitPath(r)[3]},join:function(){var r=Array.prototype.slice.call(arguments,0);return W.normalize(r.join(\"/\"))},join2:function(r,e){return W.normalize(r+\"/\"+e)}},V={resolve:function(){for(var r=\"\",e=!1,t=arguments.length-1;t>=-1&&!e;t--){var n=t>=0?arguments[t]:Y.cwd();if(\"string\"!=typeof n)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!n)return\"\";r=n+\"/\"+r,e=\"/\"===n.charAt(0)}return(e?\"/\":\"\")+(r=W.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||\".\"},relative:function(r,e){function t(r){for(var e=0;e<r.length&&\"\"===r[e];e++);for(var t=r.length-1;t>=0&&\"\"===r[t];t--);return e>t?[]:r.slice(e,t-e+1)}r=V.resolve(r).substr(1),e=V.resolve(e).substr(1);for(var n=t(r.split(\"/\")),o=t(e.split(\"/\")),i=Math.min(n.length,o.length),a=i,s=0;s<i;s++)if(n[s]!==o[s]){a=s;break}var u=[];for(s=a;s<n.length;s++)u.push(\"..\");return(u=u.concat(o.slice(a))).join(\"/\")}},J={ttys:[],init:function(){},shutdown:function(){},register:function(r,e){J.ttys[r]={input:[],output:[],ops:e},Y.registerDevice(r,J.stream_ops)},stream_ops:{open:function(r){var e=J.ttys[r.node.rdev];if(!e)throw new Y.ErrnoError(43);r.tty=e,r.seekable=!1},close:function(r){r.tty.ops.flush(r.tty)},flush:function(r){r.tty.ops.flush(r.tty)},read:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.get_char)throw new Y.ErrnoError(60);for(var i=0,a=0;a<n;a++){var s;try{s=r.tty.ops.get_char(r.tty)}catch(r){throw new Y.ErrnoError(29)}if(void 0===s&&0===i)throw new Y.ErrnoError(6);if(null==s)break;i++,e[t+a]=s}return i&&(r.node.timestamp=Date.now()),i},write:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.put_char)throw new Y.ErrnoError(60);try{for(var i=0;i<n;i++)r.tty.ops.put_char(r.tty,e[t+i])}catch(r){throw new Y.ErrnoError(29)}return n&&(r.node.timestamp=Date.now()),i}},default_tty_ops:{get_char:function(r){if(!r.input.length){var e=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt?null!==(e=window.prompt(\"Input: \"))&&(e+=\"\\\\n\"):\"function\"==typeof readline&&null!==(e=readline())&&(e+=\"\\\\n\"),!e)return null;r.input=or(e,!0)}return r.input.shift()},put_char:function(r,e){null===e||10===e?(f(k(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(f(k(r.output,0)),r.output=[])}},default_tty1_ops:{put_char:function(r,e){null===e||10===e?(p(k(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(p(k(r.output,0)),r.output=[])}}},X={ops_table:null,mount:function(r){return X.createNode(null,\"/\",16895,0)},createNode:function(r,e,t,n){if(Y.isBlkdev(t)||Y.isFIFO(t))throw new Y.ErrnoError(63);X.ops_table||(X.ops_table={dir:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr,lookup:X.node_ops.lookup,mknod:X.node_ops.mknod,rename:X.node_ops.rename,unlink:X.node_ops.unlink,rmdir:X.node_ops.rmdir,readdir:X.node_ops.readdir,symlink:X.node_ops.symlink},stream:{llseek:X.stream_ops.llseek}},file:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr},stream:{llseek:X.stream_ops.llseek,read:X.stream_ops.read,write:X.stream_ops.write,allocate:X.stream_ops.allocate,mmap:X.stream_ops.mmap,msync:X.stream_ops.msync}},link:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr,readlink:X.node_ops.readlink},stream:{}},chrdev:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr},stream:Y.chrdev_stream_ops}});var o=Y.createNode(r,e,t,n);return Y.isDir(o.mode)?(o.node_ops=X.ops_table.dir.node,o.stream_ops=X.ops_table.dir.stream,o.contents={}):Y.isFile(o.mode)?(o.node_ops=X.ops_table.file.node,o.stream_ops=X.ops_table.file.stream,o.usedBytes=0,o.contents=null):Y.isLink(o.mode)?(o.node_ops=X.ops_table.link.node,o.stream_ops=X.ops_table.link.stream):Y.isChrdev(o.mode)&&(o.node_ops=X.ops_table.chrdev.node,o.stream_ops=X.ops_table.chrdev.stream),o.timestamp=Date.now(),r&&(r.contents[e]=o,r.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(r){return r.contents?r.contents.subarray?r.contents.subarray(0,r.usedBytes):new Uint8Array(r.contents):new Uint8Array(0)},expandFileStorage:function(r,e){var t=r.contents?r.contents.length:0;if(!(t>=e)){e=Math.max(e,t*(t<1048576?2:1.125)>>>0),0!=t&&(e=Math.max(e,256));var n=r.contents;r.contents=new Uint8Array(e),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage:function(r,e){if(r.usedBytes!=e)if(0==e)r.contents=null,r.usedBytes=0;else{var t=r.contents;r.contents=new Uint8Array(e),t&&r.contents.set(t.subarray(0,Math.min(e,r.usedBytes))),r.usedBytes=e}},node_ops:{getattr:function(r){var e={};return e.dev=Y.isChrdev(r.mode)?r.id:1,e.ino=r.id,e.mode=r.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=r.rdev,Y.isDir(r.mode)?e.size=4096:Y.isFile(r.mode)?e.size=r.usedBytes:Y.isLink(r.mode)?e.size=r.link.length:e.size=0,e.atime=new Date(r.timestamp),e.mtime=new Date(r.timestamp),e.ctime=new Date(r.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(r,e){void 0!==e.mode&&(r.mode=e.mode),void 0!==e.timestamp&&(r.timestamp=e.timestamp),void 0!==e.size&&X.resizeFileStorage(r,e.size)},lookup:function(r,e){throw Y.genericErrors[44]},mknod:function(r,e,t,n){return X.createNode(r,e,t,n)},rename:function(r,e,t){if(Y.isDir(r.mode)){var n;try{n=Y.lookupNode(e,t)}catch(r){}if(n)for(var o in n.contents)throw new Y.ErrnoError(55)}delete r.parent.contents[r.name],r.parent.timestamp=Date.now(),r.name=t,e.contents[t]=r,e.timestamp=r.parent.timestamp,r.parent=e},unlink:function(r,e){delete r.contents[e],r.timestamp=Date.now()},rmdir:function(r,e){var t=Y.lookupNode(r,e);for(var n in t.contents)throw new Y.ErrnoError(55);delete r.contents[e],r.timestamp=Date.now()},readdir:function(r){var e=[\".\",\"..\"];for(var t in r.contents)r.contents.hasOwnProperty(t)&&e.push(t);return e},symlink:function(r,e,t){var n=X.createNode(r,e,41471,0);return n.link=t,n},readlink:function(r){if(!Y.isLink(r.mode))throw new Y.ErrnoError(28);return r.link}},stream_ops:{read:function(r,e,t,n,o){var i=r.node.contents;if(o>=r.node.usedBytes)return 0;var a=Math.min(r.node.usedBytes-o,n);if(a>8&&i.subarray)e.set(i.subarray(o,o+a),t);else for(var s=0;s<a;s++)e[t+s]=i[o+s];return a},write:function(r,e,t,n,o,i){if(e.buffer===w.buffer&&(i=!1),!n)return 0;var a=r.node;if(a.timestamp=Date.now(),e.subarray&&(!a.contents||a.contents.subarray)){if(i)return a.contents=e.subarray(t,t+n),a.usedBytes=n,n;if(0===a.usedBytes&&0===o)return a.contents=e.slice(t,t+n),a.usedBytes=n,n;if(o+n<=a.usedBytes)return a.contents.set(e.subarray(t,t+n),o),n}if(X.expandFileStorage(a,o+n),a.contents.subarray&&e.subarray)a.contents.set(e.subarray(t,t+n),o);else for(var s=0;s<n;s++)a.contents[o+s]=e[t+s];return a.usedBytes=Math.max(a.usedBytes,o+n),n},llseek:function(r,e,t){var n=e;if(1===t?n+=r.position:2===t&&Y.isFile(r.node.mode)&&(n+=r.node.usedBytes),n<0)throw new Y.ErrnoError(28);return n},allocate:function(r,e,t){X.expandFileStorage(r.node,e+t),r.node.usedBytes=Math.max(r.node.usedBytes,e+t)},mmap:function(r,e,t,n,o,i){if(0!==e)throw new Y.ErrnoError(28);if(!Y.isFile(r.node.mode))throw new Y.ErrnoError(43);var a,s,u=r.node.contents;if(2&i||u.buffer!==v){if((n>0||n+t<u.length)&&(u=u.subarray?u.subarray(n,n+t):Array.prototype.slice.call(u,n,n+t)),s=!0,!(a=void L()))throw new Y.ErrnoError(48);w.set(u,a)}else s=!1,a=u.byteOffset;return{ptr:a,allocated:s}},msync:function(r,e,t,n,o){if(!Y.isFile(r.node.mode))throw new Y.ErrnoError(43);return 2&o||X.stream_ops.write(r,e,0,n,t,!1),0}}},Y={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(r,e={})=>{if(!(r=V.resolve(Y.cwd(),r)))return{path:\"\",node:null};var t={follow_mount:!0,recurse_count:0};for(var n in t)void 0===e[n]&&(e[n]=t[n]);if(e.recurse_count>8)throw new Y.ErrnoError(32);for(var o=W.normalizeArray(r.split(\"/\").filter((r=>!!r)),!1),i=Y.root,a=\"/\",s=0;s<o.length;s++){var u=s===o.length-1;if(u&&e.parent)break;if(i=Y.lookupNode(i,o[s]),a=W.join2(a,o[s]),Y.isMountpoint(i)&&(!u||u&&e.follow_mount)&&(i=i.mounted.root),!u||e.follow)for(var c=0;Y.isLink(i.mode);){var l=Y.readlink(a);if(a=V.resolve(W.dirname(a),l),i=Y.lookupPath(a,{recurse_count:e.recurse_count}).node,c++>40)throw new Y.ErrnoError(32)}}return{path:a,node:i}},getPath:r=>{for(var e;;){if(Y.isRoot(r)){var t=r.mount.mountpoint;return e?\"/\"!==t[t.length-1]?t+\"/\"+e:t+e:t}e=e?r.name+\"/\"+e:r.name,r=r.parent}},hashName:(r,e)=>{for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(r+t>>>0)%Y.nameTable.length},hashAddNode:r=>{var e=Y.hashName(r.parent.id,r.name);r.name_next=Y.nameTable[e],Y.nameTable[e]=r},hashRemoveNode:r=>{var e=Y.hashName(r.parent.id,r.name);if(Y.nameTable[e]===r)Y.nameTable[e]=r.name_next;else for(var t=Y.nameTable[e];t;){if(t.name_next===r){t.name_next=r.name_next;break}t=t.name_next}},lookupNode:(r,e)=>{var t=Y.mayLookup(r);if(t)throw new Y.ErrnoError(t,r);for(var n=Y.hashName(r.id,e),o=Y.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===r.id&&i===e)return o}return Y.lookup(r,e)},createNode:(r,e,t,n)=>{var o=new Y.FSNode(r,e,t,n);return Y.hashAddNode(o),o},destroyNode:r=>{Y.hashRemoveNode(r)},isRoot:r=>r===r.parent,isMountpoint:r=>!!r.mounted,isFile:r=>32768==(61440&r),isDir:r=>16384==(61440&r),isLink:r=>40960==(61440&r),isChrdev:r=>8192==(61440&r),isBlkdev:r=>24576==(61440&r),isFIFO:r=>4096==(61440&r),isSocket:r=>49152==(49152&r),flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:r=>{var e=Y.flagModes[r];if(void 0===e)throw new Error(\"Unknown file open mode: \"+r);return e},flagsToPermissionString:r=>{var e=[\"r\",\"w\",\"rw\"][3&r];return 512&r&&(e+=\"w\"),e},nodePermissions:(r,e)=>Y.ignorePermissions||(!e.includes(\"r\")||292&r.mode)&&(!e.includes(\"w\")||146&r.mode)&&(!e.includes(\"x\")||73&r.mode)?0:2,mayLookup:r=>{var e=Y.nodePermissions(r,\"x\");return e||(r.node_ops.lookup?0:2)},mayCreate:(r,e)=>{try{return Y.lookupNode(r,e),20}catch(r){}return Y.nodePermissions(r,\"wx\")},mayDelete:(r,e,t)=>{var n;try{n=Y.lookupNode(r,e)}catch(r){return r.errno}var o=Y.nodePermissions(r,\"wx\");if(o)return o;if(t){if(!Y.isDir(n.mode))return 54;if(Y.isRoot(n)||Y.getPath(n)===Y.cwd())return 10}else if(Y.isDir(n.mode))return 31;return 0},mayOpen:(r,e)=>r?Y.isLink(r.mode)?32:Y.isDir(r.mode)&&(\"r\"!==Y.flagsToPermissionString(e)||512&e)?31:Y.nodePermissions(r,Y.flagsToPermissionString(e)):44,MAX_OPEN_FDS:4096,nextfd:(r=0,e=Y.MAX_OPEN_FDS)=>{for(var t=r;t<=e;t++)if(!Y.streams[t])return t;throw new Y.ErrnoError(33)},getStream:r=>Y.streams[r],createStream:(r,e,t)=>{Y.FSStream||(Y.FSStream=function(){},Y.FSStream.prototype={object:{get:function(){return this.node},set:function(r){this.node=r}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}),r=Object.assign(new Y.FSStream,r);var n=Y.nextfd(e,t);return r.fd=n,Y.streams[n]=r,r},closeStream:r=>{Y.streams[r]=null},chrdev_stream_ops:{open:r=>{var e=Y.getDevice(r.node.rdev);r.stream_ops=e.stream_ops,r.stream_ops.open&&r.stream_ops.open(r)},llseek:()=>{throw new Y.ErrnoError(70)}},major:r=>r>>8,minor:r=>255&r,makedev:(r,e)=>r<<8|e,registerDevice:(r,e)=>{Y.devices[r]={stream_ops:e}},getDevice:r=>Y.devices[r],getMounts:r=>{for(var e=[],t=[r];t.length;){var n=t.pop();e.push(n),t.push.apply(t,n.mounts)}return e},syncfs:(r,e)=>{\"function\"==typeof r&&(e=r,r=!1),Y.syncFSRequests++,Y.syncFSRequests>1&&p(\"warning: \"+Y.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var t=Y.getMounts(Y.root.mount),n=0;function o(r){return Y.syncFSRequests--,e(r)}function i(r){if(r)return i.errored?void 0:(i.errored=!0,o(r));++n>=t.length&&o(null)}t.forEach((e=>{if(!e.type.syncfs)return i(null);e.type.syncfs(e,r,i)}))},mount:(r,e,t)=>{var n,o=\"/\"===t,i=!t;if(o&&Y.root)throw new Y.ErrnoError(10);if(!o&&!i){var a=Y.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,Y.isMountpoint(n))throw new Y.ErrnoError(10);if(!Y.isDir(n.mode))throw new Y.ErrnoError(54)}var s={type:r,opts:e,mountpoint:t,mounts:[]},u=r.mount(s);return u.mount=s,s.root=u,o?Y.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:r=>{var e=Y.lookupPath(r,{follow_mount:!1});if(!Y.isMountpoint(e.node))throw new Y.ErrnoError(28);var t=e.node,n=t.mounted,o=Y.getMounts(n);Object.keys(Y.nameTable).forEach((r=>{for(var e=Y.nameTable[r];e;){var t=e.name_next;o.includes(e.mount)&&Y.destroyNode(e),e=t}})),t.mounted=null;var i=t.mount.mounts.indexOf(n);t.mount.mounts.splice(i,1)},lookup:(r,e)=>r.node_ops.lookup(r,e),mknod:(r,e,t)=>{var n=Y.lookupPath(r,{parent:!0}).node,o=W.basename(r);if(!o||\".\"===o||\"..\"===o)throw new Y.ErrnoError(28);var i=Y.mayCreate(n,o);if(i)throw new Y.ErrnoError(i);if(!n.node_ops.mknod)throw new Y.ErrnoError(63);return n.node_ops.mknod(n,o,e,t)},create:(r,e)=>(e=void 0!==e?e:438,e&=4095,e|=32768,Y.mknod(r,e,0)),mkdir:(r,e)=>(e=void 0!==e?e:511,e&=1023,e|=16384,Y.mknod(r,e,0)),mkdirTree:(r,e)=>{for(var t=r.split(\"/\"),n=\"\",o=0;o<t.length;++o)if(t[o]){n+=\"/\"+t[o];try{Y.mkdir(n,e)}catch(r){if(20!=r.errno)throw r}}},mkdev:(r,e,t)=>(void 0===t&&(t=e,e=438),e|=8192,Y.mknod(r,e,t)),symlink:(r,e)=>{if(!V.resolve(r))throw new Y.ErrnoError(44);var t=Y.lookupPath(e,{parent:!0}).node;if(!t)throw new Y.ErrnoError(44);var n=W.basename(e),o=Y.mayCreate(t,n);if(o)throw new Y.ErrnoError(o);if(!t.node_ops.symlink)throw new Y.ErrnoError(63);return t.node_ops.symlink(t,n,r)},rename:(r,e)=>{var t,n,o=W.dirname(r),i=W.dirname(e),a=W.basename(r),s=W.basename(e);if(t=Y.lookupPath(r,{parent:!0}).node,n=Y.lookupPath(e,{parent:!0}).node,!t||!n)throw new Y.ErrnoError(44);if(t.mount!==n.mount)throw new Y.ErrnoError(75);var u,c=Y.lookupNode(t,a),l=V.relative(r,i);if(\".\"!==l.charAt(0))throw new Y.ErrnoError(28);if(\".\"!==(l=V.relative(e,o)).charAt(0))throw new Y.ErrnoError(55);try{u=Y.lookupNode(n,s)}catch(r){}if(c!==u){var d=Y.isDir(c.mode),f=Y.mayDelete(t,a,d);if(f)throw new Y.ErrnoError(f);if(f=u?Y.mayDelete(n,s,d):Y.mayCreate(n,s))throw new Y.ErrnoError(f);if(!t.node_ops.rename)throw new Y.ErrnoError(63);if(Y.isMountpoint(c)||u&&Y.isMountpoint(u))throw new Y.ErrnoError(10);if(n!==t&&(f=Y.nodePermissions(t,\"w\")))throw new Y.ErrnoError(f);Y.hashRemoveNode(c);try{t.node_ops.rename(c,n,s)}catch(r){throw r}finally{Y.hashAddNode(c)}}},rmdir:r=>{var e=Y.lookupPath(r,{parent:!0}).node,t=W.basename(r),n=Y.lookupNode(e,t),o=Y.mayDelete(e,t,!0);if(o)throw new Y.ErrnoError(o);if(!e.node_ops.rmdir)throw new Y.ErrnoError(63);if(Y.isMountpoint(n))throw new Y.ErrnoError(10);e.node_ops.rmdir(e,t),Y.destroyNode(n)},readdir:r=>{var e=Y.lookupPath(r,{follow:!0}).node;if(!e.node_ops.readdir)throw new Y.ErrnoError(54);return e.node_ops.readdir(e)},unlink:r=>{var e=Y.lookupPath(r,{parent:!0}).node;if(!e)throw new Y.ErrnoError(44);var t=W.basename(r),n=Y.lookupNode(e,t),o=Y.mayDelete(e,t,!1);if(o)throw new Y.ErrnoError(o);if(!e.node_ops.unlink)throw new Y.ErrnoError(63);if(Y.isMountpoint(n))throw new Y.ErrnoError(10);e.node_ops.unlink(e,t),Y.destroyNode(n)},readlink:r=>{var e=Y.lookupPath(r).node;if(!e)throw new Y.ErrnoError(44);if(!e.node_ops.readlink)throw new Y.ErrnoError(28);return V.resolve(Y.getPath(e.parent),e.node_ops.readlink(e))},stat:(r,e)=>{var t=Y.lookupPath(r,{follow:!e}).node;if(!t)throw new Y.ErrnoError(44);if(!t.node_ops.getattr)throw new Y.ErrnoError(63);return t.node_ops.getattr(t)},lstat:r=>Y.stat(r,!0),chmod:(r,e,t)=>{var n;if(!(n=\"string\"==typeof r?Y.lookupPath(r,{follow:!t}).node:r).node_ops.setattr)throw new Y.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&e|-4096&n.mode,timestamp:Date.now()})},lchmod:(r,e)=>{Y.chmod(r,e,!0)},fchmod:(r,e)=>{var t=Y.getStream(r);if(!t)throw new Y.ErrnoError(8);Y.chmod(t.node,e)},chown:(r,e,t,n)=>{var o;if(!(o=\"string\"==typeof r?Y.lookupPath(r,{follow:!n}).node:r).node_ops.setattr)throw new Y.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(r,e,t)=>{Y.chown(r,e,t,!0)},fchown:(r,e,t)=>{var n=Y.getStream(r);if(!n)throw new Y.ErrnoError(8);Y.chown(n.node,e,t)},truncate:(r,e)=>{if(e<0)throw new Y.ErrnoError(28);var t;if(!(t=\"string\"==typeof r?Y.lookupPath(r,{follow:!0}).node:r).node_ops.setattr)throw new Y.ErrnoError(63);if(Y.isDir(t.mode))throw new Y.ErrnoError(31);if(!Y.isFile(t.mode))throw new Y.ErrnoError(28);var n=Y.nodePermissions(t,\"w\");if(n)throw new Y.ErrnoError(n);t.node_ops.setattr(t,{size:e,timestamp:Date.now()})},ftruncate:(r,e)=>{var t=Y.getStream(r);if(!t)throw new Y.ErrnoError(8);if(0==(2097155&t.flags))throw new Y.ErrnoError(28);Y.truncate(t.node,e)},utime:(r,e,t)=>{var n=Y.lookupPath(r,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(e,t)})},open:(r,e,t,n,i)=>{if(\"\"===r)throw new Y.ErrnoError(44);var a;if(t=void 0===t?438:t,t=64&(e=\"string\"==typeof e?Y.modeStringToFlags(e):e)?4095&t|32768:0,\"object\"==typeof r)a=r;else{r=W.normalize(r);try{a=Y.lookupPath(r,{follow:!(131072&e)}).node}catch(r){}}var s=!1;if(64&e)if(a){if(128&e)throw new Y.ErrnoError(20)}else a=Y.mknod(r,t,0),s=!0;if(!a)throw new Y.ErrnoError(44);if(Y.isChrdev(a.mode)&&(e&=-513),65536&e&&!Y.isDir(a.mode))throw new Y.ErrnoError(54);if(!s){var u=Y.mayOpen(a,e);if(u)throw new Y.ErrnoError(u)}512&e&&Y.truncate(a,0),e&=-131713;var c=Y.createStream({node:a,path:Y.getPath(a),flags:e,seekable:!0,position:0,stream_ops:a.stream_ops,ungotten:[],error:!1},n,i);return c.stream_ops.open&&c.stream_ops.open(c),!o.logReadFiles||1&e||(Y.readFiles||(Y.readFiles={}),r in Y.readFiles||(Y.readFiles[r]=1)),c},close:r=>{if(Y.isClosed(r))throw new Y.ErrnoError(8);r.getdents&&(r.getdents=null);try{r.stream_ops.close&&r.stream_ops.close(r)}catch(r){throw r}finally{Y.closeStream(r.fd)}r.fd=null},isClosed:r=>null===r.fd,llseek:(r,e,t)=>{if(Y.isClosed(r))throw new Y.ErrnoError(8);if(!r.seekable||!r.stream_ops.llseek)throw new Y.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Y.ErrnoError(28);return r.position=r.stream_ops.llseek(r,e,t),r.ungotten=[],r.position},read:(r,e,t,n,o)=>{if(n<0||o<0)throw new Y.ErrnoError(28);if(Y.isClosed(r))throw new Y.ErrnoError(8);if(1==(2097155&r.flags))throw new Y.ErrnoError(8);if(Y.isDir(r.node.mode))throw new Y.ErrnoError(31);if(!r.stream_ops.read)throw new Y.ErrnoError(28);var i=void 0!==o;if(i){if(!r.seekable)throw new Y.ErrnoError(70)}else o=r.position;var a=r.stream_ops.read(r,e,t,n,o);return i||(r.position+=a),a},write:(r,e,t,n,o,i)=>{if(n<0||o<0)throw new Y.ErrnoError(28);if(Y.isClosed(r))throw new Y.ErrnoError(8);if(0==(2097155&r.flags))throw new Y.ErrnoError(8);if(Y.isDir(r.node.mode))throw new Y.ErrnoError(31);if(!r.stream_ops.write)throw new Y.ErrnoError(28);r.seekable&&1024&r.flags&&Y.llseek(r,0,2);var a=void 0!==o;if(a){if(!r.seekable)throw new Y.ErrnoError(70)}else o=r.position;var s=r.stream_ops.write(r,e,t,n,o,i);return a||(r.position+=s),s},allocate:(r,e,t)=>{if(Y.isClosed(r))throw new Y.ErrnoError(8);if(e<0||t<=0)throw new Y.ErrnoError(28);if(0==(2097155&r.flags))throw new Y.ErrnoError(8);if(!Y.isFile(r.node.mode)&&!Y.isDir(r.node.mode))throw new Y.ErrnoError(43);if(!r.stream_ops.allocate)throw new Y.ErrnoError(138);r.stream_ops.allocate(r,e,t)},mmap:(r,e,t,n,o,i)=>{if(0!=(2&o)&&0==(2&i)&&2!=(2097155&r.flags))throw new Y.ErrnoError(2);if(1==(2097155&r.flags))throw new Y.ErrnoError(2);if(!r.stream_ops.mmap)throw new Y.ErrnoError(43);return r.stream_ops.mmap(r,e,t,n,o,i)},msync:(r,e,t,n,o)=>r&&r.stream_ops.msync?r.stream_ops.msync(r,e,t,n,o):0,munmap:r=>0,ioctl:(r,e,t)=>{if(!r.stream_ops.ioctl)throw new Y.ErrnoError(59);return r.stream_ops.ioctl(r,e,t)},readFile:(r,e={})=>{if(e.flags=e.flags||0,e.encoding=e.encoding||\"binary\",\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw new Error('Invalid encoding type \"'+e.encoding+'\"');var t,n=Y.open(r,e.flags),o=Y.stat(r).size,i=new Uint8Array(o);return Y.read(n,i,0,o,0),\"utf8\"===e.encoding?t=k(i,0):\"binary\"===e.encoding&&(t=i),Y.close(n),t},writeFile:(r,e,t={})=>{t.flags=t.flags||577;var n=Y.open(r,t.flags,t.mode);if(\"string\"==typeof e){var o=new Uint8Array(A(e)+1),i=S(e,o,0,o.length);Y.write(n,o,0,i,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(e))throw new Error(\"Unsupported data type\");Y.write(n,e,0,e.byteLength,void 0,t.canOwn)}Y.close(n)},cwd:()=>Y.currentPath,chdir:r=>{var e=Y.lookupPath(r,{follow:!0});if(null===e.node)throw new Y.ErrnoError(44);if(!Y.isDir(e.node.mode))throw new Y.ErrnoError(54);var t=Y.nodePermissions(e.node,\"x\");if(t)throw new Y.ErrnoError(t);Y.currentPath=e.path},createDefaultDirectories:()=>{Y.mkdir(\"/tmp\"),Y.mkdir(\"/home\"),Y.mkdir(\"/home/web_user\")},createDefaultDevices:()=>{Y.mkdir(\"/dev\"),Y.registerDevice(Y.makedev(1,3),{read:()=>0,write:(r,e,t,n,o)=>n}),Y.mkdev(\"/dev/null\",Y.makedev(1,3)),J.register(Y.makedev(5,0),J.default_tty_ops),J.register(Y.makedev(6,0),J.default_tty1_ops),Y.mkdev(\"/dev/tty\",Y.makedev(5,0)),Y.mkdev(\"/dev/tty1\",Y.makedev(6,0));var r=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var r=new Uint8Array(1);return function(){return crypto.getRandomValues(r),r[0]}}return function(){L(\"randomDevice\")}}();Y.createDevice(\"/dev\",\"random\",r),Y.createDevice(\"/dev\",\"urandom\",r),Y.mkdir(\"/dev/shm\"),Y.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:()=>{Y.mkdir(\"/proc\");var r=Y.mkdir(\"/proc/self\");Y.mkdir(\"/proc/self/fd\"),Y.mount({mount:()=>{var e=Y.createNode(r,\"fd\",16895,73);return e.node_ops={lookup:(r,e)=>{var t=+e,n=Y.getStream(t);if(!n)throw new Y.ErrnoError(8);var o={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},e}},{},\"/proc/self/fd\")},createStandardStreams:()=>{o.stdin?Y.createDevice(\"/dev\",\"stdin\",o.stdin):Y.symlink(\"/dev/tty\",\"/dev/stdin\"),o.stdout?Y.createDevice(\"/dev\",\"stdout\",null,o.stdout):Y.symlink(\"/dev/tty\",\"/dev/stdout\"),o.stderr?Y.createDevice(\"/dev\",\"stderr\",null,o.stderr):Y.symlink(\"/dev/tty1\",\"/dev/stderr\"),Y.open(\"/dev/stdin\",0),Y.open(\"/dev/stdout\",1),Y.open(\"/dev/stderr\",1)},ensureErrnoError:()=>{Y.ErrnoError||(Y.ErrnoError=function(r,e){this.node=e,this.setErrno=function(r){this.errno=r},this.setErrno(r),this.message=\"FS error\"},Y.ErrnoError.prototype=new Error,Y.ErrnoError.prototype.constructor=Y.ErrnoError,[44].forEach((r=>{Y.genericErrors[r]=new Y.ErrnoError(r),Y.genericErrors[r].stack=\"<generic error, no stack>\"})))},staticInit:()=>{Y.ensureErrnoError(),Y.nameTable=new Array(4096),Y.mount(X,{},\"/\"),Y.createDefaultDirectories(),Y.createDefaultDevices(),Y.createSpecialDirectories(),Y.filesystems={MEMFS:X}},init:(r,e,t)=>{Y.init.initialized=!0,Y.ensureErrnoError(),o.stdin=r||o.stdin,o.stdout=e||o.stdout,o.stderr=t||o.stderr,Y.createStandardStreams()},quit:()=>{Y.init.initialized=!1;for(var r=0;r<Y.streams.length;r++){var e=Y.streams[r];e&&Y.close(e)}},getMode:(r,e)=>{var t=0;return r&&(t|=365),e&&(t|=146),t},findObject:(r,e)=>{var t=Y.analyzePath(r,e);return t.exists?t.object:null},analyzePath:(r,e)=>{try{r=(n=Y.lookupPath(r,{follow:!e})).path}catch(r){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=Y.lookupPath(r,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=W.basename(r),n=Y.lookupPath(r,{follow:!e}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot=\"/\"===n.path}catch(r){t.error=r.errno}return t},createPath:(r,e,t,n)=>{r=\"string\"==typeof r?r:Y.getPath(r);for(var o=e.split(\"/\").reverse();o.length;){var i=o.pop();if(i){var a=W.join2(r,i);try{Y.mkdir(a)}catch(r){}r=a}}return a},createFile:(r,e,t,n,o)=>{var i=W.join2(\"string\"==typeof r?r:Y.getPath(r),e),a=Y.getMode(n,o);return Y.create(i,a)},createDataFile:(r,e,t,n,o,i)=>{var a=e;r&&(r=\"string\"==typeof r?r:Y.getPath(r),a=e?W.join2(r,e):r);var s=Y.getMode(n,o),u=Y.create(a,s);if(t){if(\"string\"==typeof t){for(var c=new Array(t.length),l=0,d=t.length;l<d;++l)c[l]=t.charCodeAt(l);t=c}Y.chmod(u,146|s);var f=Y.open(u,577);Y.write(f,t,0,t.length,0,i),Y.close(f),Y.chmod(u,s)}return u},createDevice:(r,e,t,n)=>{var o=W.join2(\"string\"==typeof r?r:Y.getPath(r),e),i=Y.getMode(!!t,!!n);Y.createDevice.major||(Y.createDevice.major=64);var a=Y.makedev(Y.createDevice.major++,0);return Y.registerDevice(a,{open:r=>{r.seekable=!1},close:r=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(r,e,n,o,i)=>{for(var a=0,s=0;s<o;s++){var u;try{u=t()}catch(r){throw new Y.ErrnoError(29)}if(void 0===u&&0===a)throw new Y.ErrnoError(6);if(null==u)break;a++,e[n+s]=u}return a&&(r.node.timestamp=Date.now()),a},write:(r,e,t,o,i)=>{for(var a=0;a<o;a++)try{n(e[t+a])}catch(r){throw new Y.ErrnoError(29)}return o&&(r.node.timestamp=Date.now()),a}}),Y.mkdev(o,i,a)},forceLoadFile:r=>{if(r.isDevice||r.isFolder||r.link||r.contents)return!0;if(\"undefined\"!=typeof XMLHttpRequest)throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(!i)throw new Error(\"Cannot load without read() or XMLHttpRequest.\");try{r.contents=or(i(r.url),!0),r.usedBytes=r.contents.length}catch(r){throw new Y.ErrnoError(29)}},createLazyFile:(r,e,t,n,o)=>{function i(){this.lengthKnown=!1,this.chunks=[]}if(i.prototype.get=function(r){if(!(r>this.length-1||r<0)){var e=r%this.chunkSize,t=r/this.chunkSize|0;return this.getter(t)[e]}},i.prototype.setDataGetter=function(r){this.getter=r},i.prototype.cacheLength=function(){var r=new XMLHttpRequest;if(r.open(\"HEAD\",t,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+r.status);var e,n=Number(r.getResponseHeader(\"Content-length\")),o=(e=r.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===e,i=(e=r.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===e,a=1048576;o||(a=n);var s=this;s.setDataGetter((r=>{var e=r*a,o=(r+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=((r,e)=>{if(r>e)throw new Error(\"invalid range (\"+r+\", \"+e+\") or no bytes requested!\");if(e>n-1)throw new Error(\"only \"+n+\" bytes available! programmer error!\");var o=new XMLHttpRequest;if(o.open(\"GET\",t,!1),n!==a&&o.setRequestHeader(\"Range\",\"bytes=\"+r+\"-\"+e),o.responseType=\"arraybuffer\",o.overrideMimeType&&o.overrideMimeType(\"text/plain; charset=x-user-defined\"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):or(o.responseText||\"\",!0)})(e,o)),void 0===s.chunks[r])throw new Error(\"doXHR failed!\");return s.chunks[r]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,f(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},\"undefined\"!=typeof XMLHttpRequest)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var a={isDevice:!1,url:t},s=Y.createFile(r,e,a,n,o);a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(s.stream_ops).forEach((r=>{var e=s.stream_ops[r];u[r]=function(){return Y.forceLoadFile(s),e.apply(null,arguments)}})),u.read=(r,e,t,n,o)=>{Y.forceLoadFile(s);var i=r.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var u=0;u<a;u++)e[t+u]=i[o+u];else for(u=0;u<a;u++)e[t+u]=i.get(o+u);return a},s.stream_ops=u,s},createPreloadedFile:(r,e,t,n,o,i,s,u,c,l)=>{var d=e?V.resolve(W.join2(r,e)):r;function f(t){function a(t){l&&l(),u||Y.createDataFile(r,e,t,n,o,c),i&&i(),O()}Browser.handledByPreloadPlugin(t,d,a,(()=>{s&&s(),O()}))||a(t)}N(),\"string\"==typeof t?function(r,e,t,n){var o=n?\"\":\"al \"+r;a(r,(function(t){m(t,'Loading data file \"'+r+'\" failed (no arrayBuffer).'),e(new Uint8Array(t)),o&&O()}),(function(e){if(!t)throw'Loading data file \"'+r+'\" failed.';t()})),o&&N()}(t,(r=>f(r)),s):f(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>\"EM_FS_\"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=Y.indexedDB();try{var o=n.open(Y.DB_NAME(),Y.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=()=>{f(\"creating db\"),o.result.createObjectStore(Y.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([Y.DB_STORE_NAME],\"readwrite\"),i=n.objectStore(Y.DB_STORE_NAME),a=0,s=0,u=r.length;function c(){0==s?e():t()}r.forEach((r=>{var e=i.put(Y.analyzePath(r).object.contents,r);e.onsuccess=()=>{++a+s==u&&c()},e.onerror=()=>{s++,a+s==u&&c()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=Y.indexedDB();try{var o=n.open(Y.DB_NAME(),Y.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var i=n.transaction([Y.DB_STORE_NAME],\"readonly\")}catch(r){return void t(r)}var a=i.objectStore(Y.DB_STORE_NAME),s=0,u=0,c=r.length;function l(){0==u?e():t()}r.forEach((r=>{var e=a.get(r);e.onsuccess=()=>{Y.analyzePath(r).exists&&Y.unlink(r),Y.createDataFile(W.dirname(r),W.basename(r),e.result,!0,!0,!0),++s+u==c&&l()},e.onerror=()=>{u++,s+u==c&&l()}})),i.onerror=t},o.onerror=t}},K={DEFAULT_POLLMASK:5,calculateAt:function(r,e,t){if(\"/\"===e[0])return e;var n;if(-100===r)n=Y.cwd();else{var o=Y.getStream(r);if(!o)throw new Y.ErrnoError(8);n=o.path}if(0==e.length){if(!t)throw new Y.ErrnoError(44);return n}return W.join2(n,e)},doStat:function(r,e,t){try{var n=r(e)}catch(r){if(r&&r.node&&W.normalize(e)!==W.normalize(Y.getPath(r.node)))return-54;throw r}return y[t>>2]=n.dev,y[t+4>>2]=0,y[t+8>>2]=n.ino,y[t+12>>2]=n.mode,y[t+16>>2]=n.nlink,y[t+20>>2]=n.uid,y[t+24>>2]=n.gid,y[t+28>>2]=n.rdev,y[t+32>>2]=0,R=[n.size>>>0,(M=n.size,+Math.abs(M)>=1?M>0?(0|Math.min(+Math.floor(M/4294967296),4294967295))>>>0:~~+Math.ceil((M-+(~~M>>>0))/4294967296)>>>0:0)],y[t+40>>2]=R[0],y[t+44>>2]=R[1],y[t+48>>2]=4096,y[t+52>>2]=n.blocks,y[t+56>>2]=n.atime.getTime()/1e3|0,y[t+60>>2]=0,y[t+64>>2]=n.mtime.getTime()/1e3|0,y[t+68>>2]=0,y[t+72>>2]=n.ctime.getTime()/1e3|0,y[t+76>>2]=0,R=[n.ino>>>0,(M=n.ino,+Math.abs(M)>=1?M>0?(0|Math.min(+Math.floor(M/4294967296),4294967295))>>>0:~~+Math.ceil((M-+(~~M>>>0))/4294967296)>>>0:0)],y[t+80>>2]=R[0],y[t+84>>2]=R[1],0},doMsync:function(r,e,t,n,o){var i=_.slice(r,r+t);Y.msync(e,i,o,t,n)},doMkdir:function(r,e){return\"/\"===(r=W.normalize(r))[r.length-1]&&(r=r.substr(0,r.length-1)),Y.mkdir(r,e,0),0},doMknod:function(r,e,t){switch(61440&e){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return Y.mknod(r,e,t),0},doReadlink:function(r,e,t){if(t<=0)return-28;var n=Y.readlink(r),o=Math.min(t,A(n)),i=w[e+o];return S(n,_,e,t+1),w[e+o]=i,o},doAccess:function(r,e){if(-8&e)return-28;var t=Y.lookupPath(r,{follow:!0}).node;if(!t)return-44;var n=\"\";return 4&e&&(n+=\"r\"),2&e&&(n+=\"w\"),1&e&&(n+=\"x\"),n&&Y.nodePermissions(t,n)?-2:0},doDup:function(r,e,t){var n=Y.getStream(t);return n&&Y.close(n),Y.open(r,e,0,t,t).fd},doReadv:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=y[e+8*i>>2],s=y[e+(8*i+4)>>2],u=Y.read(r,w,a,s,n);if(u<0)return-1;if(o+=u,u<s)break}return o},doWritev:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=y[e+8*i>>2],s=y[e+(8*i+4)>>2],u=Y.write(r,w,a,s,n);if(u<0)return-1;o+=u}return o},varargs:void 0,get:function(){return K.varargs+=4,y[K.varargs-4>>2]},getStr:function(r){return D(r)},getStreamFromFD:function(r){var e=Y.getStream(r);if(!e)throw new Y.ErrnoError(8);return e},get64:function(r,e){return r}},$=[];function Q(r){try{return d.grow(r-v.byteLength+65535>>>16),P(d.buffer),1}catch(r){}}var Z={};function rr(){if(!rr.strings){var r={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:u||\"./this.program\"};for(var e in Z)void 0===Z[e]?delete r[e]:r[e]=Z[e];var t=[];for(var e in r)t.push(e+\"=\"+r[e]);rr.strings=t}return rr.strings}var er=function(r,e,t,n){r||(r=this),this.parent=r,this.mount=r.mount,this.mounted=null,this.id=Y.nextInode++,this.name=e,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},tr=365,nr=146;function or(r,e,t){var n=t>0?t:A(r)+1,o=new Array(n),i=S(r,o,0,o.length);return e&&(o.length=i),o}Object.defineProperties(er.prototype,{read:{get:function(){return(this.mode&tr)===tr},set:function(r){r?this.mode|=tr:this.mode&=-366}},write:{get:function(){return(this.mode&nr)===nr},set:function(r){r?this.mode|=nr:this.mode&=-147}},isFolder:{get:function(){return Y.isDir(this.mode)}},isDevice:{get:function(){return Y.isChrdev(this.mode)}}}),Y.FSNode=er,Y.staticInit();var ir={g:function(r,e,t){K.varargs=t;try{var n=K.getStr(r),o=t?K.get():0;return Y.open(n,e,o).fd}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return-r.errno}},d:function(){L(\"\")},a:function(r,e,t){var n=function(r,e){var t;for($.length=0,e>>=2;t=_[r++];){var n=t<105;n&&1&e&&e++,$.push(n?E[e++>>1]:y[e]),++e}return $}(e,t);return H[r].apply(null,n)},j:function(r,e,t){_.copyWithin(r,e,e+t)},e:function(r){var e,t,n=_.length,o=2147483648;if((r>>>=0)>o)return!1;for(var i=1;i<=4;i*=2){var a=n*(1+.2/i);if(a=Math.min(a,r+100663296),Q(Math.min(o,(e=Math.max(r,a))+((t=65536)-e%t)%t)))return!0}return!1},h:function(r,e){var t=0;return rr().forEach((function(n,o){var i=e+t;y[r+4*o>>2]=i,function(r,e,t){for(var n=0;n<r.length;++n)w[e++>>0]=r.charCodeAt(n);t||(w[e>>0]=0)}(n,i),t+=n.length+1})),0},i:function(r,e){var t=rr();y[r>>2]=t.length;var n=0;return t.forEach((function(r){n+=r.length+1})),y[e>>2]=n,0},c:function(r){try{var e=K.getStreamFromFD(r);return Y.close(e),0}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},f:function(r,e,t,n){try{var o=K.getStreamFromFD(r),i=K.doReadv(o,e,t);return y[n>>2]=i,0}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},k:function(r,e,t,n,o){try{var i=K.getStreamFromFD(r),a=4294967296*t+(e>>>0),s=9007199254740992;return a<=-s||a>=s?-61:(Y.llseek(i,a,n),R=[i.position>>>0,(M=i.position,+Math.abs(M)>=1?M>0?(0|Math.min(+Math.floor(M/4294967296),4294967295))>>>0:~~+Math.ceil((M-+(~~M>>>0))/4294967296)>>>0:0)],y[o>>2]=R[0],y[o+4>>2]=R[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},b:function(r,e,t,n){try{var o=K.getStreamFromFD(r),i=K.doWritev(o,e,t);return y[n>>2]=i,0}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},l:function(r){var e=Date.now();return y[r>>2]=e/1e3|0,y[r+4>>2]=e%1e3*1e3|0,0}};!function(){var r={a:ir};function e(r,e){var t,n=r.exports;o.asm=n,P((d=o.asm.m).buffer),g=o.asm.G,t=o.asm.n,j.unshift(t),O()}function n(r){e(r.instance)}function i(e){return(l||\"function\"!=typeof fetch?Promise.resolve().then((function(){return U(x)})):fetch(x,{credentials:\"same-origin\"}).then((function(r){if(!r.ok)throw\"failed to load wasm binary file at '\"+x+\"'\";return r.arrayBuffer()})).catch((function(){return U(x)}))).then((function(e){return WebAssembly.instantiate(e,r)})).then((function(r){return r})).then(e,(function(r){p(\"failed to asynchronously prepare wasm: \"+r),L(r)}))}if(N(),o.instantiateWasm)try{return o.instantiateWasm(r,e)}catch(r){return p(\"Module.instantiateWasm callback failed with error: \"+r),!1}(l||\"function\"!=typeof WebAssembly.instantiateStreaming||I(x)||\"function\"!=typeof fetch?i(n):fetch(x,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(n,(function(r){return p(\"wasm streaming compile failed: \"+r),p(\"falling back to ArrayBuffer instantiation\"),i(n)}))}))).catch(t)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.n).apply(null,arguments)};var ar,sr=o._emscripten_bind_CExpat_CExpat_0=function(){return(sr=o._emscripten_bind_CExpat_CExpat_0=o.asm.o).apply(null,arguments)},ur=o._emscripten_bind_CExpat_version_0=function(){return(ur=o._emscripten_bind_CExpat_version_0=o.asm.p).apply(null,arguments)},cr=o._emscripten_bind_CExpat_create_0=function(){return(cr=o._emscripten_bind_CExpat_create_0=o.asm.q).apply(null,arguments)},lr=o._emscripten_bind_CExpat_destroy_0=function(){return(lr=o._emscripten_bind_CExpat_destroy_0=o.asm.r).apply(null,arguments)},dr=o._emscripten_bind_CExpat_parse_1=function(){return(dr=o._emscripten_bind_CExpat_parse_1=o.asm.s).apply(null,arguments)},fr=o._emscripten_bind_CExpat_tag_0=function(){return(fr=o._emscripten_bind_CExpat_tag_0=o.asm.t).apply(null,arguments)},pr=o._emscripten_bind_CExpat_attrs_0=function(){return(pr=o._emscripten_bind_CExpat_attrs_0=o.asm.u).apply(null,arguments)},hr=o._emscripten_bind_CExpat_content_0=function(){return(hr=o._emscripten_bind_CExpat_content_0=o.asm.v).apply(null,arguments)},mr=o._emscripten_bind_CExpat_startElement_0=function(){return(mr=o._emscripten_bind_CExpat_startElement_0=o.asm.w).apply(null,arguments)},vr=o._emscripten_bind_CExpat_endElement_0=function(){return(vr=o._emscripten_bind_CExpat_endElement_0=o.asm.x).apply(null,arguments)},wr=o._emscripten_bind_CExpat_characterData_0=function(){return(wr=o._emscripten_bind_CExpat_characterData_0=o.asm.y).apply(null,arguments)},_r=o._emscripten_bind_CExpat___destroy___0=function(){return(_r=o._emscripten_bind_CExpat___destroy___0=o.asm.z).apply(null,arguments)},yr=o._emscripten_bind_VoidPtr___destroy___0=function(){return(yr=o._emscripten_bind_VoidPtr___destroy___0=o.asm.A).apply(null,arguments)},Er=o._emscripten_bind_CExpatJS_CExpatJS_0=function(){return(Er=o._emscripten_bind_CExpatJS_CExpatJS_0=o.asm.B).apply(null,arguments)},gr=o._emscripten_bind_CExpatJS_startElement_0=function(){return(gr=o._emscripten_bind_CExpatJS_startElement_0=o.asm.C).apply(null,arguments)},br=o._emscripten_bind_CExpatJS_endElement_0=function(){return(br=o._emscripten_bind_CExpatJS_endElement_0=o.asm.D).apply(null,arguments)},kr=o._emscripten_bind_CExpatJS_characterData_0=function(){return(kr=o._emscripten_bind_CExpatJS_characterData_0=o.asm.E).apply(null,arguments)},Dr=o._emscripten_bind_CExpatJS___destroy___0=function(){return(Dr=o._emscripten_bind_CExpatJS___destroy___0=o.asm.F).apply(null,arguments)};function Sr(r){function t(){ar||(ar=!0,o.calledRun=!0,h||(o.noFSInit||Y.init.initialized||Y.init(),Y.ignorePermissions=!1,G(j),e(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for(\"function\"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)r=o.postRun.shift(),z.unshift(r);var r;G(z)}()))}T>0||(function(){if(o.preRun)for(\"function\"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)r=o.preRun.shift(),C.unshift(r);var r;G(C)}(),T>0||(o.setStatus?(o.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){o.setStatus(\"\")}),1),t()}),1)):t()))}if(o._malloc=function(){return(o._malloc=o.asm.H).apply(null,arguments)},B=function r(){ar||Sr(),ar||(B=r)},o.run=Sr,o.preInit)for(\"function\"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();function Ar(){}function Pr(r){return(r||Ar).__cache__}function xr(r,e){var t=Pr(e),n=t[r];return n||((n=Object.create((e||Ar).prototype)).ptr=r,t[r]=n)}Sr(),Ar.prototype=Object.create(Ar.prototype),Ar.prototype.constructor=Ar,Ar.prototype.__class__=Ar,Ar.__cache__={},o.WrapperObject=Ar,o.getCache=Pr,o.wrapPointer=xr,o.castObject=function(r,e){return xr(r.ptr,e)},o.NULL=xr(0),o.destroy=function(r){if(!r.__destroy__)throw\"Error: Cannot destroy object. (Did you create it yourself?)\";r.__destroy__(),delete Pr(r.__class__)[r.ptr]},o.compare=function(r,e){return r.ptr===e.ptr},o.getPointer=function(r){return r.ptr},o.getClass=function(r){return r.__class__};var Fr={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(Fr.needed){for(var r=0;r<Fr.temps.length;r++)o._free(Fr.temps[r]);Fr.temps.length=0,o._free(Fr.buffer),Fr.buffer=0,Fr.size+=Fr.needed,Fr.needed=0}Fr.buffer||(Fr.size+=128,Fr.buffer=o._malloc(Fr.size),m(Fr.buffer)),Fr.pos=0},alloc:function(r,e){m(Fr.buffer);var t,n=e.BYTES_PER_ELEMENT,i=r.length*n;return i=i+7&-8,Fr.pos+i>=Fr.size?(m(i>0),Fr.needed+=i,t=o._malloc(i),Fr.temps.push(t)):(t=Fr.buffer+Fr.pos,Fr.pos+=i),t},copy:function(r,e,t){switch(t>>>=0,e.BYTES_PER_ELEMENT){case 2:t>>>=1;break;case 4:t>>>=2;break;case 8:t>>>=3}for(var n=0;n<r.length;n++)e[t+n]=r[n]}};function Mr(){this.ptr=sr(),Pr(Mr)[this.ptr]=this}function Rr(){throw\"cannot construct a VoidPtr, no constructor in IDL\"}function Cr(){this.ptr=Er(),Pr(Cr)[this.ptr]=this}return Mr.prototype=Object.create(Ar.prototype),Mr.prototype.constructor=Mr,Mr.prototype.__class__=Mr,Mr.__cache__={},o.CExpat=Mr,Mr.prototype.version=Mr.prototype.version=function(){var r=this.ptr;return D(ur(r))},Mr.prototype.create=Mr.prototype.create=function(){var r=this.ptr;return!!cr(r)},Mr.prototype.destroy=Mr.prototype.destroy=function(){var r=this.ptr;lr(r)},Mr.prototype.parse=Mr.prototype.parse=function(r){var e=this.ptr;return Fr.prepare(),r=r&&\"object\"==typeof r?r.ptr:function(r){if(\"string\"==typeof r){var e=or(r),t=Fr.alloc(e,w);return Fr.copy(e,w,t),t}return r}(r),!!dr(e,r)},Mr.prototype.tag=Mr.prototype.tag=function(){var r=this.ptr;return D(fr(r))},Mr.prototype.attrs=Mr.prototype.attrs=function(){var r=this.ptr;return D(pr(r))},Mr.prototype.content=Mr.prototype.content=function(){var r=this.ptr;return D(hr(r))},Mr.prototype.startElement=Mr.prototype.startElement=function(){var r=this.ptr;mr(r)},Mr.prototype.endElement=Mr.prototype.endElement=function(){var r=this.ptr;vr(r)},Mr.prototype.characterData=Mr.prototype.characterData=function(){var r=this.ptr;wr(r)},Mr.prototype.__destroy__=Mr.prototype.__destroy__=function(){var r=this.ptr;_r(r)},Rr.prototype=Object.create(Ar.prototype),Rr.prototype.constructor=Rr,Rr.prototype.__class__=Rr,Rr.__cache__={},o.VoidPtr=Rr,Rr.prototype.__destroy__=Rr.prototype.__destroy__=function(){var r=this.ptr;yr(r)},Cr.prototype=Object.create(Mr.prototype),Cr.prototype.constructor=Cr,Cr.prototype.__class__=Cr,Cr.__cache__={},o.CExpatJS=Cr,Cr.prototype.startElement=Cr.prototype.startElement=function(){var r=this.ptr;gr(r)},Cr.prototype.endElement=Cr.prototype.endElement=function(){var r=this.ptr;br(r)},Cr.prototype.characterData=Cr.prototype.characterData=function(){var r=this.ptr;kr(r)},Cr.prototype.__destroy__=Cr.prototype.__destroy__=function(){var r=this.ptr;Dr(r)},r.ready},t.exports=o;var a=function(){if(\"undefined\"!=typeof self)return self;if(\"undefined\"!=typeof window)return window;if(\"undefined\"!=typeof global)return global;throw new Error(\"unable to locate global object\")}().__hpcc_wasmFolder||void 0;function s(r,e,t){var n=r.default||r;return n.__hpcc_promise||(n.__hpcc_promise=n({wasmBinary:t,locateFile:function(r,t){return\"\".concat(function(r,e){for(;r.charAt(r.length-1)===e;)r=r.substring(0,r.length-1);return r}(e||function(r){if(!arguments.length)return a;var e=a;return a=r,e}()||t||\".\",\"/\"),\"/\").concat(function(r,e){for(;r.charAt(0)===e;)r=r.substring(1);return r}(r,\"/\"))}})),n.__hpcc_promise}!function(){function r(r,e){this.tag=r,this.attrs=e,this._content=\"\"}Object.defineProperty(r.prototype,\"content\",{get:function(){return this._content},enumerable:!1,configurable:!0}),r.prototype.appendContent=function(r){this._content+=r}}();var u={exports:{}};!function(r,e){var t=(()=>{var r=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return function(e){var t,n,o=void 0!==(e=e||{})?e:{};o.ready=new Promise((function(r,e){t=r,n=e}));var i,a,s=Object.assign({},o),u=\"./this.program\",c=(r,e)=>{throw e},l=\"\";\"undefined\"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf(\"blob:\")?l.substr(0,l.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",i=r=>{var e=new XMLHttpRequest;return e.open(\"GET\",r,!1),e.send(null),e.responseText},a=(r,e,t)=>{var n=new XMLHttpRequest;n.open(\"GET\",r,!0),n.responseType=\"arraybuffer\",n.onload=()=>{200==n.status||0==n.status&&n.response?e(n.response):t()},n.onerror=t,n.send(null)};var d=o.print||console.log.bind(console),f=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments,o.thisProgram&&(u=o.thisProgram),o.quit&&(c=o.quit);var p,h=0;o.wasmBinary&&(p=o.wasmBinary);var m,v=o.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&L(\"no native wasm support detected\");var w=!1;function _(r,e){r||L(e)}var y,E,g,b,k,D,S,A=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function P(r,e,t){for(var n=e+t,o=e;r[o]&&!(o>=n);)++o;if(o-e>16&&r.subarray&&A)return A.decode(r.subarray(e,o));for(var i=\"\";e<o;){var a=r[e++];if(128&a){var s=63&r[e++];if(192!=(224&a)){var u=63&r[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&r[e++])<65536)i+=String.fromCharCode(a);else{var c=a-65536;i+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function x(r,e){return r?P(g,r,e):\"\"}function F(r,e,t,n){if(!(n>0))return 0;for(var o=t,i=t+n-1,a=0;a<r.length;++a){var s=r.charCodeAt(a);if(s>=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&r.charCodeAt(++a);if(s<=127){if(t>=i)break;e[t++]=s}else if(s<=2047){if(t+1>=i)break;e[t++]=192|s>>6,e[t++]=128|63&s}else if(s<=65535){if(t+2>=i)break;e[t++]=224|s>>12,e[t++]=128|s>>6&63,e[t++]=128|63&s}else{if(t+3>=i)break;e[t++]=240|s>>18,e[t++]=128|s>>12&63,e[t++]=128|s>>6&63,e[t++]=128|63&s}}return e[t]=0,t-o}function M(r){for(var e=0,t=0;t<r.length;++t){var n=r.charCodeAt(t);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&r.charCodeAt(++t)),n<=127?++e:e+=n<=2047?2:n<=65535?3:4}return e}function R(r){y=r,o.HEAP8=E=new Int8Array(r),o.HEAP16=b=new Int16Array(r),o.HEAP32=k=new Int32Array(r),o.HEAPU8=g=new Uint8Array(r),o.HEAPU16=new Uint16Array(r),o.HEAPU32=new Uint32Array(r),o.HEAPF32=new Float32Array(r),o.HEAPF64=D=new Float64Array(r)}o.INITIAL_MEMORY;var C=[],j=[],z=[];var T=0,B=null;function N(r){T++,o.monitorRunDependencies&&o.monitorRunDependencies(T)}function O(r){if(T--,o.monitorRunDependencies&&o.monitorRunDependencies(T),0==T&&B){var e=B;B=null,e()}}function L(r){o.onAbort&&o.onAbort(r),f(r=\"Aborted(\"+r+\")\"),w=!0,r+=\". Build with -s ASSERTIONS=1 for more info.\";var e=new WebAssembly.RuntimeError(r);throw n(e),e}o.preloadedImages={},o.preloadedAudios={};var I,U,H,G;function q(r){return r.startsWith(\"data:application/octet-stream;base64,\")}function W(r){try{if(r==I&&p)return new Uint8Array(p);throw\"both async and sync fetching of the wasm failed\"}catch(r){L(r)}}q(I=\"graphvizlib.wasm\")||(U=I,I=o.locateFile?o.locateFile(U,l):l+U);var V,J={161520:function(r,e){var t=x(r),n=x(e);tr.createPath(\"/\",$.dirname(t)),tr.writeFile($.join(\"/\",t),n)}};function X(r){for(;r.length>0;){var e=r.shift();if(\"function\"!=typeof e){var t=e.func;\"number\"==typeof t?void 0===e.arg?Y(t)():Y(t)(e.arg):t(void 0===e.arg?null:e.arg)}else e(o)}}function Y(r){return S.get(r)}V=()=>performance.now();function K(r){return k[gr()>>2]=r,r}var $={splitPath:function(r){return/^(\\\\/?|)([\\\\s\\\\S]*?)((?:\\\\.{1,2}|[^\\\\/]+?|)(\\\\.[^.\\\\/]*|))(?:[\\\\/]*)$/.exec(r).slice(1)},normalizeArray:function(r,e){for(var t=0,n=r.length-1;n>=0;n--){var o=r[n];\".\"===o?r.splice(n,1):\"..\"===o?(r.splice(n,1),t++):t&&(r.splice(n,1),t--)}if(e)for(;t;t--)r.unshift(\"..\");return r},normalize:function(r){var e=\"/\"===r.charAt(0),t=\"/\"===r.substr(-1);return(r=$.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||e||(r=\".\"),r&&t&&(r+=\"/\"),(e?\"/\":\"\")+r},dirname:function(r){var e=$.splitPath(r),t=e[0],n=e[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):\".\"},basename:function(r){if(\"/\"===r)return\"/\";var e=(r=(r=$.normalize(r)).replace(/\\\\/$/,\"\")).lastIndexOf(\"/\");return-1===e?r:r.substr(e+1)},extname:function(r){return $.splitPath(r)[3]},join:function(){var r=Array.prototype.slice.call(arguments,0);return $.normalize(r.join(\"/\"))},join2:function(r,e){return $.normalize(r+\"/\"+e)}};var Q={resolve:function(){for(var r=\"\",e=!1,t=arguments.length-1;t>=-1&&!e;t--){var n=t>=0?arguments[t]:tr.cwd();if(\"string\"!=typeof n)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!n)return\"\";r=n+\"/\"+r,e=\"/\"===n.charAt(0)}return(e?\"/\":\"\")+(r=$.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||\".\"},relative:function(r,e){function t(r){for(var e=0;e<r.length&&\"\"===r[e];e++);for(var t=r.length-1;t>=0&&\"\"===r[t];t--);return e>t?[]:r.slice(e,t-e+1)}r=Q.resolve(r).substr(1),e=Q.resolve(e).substr(1);for(var n=t(r.split(\"/\")),o=t(e.split(\"/\")),i=Math.min(n.length,o.length),a=i,s=0;s<i;s++)if(n[s]!==o[s]){a=s;break}var u=[];for(s=a;s<n.length;s++)u.push(\"..\");return(u=u.concat(o.slice(a))).join(\"/\")}},Z={ttys:[],init:function(){},shutdown:function(){},register:function(r,e){Z.ttys[r]={input:[],output:[],ops:e},tr.registerDevice(r,Z.stream_ops)},stream_ops:{open:function(r){var e=Z.ttys[r.node.rdev];if(!e)throw new tr.ErrnoError(43);r.tty=e,r.seekable=!1},close:function(r){r.tty.ops.flush(r.tty)},flush:function(r){r.tty.ops.flush(r.tty)},read:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.get_char)throw new tr.ErrnoError(60);for(var i=0,a=0;a<n;a++){var s;try{s=r.tty.ops.get_char(r.tty)}catch(r){throw new tr.ErrnoError(29)}if(void 0===s&&0===i)throw new tr.ErrnoError(6);if(null==s)break;i++,e[t+a]=s}return i&&(r.node.timestamp=Date.now()),i},write:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.put_char)throw new tr.ErrnoError(60);try{for(var i=0;i<n;i++)r.tty.ops.put_char(r.tty,e[t+i])}catch(r){throw new tr.ErrnoError(29)}return n&&(r.node.timestamp=Date.now()),i}},default_tty_ops:{get_char:function(r){if(!r.input.length){var e=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt?null!==(e=window.prompt(\"Input: \"))&&(e+=\"\\\\n\"):\"function\"==typeof readline&&null!==(e=readline())&&(e+=\"\\\\n\"),!e)return null;r.input=dr(e,!0)}return r.input.shift()},put_char:function(r,e){null===e||10===e?(d(P(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(d(P(r.output,0)),r.output=[])}},default_tty1_ops:{put_char:function(r,e){null===e||10===e?(f(P(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(f(P(r.output,0)),r.output=[])}}};function rr(r){r=function(r,e){return Math.ceil(r/e)*e}(r,65536);var e=br(65536,r);return e?(function(r,e){g.fill(0,r,r+e)}(e,r),e):0}var er={ops_table:null,mount:function(r){return er.createNode(null,\"/\",16895,0)},createNode:function(r,e,t,n){if(tr.isBlkdev(t)||tr.isFIFO(t))throw new tr.ErrnoError(63);er.ops_table||(er.ops_table={dir:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr,lookup:er.node_ops.lookup,mknod:er.node_ops.mknod,rename:er.node_ops.rename,unlink:er.node_ops.unlink,rmdir:er.node_ops.rmdir,readdir:er.node_ops.readdir,symlink:er.node_ops.symlink},stream:{llseek:er.stream_ops.llseek}},file:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr},stream:{llseek:er.stream_ops.llseek,read:er.stream_ops.read,write:er.stream_ops.write,allocate:er.stream_ops.allocate,mmap:er.stream_ops.mmap,msync:er.stream_ops.msync}},link:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr,readlink:er.node_ops.readlink},stream:{}},chrdev:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr},stream:tr.chrdev_stream_ops}});var o=tr.createNode(r,e,t,n);return tr.isDir(o.mode)?(o.node_ops=er.ops_table.dir.node,o.stream_ops=er.ops_table.dir.stream,o.contents={}):tr.isFile(o.mode)?(o.node_ops=er.ops_table.file.node,o.stream_ops=er.ops_table.file.stream,o.usedBytes=0,o.contents=null):tr.isLink(o.mode)?(o.node_ops=er.ops_table.link.node,o.stream_ops=er.ops_table.link.stream):tr.isChrdev(o.mode)&&(o.node_ops=er.ops_table.chrdev.node,o.stream_ops=er.ops_table.chrdev.stream),o.timestamp=Date.now(),r&&(r.contents[e]=o,r.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(r){return r.contents?r.contents.subarray?r.contents.subarray(0,r.usedBytes):new Uint8Array(r.contents):new Uint8Array(0)},expandFileStorage:function(r,e){var t=r.contents?r.contents.length:0;if(!(t>=e)){e=Math.max(e,t*(t<1048576?2:1.125)>>>0),0!=t&&(e=Math.max(e,256));var n=r.contents;r.contents=new Uint8Array(e),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage:function(r,e){if(r.usedBytes!=e)if(0==e)r.contents=null,r.usedBytes=0;else{var t=r.contents;r.contents=new Uint8Array(e),t&&r.contents.set(t.subarray(0,Math.min(e,r.usedBytes))),r.usedBytes=e}},node_ops:{getattr:function(r){var e={};return e.dev=tr.isChrdev(r.mode)?r.id:1,e.ino=r.id,e.mode=r.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=r.rdev,tr.isDir(r.mode)?e.size=4096:tr.isFile(r.mode)?e.size=r.usedBytes:tr.isLink(r.mode)?e.size=r.link.length:e.size=0,e.atime=new Date(r.timestamp),e.mtime=new Date(r.timestamp),e.ctime=new Date(r.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(r,e){void 0!==e.mode&&(r.mode=e.mode),void 0!==e.timestamp&&(r.timestamp=e.timestamp),void 0!==e.size&&er.resizeFileStorage(r,e.size)},lookup:function(r,e){throw tr.genericErrors[44]},mknod:function(r,e,t,n){return er.createNode(r,e,t,n)},rename:function(r,e,t){if(tr.isDir(r.mode)){var n;try{n=tr.lookupNode(e,t)}catch(r){}if(n)for(var o in n.contents)throw new tr.ErrnoError(55)}delete r.parent.contents[r.name],r.parent.timestamp=Date.now(),r.name=t,e.contents[t]=r,e.timestamp=r.parent.timestamp,r.parent=e},unlink:function(r,e){delete r.contents[e],r.timestamp=Date.now()},rmdir:function(r,e){var t=tr.lookupNode(r,e);for(var n in t.contents)throw new tr.ErrnoError(55);delete r.contents[e],r.timestamp=Date.now()},readdir:function(r){var e=[\".\",\"..\"];for(var t in r.contents)r.contents.hasOwnProperty(t)&&e.push(t);return e},symlink:function(r,e,t){var n=er.createNode(r,e,41471,0);return n.link=t,n},readlink:function(r){if(!tr.isLink(r.mode))throw new tr.ErrnoError(28);return r.link}},stream_ops:{read:function(r,e,t,n,o){var i=r.node.contents;if(o>=r.node.usedBytes)return 0;var a=Math.min(r.node.usedBytes-o,n);if(a>8&&i.subarray)e.set(i.subarray(o,o+a),t);else for(var s=0;s<a;s++)e[t+s]=i[o+s];return a},write:function(r,e,t,n,o,i){if(e.buffer===E.buffer&&(i=!1),!n)return 0;var a=r.node;if(a.timestamp=Date.now(),e.subarray&&(!a.contents||a.contents.subarray)){if(i)return a.contents=e.subarray(t,t+n),a.usedBytes=n,n;if(0===a.usedBytes&&0===o)return a.contents=e.slice(t,t+n),a.usedBytes=n,n;if(o+n<=a.usedBytes)return a.contents.set(e.subarray(t,t+n),o),n}if(er.expandFileStorage(a,o+n),a.contents.subarray&&e.subarray)a.contents.set(e.subarray(t,t+n),o);else for(var s=0;s<n;s++)a.contents[o+s]=e[t+s];return a.usedBytes=Math.max(a.usedBytes,o+n),n},llseek:function(r,e,t){var n=e;if(1===t?n+=r.position:2===t&&tr.isFile(r.node.mode)&&(n+=r.node.usedBytes),n<0)throw new tr.ErrnoError(28);return n},allocate:function(r,e,t){er.expandFileStorage(r.node,e+t),r.node.usedBytes=Math.max(r.node.usedBytes,e+t)},mmap:function(r,e,t,n,o,i){if(0!==e)throw new tr.ErrnoError(28);if(!tr.isFile(r.node.mode))throw new tr.ErrnoError(43);var a,s,u=r.node.contents;if(2&i||u.buffer!==y){if((n>0||n+t<u.length)&&(u=u.subarray?u.subarray(n,n+t):Array.prototype.slice.call(u,n,n+t)),s=!0,!(a=rr(t)))throw new tr.ErrnoError(48);E.set(u,a)}else s=!1,a=u.byteOffset;return{ptr:a,allocated:s}},msync:function(r,e,t,n,o){if(!tr.isFile(r.node.mode))throw new tr.ErrnoError(43);return 2&o||er.stream_ops.write(r,e,0,n,t,!1),0}}};var tr={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(r,e={})=>{if(!(r=Q.resolve(tr.cwd(),r)))return{path:\"\",node:null};var t={follow_mount:!0,recurse_count:0};for(var n in t)void 0===e[n]&&(e[n]=t[n]);if(e.recurse_count>8)throw new tr.ErrnoError(32);for(var o=$.normalizeArray(r.split(\"/\").filter((r=>!!r)),!1),i=tr.root,a=\"/\",s=0;s<o.length;s++){var u=s===o.length-1;if(u&&e.parent)break;if(i=tr.lookupNode(i,o[s]),a=$.join2(a,o[s]),tr.isMountpoint(i)&&(!u||u&&e.follow_mount)&&(i=i.mounted.root),!u||e.follow)for(var c=0;tr.isLink(i.mode);){var l=tr.readlink(a);if(a=Q.resolve($.dirname(a),l),i=tr.lookupPath(a,{recurse_count:e.recurse_count}).node,c++>40)throw new tr.ErrnoError(32)}}return{path:a,node:i}},getPath:r=>{for(var e;;){if(tr.isRoot(r)){var t=r.mount.mountpoint;return e?\"/\"!==t[t.length-1]?t+\"/\"+e:t+e:t}e=e?r.name+\"/\"+e:r.name,r=r.parent}},hashName:(r,e)=>{for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(r+t>>>0)%tr.nameTable.length},hashAddNode:r=>{var e=tr.hashName(r.parent.id,r.name);r.name_next=tr.nameTable[e],tr.nameTable[e]=r},hashRemoveNode:r=>{var e=tr.hashName(r.parent.id,r.name);if(tr.nameTable[e]===r)tr.nameTable[e]=r.name_next;else for(var t=tr.nameTable[e];t;){if(t.name_next===r){t.name_next=r.name_next;break}t=t.name_next}},lookupNode:(r,e)=>{var t=tr.mayLookup(r);if(t)throw new tr.ErrnoError(t,r);for(var n=tr.hashName(r.id,e),o=tr.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===r.id&&i===e)return o}return tr.lookup(r,e)},createNode:(r,e,t,n)=>{var o=new tr.FSNode(r,e,t,n);return tr.hashAddNode(o),o},destroyNode:r=>{tr.hashRemoveNode(r)},isRoot:r=>r===r.parent,isMountpoint:r=>!!r.mounted,isFile:r=>32768==(61440&r),isDir:r=>16384==(61440&r),isLink:r=>40960==(61440&r),isChrdev:r=>8192==(61440&r),isBlkdev:r=>24576==(61440&r),isFIFO:r=>4096==(61440&r),isSocket:r=>49152==(49152&r),flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:r=>{var e=tr.flagModes[r];if(void 0===e)throw new Error(\"Unknown file open mode: \"+r);return e},flagsToPermissionString:r=>{var e=[\"r\",\"w\",\"rw\"][3&r];return 512&r&&(e+=\"w\"),e},nodePermissions:(r,e)=>tr.ignorePermissions||(!e.includes(\"r\")||292&r.mode)&&(!e.includes(\"w\")||146&r.mode)&&(!e.includes(\"x\")||73&r.mode)?0:2,mayLookup:r=>{var e=tr.nodePermissions(r,\"x\");return e||(r.node_ops.lookup?0:2)},mayCreate:(r,e)=>{try{tr.lookupNode(r,e);return 20}catch(r){}return tr.nodePermissions(r,\"wx\")},mayDelete:(r,e,t)=>{var n;try{n=tr.lookupNode(r,e)}catch(r){return r.errno}var o=tr.nodePermissions(r,\"wx\");if(o)return o;if(t){if(!tr.isDir(n.mode))return 54;if(tr.isRoot(n)||tr.getPath(n)===tr.cwd())return 10}else if(tr.isDir(n.mode))return 31;return 0},mayOpen:(r,e)=>r?tr.isLink(r.mode)?32:tr.isDir(r.mode)&&(\"r\"!==tr.flagsToPermissionString(e)||512&e)?31:tr.nodePermissions(r,tr.flagsToPermissionString(e)):44,MAX_OPEN_FDS:4096,nextfd:(r=0,e=tr.MAX_OPEN_FDS)=>{for(var t=r;t<=e;t++)if(!tr.streams[t])return t;throw new tr.ErrnoError(33)},getStream:r=>tr.streams[r],createStream:(r,e,t)=>{tr.FSStream||(tr.FSStream=function(){},tr.FSStream.prototype={object:{get:function(){return this.node},set:function(r){this.node=r}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}),r=Object.assign(new tr.FSStream,r);var n=tr.nextfd(e,t);return r.fd=n,tr.streams[n]=r,r},closeStream:r=>{tr.streams[r]=null},chrdev_stream_ops:{open:r=>{var e=tr.getDevice(r.node.rdev);r.stream_ops=e.stream_ops,r.stream_ops.open&&r.stream_ops.open(r)},llseek:()=>{throw new tr.ErrnoError(70)}},major:r=>r>>8,minor:r=>255&r,makedev:(r,e)=>r<<8|e,registerDevice:(r,e)=>{tr.devices[r]={stream_ops:e}},getDevice:r=>tr.devices[r],getMounts:r=>{for(var e=[],t=[r];t.length;){var n=t.pop();e.push(n),t.push.apply(t,n.mounts)}return e},syncfs:(r,e)=>{\"function\"==typeof r&&(e=r,r=!1),tr.syncFSRequests++,tr.syncFSRequests>1&&f(\"warning: \"+tr.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var t=tr.getMounts(tr.root.mount),n=0;function o(r){return tr.syncFSRequests--,e(r)}function i(r){if(r)return i.errored?void 0:(i.errored=!0,o(r));++n>=t.length&&o(null)}t.forEach((e=>{if(!e.type.syncfs)return i(null);e.type.syncfs(e,r,i)}))},mount:(r,e,t)=>{var n,o=\"/\"===t,i=!t;if(o&&tr.root)throw new tr.ErrnoError(10);if(!o&&!i){var a=tr.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,tr.isMountpoint(n))throw new tr.ErrnoError(10);if(!tr.isDir(n.mode))throw new tr.ErrnoError(54)}var s={type:r,opts:e,mountpoint:t,mounts:[]},u=r.mount(s);return u.mount=s,s.root=u,o?tr.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:r=>{var e=tr.lookupPath(r,{follow_mount:!1});if(!tr.isMountpoint(e.node))throw new tr.ErrnoError(28);var t=e.node,n=t.mounted,o=tr.getMounts(n);Object.keys(tr.nameTable).forEach((r=>{for(var e=tr.nameTable[r];e;){var t=e.name_next;o.includes(e.mount)&&tr.destroyNode(e),e=t}})),t.mounted=null;var i=t.mount.mounts.indexOf(n);t.mount.mounts.splice(i,1)},lookup:(r,e)=>r.node_ops.lookup(r,e),mknod:(r,e,t)=>{var n=tr.lookupPath(r,{parent:!0}).node,o=$.basename(r);if(!o||\".\"===o||\"..\"===o)throw new tr.ErrnoError(28);var i=tr.mayCreate(n,o);if(i)throw new tr.ErrnoError(i);if(!n.node_ops.mknod)throw new tr.ErrnoError(63);return n.node_ops.mknod(n,o,e,t)},create:(r,e)=>(e=void 0!==e?e:438,e&=4095,e|=32768,tr.mknod(r,e,0)),mkdir:(r,e)=>(e=void 0!==e?e:511,e&=1023,e|=16384,tr.mknod(r,e,0)),mkdirTree:(r,e)=>{for(var t=r.split(\"/\"),n=\"\",o=0;o<t.length;++o)if(t[o]){n+=\"/\"+t[o];try{tr.mkdir(n,e)}catch(r){if(20!=r.errno)throw r}}},mkdev:(r,e,t)=>(void 0===t&&(t=e,e=438),e|=8192,tr.mknod(r,e,t)),symlink:(r,e)=>{if(!Q.resolve(r))throw new tr.ErrnoError(44);var t=tr.lookupPath(e,{parent:!0}).node;if(!t)throw new tr.ErrnoError(44);var n=$.basename(e),o=tr.mayCreate(t,n);if(o)throw new tr.ErrnoError(o);if(!t.node_ops.symlink)throw new tr.ErrnoError(63);return t.node_ops.symlink(t,n,r)},rename:(r,e)=>{var t,n,o=$.dirname(r),i=$.dirname(e),a=$.basename(r),s=$.basename(e);if(t=tr.lookupPath(r,{parent:!0}).node,n=tr.lookupPath(e,{parent:!0}).node,!t||!n)throw new tr.ErrnoError(44);if(t.mount!==n.mount)throw new tr.ErrnoError(75);var u,c=tr.lookupNode(t,a),l=Q.relative(r,i);if(\".\"!==l.charAt(0))throw new tr.ErrnoError(28);if(\".\"!==(l=Q.relative(e,o)).charAt(0))throw new tr.ErrnoError(55);try{u=tr.lookupNode(n,s)}catch(r){}if(c!==u){var d=tr.isDir(c.mode),f=tr.mayDelete(t,a,d);if(f)throw new tr.ErrnoError(f);if(f=u?tr.mayDelete(n,s,d):tr.mayCreate(n,s))throw new tr.ErrnoError(f);if(!t.node_ops.rename)throw new tr.ErrnoError(63);if(tr.isMountpoint(c)||u&&tr.isMountpoint(u))throw new tr.ErrnoError(10);if(n!==t&&(f=tr.nodePermissions(t,\"w\")))throw new tr.ErrnoError(f);tr.hashRemoveNode(c);try{t.node_ops.rename(c,n,s)}catch(r){throw r}finally{tr.hashAddNode(c)}}},rmdir:r=>{var e=tr.lookupPath(r,{parent:!0}).node,t=$.basename(r),n=tr.lookupNode(e,t),o=tr.mayDelete(e,t,!0);if(o)throw new tr.ErrnoError(o);if(!e.node_ops.rmdir)throw new tr.ErrnoError(63);if(tr.isMountpoint(n))throw new tr.ErrnoError(10);e.node_ops.rmdir(e,t),tr.destroyNode(n)},readdir:r=>{var e=tr.lookupPath(r,{follow:!0}).node;if(!e.node_ops.readdir)throw new tr.ErrnoError(54);return e.node_ops.readdir(e)},unlink:r=>{var e=tr.lookupPath(r,{parent:!0}).node;if(!e)throw new tr.ErrnoError(44);var t=$.basename(r),n=tr.lookupNode(e,t),o=tr.mayDelete(e,t,!1);if(o)throw new tr.ErrnoError(o);if(!e.node_ops.unlink)throw new tr.ErrnoError(63);if(tr.isMountpoint(n))throw new tr.ErrnoError(10);e.node_ops.unlink(e,t),tr.destroyNode(n)},readlink:r=>{var e=tr.lookupPath(r).node;if(!e)throw new tr.ErrnoError(44);if(!e.node_ops.readlink)throw new tr.ErrnoError(28);return Q.resolve(tr.getPath(e.parent),e.node_ops.readlink(e))},stat:(r,e)=>{var t=tr.lookupPath(r,{follow:!e}).node;if(!t)throw new tr.ErrnoError(44);if(!t.node_ops.getattr)throw new tr.ErrnoError(63);return t.node_ops.getattr(t)},lstat:r=>tr.stat(r,!0),chmod:(r,e,t)=>{var n;\"string\"==typeof r?n=tr.lookupPath(r,{follow:!t}).node:n=r;if(!n.node_ops.setattr)throw new tr.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&e|-4096&n.mode,timestamp:Date.now()})},lchmod:(r,e)=>{tr.chmod(r,e,!0)},fchmod:(r,e)=>{var t=tr.getStream(r);if(!t)throw new tr.ErrnoError(8);tr.chmod(t.node,e)},chown:(r,e,t,n)=>{var o;\"string\"==typeof r?o=tr.lookupPath(r,{follow:!n}).node:o=r;if(!o.node_ops.setattr)throw new tr.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(r,e,t)=>{tr.chown(r,e,t,!0)},fchown:(r,e,t)=>{var n=tr.getStream(r);if(!n)throw new tr.ErrnoError(8);tr.chown(n.node,e,t)},truncate:(r,e)=>{if(e<0)throw new tr.ErrnoError(28);var t;\"string\"==typeof r?t=tr.lookupPath(r,{follow:!0}).node:t=r;if(!t.node_ops.setattr)throw new tr.ErrnoError(63);if(tr.isDir(t.mode))throw new tr.ErrnoError(31);if(!tr.isFile(t.mode))throw new tr.ErrnoError(28);var n=tr.nodePermissions(t,\"w\");if(n)throw new tr.ErrnoError(n);t.node_ops.setattr(t,{size:e,timestamp:Date.now()})},ftruncate:(r,e)=>{var t=tr.getStream(r);if(!t)throw new tr.ErrnoError(8);if(0==(2097155&t.flags))throw new tr.ErrnoError(28);tr.truncate(t.node,e)},utime:(r,e,t)=>{var n=tr.lookupPath(r,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(e,t)})},open:(r,e,t,n,i)=>{if(\"\"===r)throw new tr.ErrnoError(44);var a;if(t=void 0===t?438:t,t=64&(e=\"string\"==typeof e?tr.modeStringToFlags(e):e)?4095&t|32768:0,\"object\"==typeof r)a=r;else{r=$.normalize(r);try{a=tr.lookupPath(r,{follow:!(131072&e)}).node}catch(r){}}var s=!1;if(64&e)if(a){if(128&e)throw new tr.ErrnoError(20)}else a=tr.mknod(r,t,0),s=!0;if(!a)throw new tr.ErrnoError(44);if(tr.isChrdev(a.mode)&&(e&=-513),65536&e&&!tr.isDir(a.mode))throw new tr.ErrnoError(54);if(!s){var u=tr.mayOpen(a,e);if(u)throw new tr.ErrnoError(u)}512&e&&tr.truncate(a,0),e&=-131713;var c=tr.createStream({node:a,path:tr.getPath(a),flags:e,seekable:!0,position:0,stream_ops:a.stream_ops,ungotten:[],error:!1},n,i);return c.stream_ops.open&&c.stream_ops.open(c),!o.logReadFiles||1&e||(tr.readFiles||(tr.readFiles={}),r in tr.readFiles||(tr.readFiles[r]=1)),c},close:r=>{if(tr.isClosed(r))throw new tr.ErrnoError(8);r.getdents&&(r.getdents=null);try{r.stream_ops.close&&r.stream_ops.close(r)}catch(r){throw r}finally{tr.closeStream(r.fd)}r.fd=null},isClosed:r=>null===r.fd,llseek:(r,e,t)=>{if(tr.isClosed(r))throw new tr.ErrnoError(8);if(!r.seekable||!r.stream_ops.llseek)throw new tr.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new tr.ErrnoError(28);return r.position=r.stream_ops.llseek(r,e,t),r.ungotten=[],r.position},read:(r,e,t,n,o)=>{if(n<0||o<0)throw new tr.ErrnoError(28);if(tr.isClosed(r))throw new tr.ErrnoError(8);if(1==(2097155&r.flags))throw new tr.ErrnoError(8);if(tr.isDir(r.node.mode))throw new tr.ErrnoError(31);if(!r.stream_ops.read)throw new tr.ErrnoError(28);var i=void 0!==o;if(i){if(!r.seekable)throw new tr.ErrnoError(70)}else o=r.position;var a=r.stream_ops.read(r,e,t,n,o);return i||(r.position+=a),a},write:(r,e,t,n,o,i)=>{if(n<0||o<0)throw new tr.ErrnoError(28);if(tr.isClosed(r))throw new tr.ErrnoError(8);if(0==(2097155&r.flags))throw new tr.ErrnoError(8);if(tr.isDir(r.node.mode))throw new tr.ErrnoError(31);if(!r.stream_ops.write)throw new tr.ErrnoError(28);r.seekable&&1024&r.flags&&tr.llseek(r,0,2);var a=void 0!==o;if(a){if(!r.seekable)throw new tr.ErrnoError(70)}else o=r.position;var s=r.stream_ops.write(r,e,t,n,o,i);return a||(r.position+=s),s},allocate:(r,e,t)=>{if(tr.isClosed(r))throw new tr.ErrnoError(8);if(e<0||t<=0)throw new tr.ErrnoError(28);if(0==(2097155&r.flags))throw new tr.ErrnoError(8);if(!tr.isFile(r.node.mode)&&!tr.isDir(r.node.mode))throw new tr.ErrnoError(43);if(!r.stream_ops.allocate)throw new tr.ErrnoError(138);r.stream_ops.allocate(r,e,t)},mmap:(r,e,t,n,o,i)=>{if(0!=(2&o)&&0==(2&i)&&2!=(2097155&r.flags))throw new tr.ErrnoError(2);if(1==(2097155&r.flags))throw new tr.ErrnoError(2);if(!r.stream_ops.mmap)throw new tr.ErrnoError(43);return r.stream_ops.mmap(r,e,t,n,o,i)},msync:(r,e,t,n,o)=>r&&r.stream_ops.msync?r.stream_ops.msync(r,e,t,n,o):0,munmap:r=>0,ioctl:(r,e,t)=>{if(!r.stream_ops.ioctl)throw new tr.ErrnoError(59);return r.stream_ops.ioctl(r,e,t)},readFile:(r,e={})=>{if(e.flags=e.flags||0,e.encoding=e.encoding||\"binary\",\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw new Error('Invalid encoding type \"'+e.encoding+'\"');var t,n=tr.open(r,e.flags),o=tr.stat(r).size,i=new Uint8Array(o);return tr.read(n,i,0,o,0),\"utf8\"===e.encoding?t=P(i,0):\"binary\"===e.encoding&&(t=i),tr.close(n),t},writeFile:(r,e,t={})=>{t.flags=t.flags||577;var n=tr.open(r,t.flags,t.mode);if(\"string\"==typeof e){var o=new Uint8Array(M(e)+1),i=F(e,o,0,o.length);tr.write(n,o,0,i,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(e))throw new Error(\"Unsupported data type\");tr.write(n,e,0,e.byteLength,void 0,t.canOwn)}tr.close(n)},cwd:()=>tr.currentPath,chdir:r=>{var e=tr.lookupPath(r,{follow:!0});if(null===e.node)throw new tr.ErrnoError(44);if(!tr.isDir(e.node.mode))throw new tr.ErrnoError(54);var t=tr.nodePermissions(e.node,\"x\");if(t)throw new tr.ErrnoError(t);tr.currentPath=e.path},createDefaultDirectories:()=>{tr.mkdir(\"/tmp\"),tr.mkdir(\"/home\"),tr.mkdir(\"/home/web_user\")},createDefaultDevices:()=>{tr.mkdir(\"/dev\"),tr.registerDevice(tr.makedev(1,3),{read:()=>0,write:(r,e,t,n,o)=>n}),tr.mkdev(\"/dev/null\",tr.makedev(1,3)),Z.register(tr.makedev(5,0),Z.default_tty_ops),Z.register(tr.makedev(6,0),Z.default_tty1_ops),tr.mkdev(\"/dev/tty\",tr.makedev(5,0)),tr.mkdev(\"/dev/tty1\",tr.makedev(6,0));var r=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var r=new Uint8Array(1);return function(){return crypto.getRandomValues(r),r[0]}}return function(){L(\"randomDevice\")}}();tr.createDevice(\"/dev\",\"random\",r),tr.createDevice(\"/dev\",\"urandom\",r),tr.mkdir(\"/dev/shm\"),tr.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:()=>{tr.mkdir(\"/proc\");var r=tr.mkdir(\"/proc/self\");tr.mkdir(\"/proc/self/fd\"),tr.mount({mount:()=>{var e=tr.createNode(r,\"fd\",16895,73);return e.node_ops={lookup:(r,e)=>{var t=+e,n=tr.getStream(t);if(!n)throw new tr.ErrnoError(8);var o={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},e}},{},\"/proc/self/fd\")},createStandardStreams:()=>{o.stdin?tr.createDevice(\"/dev\",\"stdin\",o.stdin):tr.symlink(\"/dev/tty\",\"/dev/stdin\"),o.stdout?tr.createDevice(\"/dev\",\"stdout\",null,o.stdout):tr.symlink(\"/dev/tty\",\"/dev/stdout\"),o.stderr?tr.createDevice(\"/dev\",\"stderr\",null,o.stderr):tr.symlink(\"/dev/tty1\",\"/dev/stderr\"),tr.open(\"/dev/stdin\",0),tr.open(\"/dev/stdout\",1),tr.open(\"/dev/stderr\",1)},ensureErrnoError:()=>{tr.ErrnoError||(tr.ErrnoError=function(r,e){this.node=e,this.setErrno=function(r){this.errno=r},this.setErrno(r),this.message=\"FS error\"},tr.ErrnoError.prototype=new Error,tr.ErrnoError.prototype.constructor=tr.ErrnoError,[44].forEach((r=>{tr.genericErrors[r]=new tr.ErrnoError(r),tr.genericErrors[r].stack=\"<generic error, no stack>\"})))},staticInit:()=>{tr.ensureErrnoError(),tr.nameTable=new Array(4096),tr.mount(er,{},\"/\"),tr.createDefaultDirectories(),tr.createDefaultDevices(),tr.createSpecialDirectories(),tr.filesystems={MEMFS:er}},init:(r,e,t)=>{tr.init.initialized=!0,tr.ensureErrnoError(),o.stdin=r||o.stdin,o.stdout=e||o.stdout,o.stderr=t||o.stderr,tr.createStandardStreams()},quit:()=>{tr.init.initialized=!1;for(var r=0;r<tr.streams.length;r++){var e=tr.streams[r];e&&tr.close(e)}},getMode:(r,e)=>{var t=0;return r&&(t|=365),e&&(t|=146),t},findObject:(r,e)=>{var t=tr.analyzePath(r,e);return t.exists?t.object:null},analyzePath:(r,e)=>{try{r=(n=tr.lookupPath(r,{follow:!e})).path}catch(r){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=tr.lookupPath(r,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=$.basename(r),n=tr.lookupPath(r,{follow:!e}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot=\"/\"===n.path}catch(r){t.error=r.errno}return t},createPath:(r,e,t,n)=>{r=\"string\"==typeof r?r:tr.getPath(r);for(var o=e.split(\"/\").reverse();o.length;){var i=o.pop();if(i){var a=$.join2(r,i);try{tr.mkdir(a)}catch(r){}r=a}}return a},createFile:(r,e,t,n,o)=>{var i=$.join2(\"string\"==typeof r?r:tr.getPath(r),e),a=tr.getMode(n,o);return tr.create(i,a)},createDataFile:(r,e,t,n,o,i)=>{var a=e;r&&(r=\"string\"==typeof r?r:tr.getPath(r),a=e?$.join2(r,e):r);var s=tr.getMode(n,o),u=tr.create(a,s);if(t){if(\"string\"==typeof t){for(var c=new Array(t.length),l=0,d=t.length;l<d;++l)c[l]=t.charCodeAt(l);t=c}tr.chmod(u,146|s);var f=tr.open(u,577);tr.write(f,t,0,t.length,0,i),tr.close(f),tr.chmod(u,s)}return u},createDevice:(r,e,t,n)=>{var o=$.join2(\"string\"==typeof r?r:tr.getPath(r),e),i=tr.getMode(!!t,!!n);tr.createDevice.major||(tr.createDevice.major=64);var a=tr.makedev(tr.createDevice.major++,0);return tr.registerDevice(a,{open:r=>{r.seekable=!1},close:r=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(r,e,n,o,i)=>{for(var a=0,s=0;s<o;s++){var u;try{u=t()}catch(r){throw new tr.ErrnoError(29)}if(void 0===u&&0===a)throw new tr.ErrnoError(6);if(null==u)break;a++,e[n+s]=u}return a&&(r.node.timestamp=Date.now()),a},write:(r,e,t,o,i)=>{for(var a=0;a<o;a++)try{n(e[t+a])}catch(r){throw new tr.ErrnoError(29)}return o&&(r.node.timestamp=Date.now()),a}}),tr.mkdev(o,i,a)},forceLoadFile:r=>{if(r.isDevice||r.isFolder||r.link||r.contents)return!0;if(\"undefined\"!=typeof XMLHttpRequest)throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(!i)throw new Error(\"Cannot load without read() or XMLHttpRequest.\");try{r.contents=dr(i(r.url),!0),r.usedBytes=r.contents.length}catch(r){throw new tr.ErrnoError(29)}},createLazyFile:(r,e,t,n,o)=>{function i(){this.lengthKnown=!1,this.chunks=[]}if(i.prototype.get=function(r){if(!(r>this.length-1||r<0)){var e=r%this.chunkSize,t=r/this.chunkSize|0;return this.getter(t)[e]}},i.prototype.setDataGetter=function(r){this.getter=r},i.prototype.cacheLength=function(){var r=new XMLHttpRequest;if(r.open(\"HEAD\",t,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+r.status);var e,n=Number(r.getResponseHeader(\"Content-length\")),o=(e=r.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===e,i=(e=r.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===e,a=1048576;o||(a=n);var s=this;s.setDataGetter((r=>{var e=r*a,o=(r+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=((r,e)=>{if(r>e)throw new Error(\"invalid range (\"+r+\", \"+e+\") or no bytes requested!\");if(e>n-1)throw new Error(\"only \"+n+\" bytes available! programmer error!\");var o=new XMLHttpRequest;if(o.open(\"GET\",t,!1),n!==a&&o.setRequestHeader(\"Range\",\"bytes=\"+r+\"-\"+e),o.responseType=\"arraybuffer\",o.overrideMimeType&&o.overrideMimeType(\"text/plain; charset=x-user-defined\"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):dr(o.responseText||\"\",!0)})(e,o)),void 0===s.chunks[r])throw new Error(\"doXHR failed!\");return s.chunks[r]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,d(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},\"undefined\"!=typeof XMLHttpRequest)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var a={isDevice:!1,url:t},s=tr.createFile(r,e,a,n,o);a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(s.stream_ops).forEach((r=>{var e=s.stream_ops[r];u[r]=function(){return tr.forceLoadFile(s),e.apply(null,arguments)}})),u.read=(r,e,t,n,o)=>{tr.forceLoadFile(s);var i=r.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var u=0;u<a;u++)e[t+u]=i[o+u];else for(u=0;u<a;u++)e[t+u]=i.get(o+u);return a},s.stream_ops=u,s},createPreloadedFile:(r,e,t,n,o,i,s,u,c,l)=>{var d=e?Q.resolve($.join2(r,e)):r;function f(t){function a(t){l&&l(),u||tr.createDataFile(r,e,t,n,o,c),i&&i(),O()}Browser.handledByPreloadPlugin(t,d,a,(()=>{s&&s(),O()}))||a(t)}N(),\"string\"==typeof t?function(r,e,t,n){var o=n?\"\":\"al \"+r;a(r,(function(t){_(t,'Loading data file \"'+r+'\" failed (no arrayBuffer).'),e(new Uint8Array(t)),o&&O()}),(function(e){if(!t)throw'Loading data file \"'+r+'\" failed.';t()})),o&&N()}(t,(r=>f(r)),s):f(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>\"EM_FS_\"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=tr.indexedDB();try{var o=n.open(tr.DB_NAME(),tr.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=()=>{d(\"creating db\"),o.result.createObjectStore(tr.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([tr.DB_STORE_NAME],\"readwrite\"),i=n.objectStore(tr.DB_STORE_NAME),a=0,s=0,u=r.length;function c(){0==s?e():t()}r.forEach((r=>{var e=i.put(tr.analyzePath(r).object.contents,r);e.onsuccess=()=>{++a+s==u&&c()},e.onerror=()=>{s++,a+s==u&&c()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=tr.indexedDB();try{var o=n.open(tr.DB_NAME(),tr.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var i=n.transaction([tr.DB_STORE_NAME],\"readonly\")}catch(r){return void t(r)}var a=i.objectStore(tr.DB_STORE_NAME),s=0,u=0,c=r.length;function l(){0==u?e():t()}r.forEach((r=>{var e=a.get(r);e.onsuccess=()=>{tr.analyzePath(r).exists&&tr.unlink(r),tr.createDataFile($.dirname(r),$.basename(r),e.result,!0,!0,!0),++s+u==c&&l()},e.onerror=()=>{u++,s+u==c&&l()}})),i.onerror=t},o.onerror=t}},nr={DEFAULT_POLLMASK:5,calculateAt:function(r,e,t){if(\"/\"===e[0])return e;var n;if(-100===r)n=tr.cwd();else{var o=tr.getStream(r);if(!o)throw new tr.ErrnoError(8);n=o.path}if(0==e.length){if(!t)throw new tr.ErrnoError(44);return n}return $.join2(n,e)},doStat:function(r,e,t){try{var n=r(e)}catch(r){if(r&&r.node&&$.normalize(e)!==$.normalize(tr.getPath(r.node)))return-54;throw r}return k[t>>2]=n.dev,k[t+4>>2]=0,k[t+8>>2]=n.ino,k[t+12>>2]=n.mode,k[t+16>>2]=n.nlink,k[t+20>>2]=n.uid,k[t+24>>2]=n.gid,k[t+28>>2]=n.rdev,k[t+32>>2]=0,G=[n.size>>>0,(H=n.size,+Math.abs(H)>=1?H>0?(0|Math.min(+Math.floor(H/4294967296),4294967295))>>>0:~~+Math.ceil((H-+(~~H>>>0))/4294967296)>>>0:0)],k[t+40>>2]=G[0],k[t+44>>2]=G[1],k[t+48>>2]=4096,k[t+52>>2]=n.blocks,k[t+56>>2]=n.atime.getTime()/1e3|0,k[t+60>>2]=0,k[t+64>>2]=n.mtime.getTime()/1e3|0,k[t+68>>2]=0,k[t+72>>2]=n.ctime.getTime()/1e3|0,k[t+76>>2]=0,G=[n.ino>>>0,(H=n.ino,+Math.abs(H)>=1?H>0?(0|Math.min(+Math.floor(H/4294967296),4294967295))>>>0:~~+Math.ceil((H-+(~~H>>>0))/4294967296)>>>0:0)],k[t+80>>2]=G[0],k[t+84>>2]=G[1],0},doMsync:function(r,e,t,n,o){var i=g.slice(r,r+t);tr.msync(e,i,o,t,n)},doMkdir:function(r,e){return\"/\"===(r=$.normalize(r))[r.length-1]&&(r=r.substr(0,r.length-1)),tr.mkdir(r,e,0),0},doMknod:function(r,e,t){switch(61440&e){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return tr.mknod(r,e,t),0},doReadlink:function(r,e,t){if(t<=0)return-28;var n=tr.readlink(r),o=Math.min(t,M(n)),i=E[e+o];return F(n,g,e,t+1),E[e+o]=i,o},doAccess:function(r,e){if(-8&e)return-28;var t=tr.lookupPath(r,{follow:!0}).node;if(!t)return-44;var n=\"\";return 4&e&&(n+=\"r\"),2&e&&(n+=\"w\"),1&e&&(n+=\"x\"),n&&tr.nodePermissions(t,n)?-2:0},doDup:function(r,e,t){var n=tr.getStream(t);return n&&tr.close(n),tr.open(r,e,0,t,t).fd},doReadv:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=k[e+8*i>>2],s=k[e+(8*i+4)>>2],u=tr.read(r,E,a,s,n);if(u<0)return-1;if(o+=u,u<s)break}return o},doWritev:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=k[e+8*i>>2],s=k[e+(8*i+4)>>2],u=tr.write(r,E,a,s,n);if(u<0)return-1;o+=u}return o},varargs:void 0,get:function(){return nr.varargs+=4,k[nr.varargs-4>>2]},getStr:function(r){return x(r)},getStreamFromFD:function(r){var e=tr.getStream(r);if(!e)throw new tr.ErrnoError(8);return e},get64:function(r,e){return r}};var or=[];function ir(r){try{return m.grow(r-y.byteLength+65535>>>16),R(m.buffer),1}catch(r){}}var ar={};function sr(){if(!sr.strings){var r={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:u||\"./this.program\"};for(var e in ar)void 0===ar[e]?delete r[e]:r[e]=ar[e];var t=[];for(var e in r)t.push(e+\"=\"+r[e]);sr.strings=t}return sr.strings}var ur=function(r,e,t,n){r||(r=this),this.parent=r,this.mount=r.mount,this.mounted=null,this.id=tr.nextInode++,this.name=e,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},cr=365,lr=146;function dr(r,e,t){var n=t>0?t:M(r)+1,o=new Array(n),i=F(r,o,0,o.length);return e&&(o.length=i),o}Object.defineProperties(ur.prototype,{read:{get:function(){return(this.mode&cr)===cr},set:function(r){r?this.mode|=cr:this.mode&=-366}},write:{get:function(){return(this.mode&lr)===lr},set:function(r){r?this.mode|=lr:this.mode&=-147}},isFolder:{get:function(){return tr.isDir(this.mode)}},isDevice:{get:function(){return tr.isChrdev(this.mode)}}}),tr.FSNode=ur,tr.staticInit();var fr={s:function(r,e){return function(r,e){var t;if(0===r)t=Date.now();else{if(1!==r&&4!==r)return K(28),-1;t=V()}return k[e>>2]=t/1e3|0,k[e+4>>2]=t%1e3*1e3*1e3|0,0}(r,e)},j:function(r,e,t,n){try{return e=nr.getStr(e),e=nr.calculateAt(r,e),nr.doAccess(e,t)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},i:function(r,e,t){nr.varargs=t;try{var n=nr.getStreamFromFD(r);switch(e){case 0:return(o=nr.get())<0?-28:tr.open(n.path,n.flags,0,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=nr.get();return n.flags|=o,0;case 5:o=nr.get();return b[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return K(28),-1}}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},z:function(r,e){try{var t=nr.getStreamFromFD(r);return nr.doStat(tr.stat,t.path,e)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},x:function(r,e,t,n){try{e=nr.getStr(e);var o=256&n,i=4096&n;return n&=-4353,e=nr.calculateAt(r,e,i),nr.doStat(o?tr.lstat:tr.stat,e,t)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},A:function(r,e,t){nr.varargs=t;try{var n=nr.getStreamFromFD(r);switch(e){case 21509:case 21505:case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:case 21523:case 21524:return n.tty?0:-59;case 21519:if(!n.tty)return-59;var o=nr.get();return k[o>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:o=nr.get();return tr.ioctl(n,e,o);default:L(\"bad ioctl syscall \"+e)}}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},d:function(r,e,t){nr.varargs=t;try{var n=nr.getStr(r),o=t?nr.get():0;return tr.open(n,e,o).fd}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},y:function(r,e){try{return r=nr.getStr(r),nr.doStat(tr.stat,r,e)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},r:function(r){try{return r=nr.getStr(r),tr.unlink(r),0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},p:function(){throw 1/0},t:function(r,e,t,n,o,i,a,s){try{var u=tr.getStream(o);if(!u)return-8;var c=tr.mmap(u,r,e,i,t,n),l=c.ptr;return k[a>>2]=c.allocated,l}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},u:function(r,e,t,n,o,i){try{var a=tr.getStream(o);a&&(2&t&&nr.doMsync(r,a,e,n,i),tr.munmap(a))}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},o:function(){L(\"\")},C:function(r,e,t){var n=function(r,e){var t;for(or.length=0,e>>=2;t=g[r++];){var n=t<105;n&&1&e&&e++,or.push(n?D[e++>>1]:k[e]),++e}return or}(e,t);return J[r].apply(null,n)},B:function(r,e,t){g.copyWithin(r,e,e+t)},q:function(r){var e,t,n=g.length,o=2147483648;if((r>>>=0)>o)return!1;for(var i=1;i<=4;i*=2){var a=n*(1+.2/i);if(a=Math.min(a,r+100663296),ir(Math.min(o,(e=Math.max(r,a))+((t=65536)-e%t)%t)))return!0}return!1},v:function(r,e){var t=0;return sr().forEach((function(n,o){var i=e+t;k[r+4*o>>2]=i,function(r,e,t){for(var n=0;n<r.length;++n)E[e++>>0]=r.charCodeAt(n);t||(E[e>>0]=0)}(n,i),t+=n.length+1})),0},w:function(r,e){var t=sr();k[r>>2]=t.length;var n=0;return t.forEach((function(r){n+=r.length+1})),k[e>>2]=n,0},e:function(r){!function(r,e){!function(r){v||(o.onExit&&o.onExit(r),w=!0);c(r,new Ar(r))}(r)}(r)},c:function(r){try{var e=nr.getStreamFromFD(r);return tr.close(e),0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},g:function(r,e,t,n){try{var o=nr.getStreamFromFD(r),i=nr.doReadv(o,e,t);return k[n>>2]=i,0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},n:function(r,e,t,n,o){try{var i=nr.getStreamFromFD(r),a=4294967296*t+(e>>>0),s=9007199254740992;return a<=-s||a>=s?-61:(tr.llseek(i,a,n),G=[i.position>>>0,(H=i.position,+Math.abs(H)>=1?H>0?(0|Math.min(+Math.floor(H/4294967296),4294967295))>>>0:~~+Math.ceil((H-+(~~H>>>0))/4294967296)>>>0:0)],k[o>>2]=G[0],k[o+4>>2]=G[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},h:function(r,e,t,n){try{var o=nr.getStreamFromFD(r),i=nr.doWritev(o,e,t);return k[n>>2]=i,0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},b:function(){return h},k:function(r){var e=Date.now();return k[r>>2]=e/1e3|0,k[r+4>>2]=e%1e3*1e3|0,0},l:function(r,e,t,n,o,i,a){var s=Dr();try{return Y(r)(e,t,n,o,i,a)}catch(r){if(Sr(s),r!==r+0)throw r;kr(1,0)}},m:function(r,e){var t=Dr();try{Y(r)(e)}catch(r){if(Sr(t),r!==r+0)throw r;kr(1,0)}},a:function(r){h=r},f:function(r){var e=Date.now()/1e3|0;return r&&(k[r>>2]=e),e}};!function(){var r={a:fr};function e(r,e){var t,n=r.exports;o.asm=n,R((m=o.asm.D).buffer),S=o.asm.M,t=o.asm.E,j.unshift(t),O()}function t(r){e(r.instance)}function i(e){return(p||\"function\"!=typeof fetch?Promise.resolve().then((function(){return W(I)})):fetch(I,{credentials:\"same-origin\"}).then((function(r){if(!r.ok)throw\"failed to load wasm binary file at '\"+I+\"'\";return r.arrayBuffer()})).catch((function(){return W(I)}))).then((function(e){return WebAssembly.instantiate(e,r)})).then((function(r){return r})).then(e,(function(r){f(\"failed to asynchronously prepare wasm: \"+r),L(r)}))}if(N(),o.instantiateWasm)try{return o.instantiateWasm(r,e)}catch(r){return f(\"Module.instantiateWasm callback failed with error: \"+r),!1}(p||\"function\"!=typeof WebAssembly.instantiateStreaming||q(I)||\"function\"!=typeof fetch?i(t):fetch(I,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(t,(function(r){return f(\"wasm streaming compile failed: \"+r),f(\"falling back to ArrayBuffer instantiation\"),i(t)}))}))).catch(n)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.E).apply(null,arguments)};var pr=o._emscripten_bind_VoidPtr___destroy___0=function(){return(pr=o._emscripten_bind_VoidPtr___destroy___0=o.asm.F).apply(null,arguments)},hr=o._emscripten_bind_Graphviz_Graphviz_2=function(){return(hr=o._emscripten_bind_Graphviz_Graphviz_2=o.asm.G).apply(null,arguments)},mr=o._emscripten_bind_Graphviz_version_0=function(){return(mr=o._emscripten_bind_Graphviz_version_0=o.asm.H).apply(null,arguments)},vr=o._emscripten_bind_Graphviz_lastError_0=function(){return(vr=o._emscripten_bind_Graphviz_lastError_0=o.asm.I).apply(null,arguments)},wr=o._emscripten_bind_Graphviz_layout_3=function(){return(wr=o._emscripten_bind_Graphviz_layout_3=o.asm.J).apply(null,arguments)},_r=o._emscripten_bind_Graphviz_createFile_2=function(){return(_r=o._emscripten_bind_Graphviz_createFile_2=o.asm.K).apply(null,arguments)},yr=o._emscripten_bind_Graphviz___destroy___0=function(){return(yr=o._emscripten_bind_Graphviz___destroy___0=o.asm.L).apply(null,arguments)};o._malloc=function(){return(o._malloc=o.asm.N).apply(null,arguments)},o._free=function(){return(o._free=o.asm.O).apply(null,arguments)};var Er,gr=o.___errno_location=function(){return(gr=o.___errno_location=o.asm.P).apply(null,arguments)},br=o._emscripten_builtin_memalign=function(){return(br=o._emscripten_builtin_memalign=o.asm.Q).apply(null,arguments)},kr=o._setThrew=function(){return(kr=o._setThrew=o.asm.R).apply(null,arguments)},Dr=o.stackSave=function(){return(Dr=o.stackSave=o.asm.S).apply(null,arguments)},Sr=o.stackRestore=function(){return(Sr=o.stackRestore=o.asm.T).apply(null,arguments)};function Ar(r){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+r+\")\",this.status=r}function Pr(r){function e(){Er||(Er=!0,o.calledRun=!0,w||(o.noFSInit||tr.init.initialized||tr.init(),tr.ignorePermissions=!1,X(j),t(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for(\"function\"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)r=o.postRun.shift(),z.unshift(r);var r;X(z)}()))}T>0||(!function(){if(o.preRun)for(\"function\"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)r=o.preRun.shift(),C.unshift(r);var r;X(C)}(),T>0||(o.setStatus?(o.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){o.setStatus(\"\")}),1),e()}),1)):e()))}if(B=function r(){Er||Pr(),Er||(B=r)},o.run=Pr,o.preInit)for(\"function\"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();function xr(){}function Fr(r){return(r||xr).__cache__}function Mr(r,e){var t=Fr(e),n=t[r];return n||((n=Object.create((e||xr).prototype)).ptr=r,t[r]=n)}Pr(),xr.prototype=Object.create(xr.prototype),xr.prototype.constructor=xr,xr.prototype.__class__=xr,xr.__cache__={},o.WrapperObject=xr,o.getCache=Fr,o.wrapPointer=Mr,o.castObject=function(r,e){return Mr(r.ptr,e)},o.NULL=Mr(0),o.destroy=function(r){if(!r.__destroy__)throw\"Error: Cannot destroy object. (Did you create it yourself?)\";r.__destroy__(),delete Fr(r.__class__)[r.ptr]},o.compare=function(r,e){return r.ptr===e.ptr},o.getPointer=function(r){return r.ptr},o.getClass=function(r){return r.__class__};var Rr={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(Rr.needed){for(var r=0;r<Rr.temps.length;r++)o._free(Rr.temps[r]);Rr.temps.length=0,o._free(Rr.buffer),Rr.buffer=0,Rr.size+=Rr.needed,Rr.needed=0}Rr.buffer||(Rr.size+=128,Rr.buffer=o._malloc(Rr.size),_(Rr.buffer)),Rr.pos=0},alloc:function(r,e){_(Rr.buffer);var t,n=e.BYTES_PER_ELEMENT,i=r.length*n;return i=i+7&-8,Rr.pos+i>=Rr.size?(_(i>0),Rr.needed+=i,t=o._malloc(i),Rr.temps.push(t)):(t=Rr.buffer+Rr.pos,Rr.pos+=i),t},copy:function(r,e,t){switch(t>>>=0,e.BYTES_PER_ELEMENT){case 2:t>>>=1;break;case 4:t>>>=2;break;case 8:t>>>=3}for(var n=0;n<r.length;n++)e[t+n]=r[n]}};function Cr(r){if(\"string\"==typeof r){var e=dr(r),t=Rr.alloc(e,E);return Rr.copy(e,E,t),t}return r}function jr(){throw\"cannot construct a VoidPtr, no constructor in IDL\"}function zr(r,e){r&&\"object\"==typeof r&&(r=r.ptr),e&&\"object\"==typeof e&&(e=e.ptr),this.ptr=hr(r,e),Fr(zr)[this.ptr]=this}return jr.prototype=Object.create(xr.prototype),jr.prototype.constructor=jr,jr.prototype.__class__=jr,jr.__cache__={},o.VoidPtr=jr,jr.prototype.__destroy__=jr.prototype.__destroy__=function(){var r=this.ptr;pr(r)},zr.prototype=Object.create(xr.prototype),zr.prototype.constructor=zr,zr.prototype.__class__=zr,zr.__cache__={},o.Graphviz=zr,zr.prototype.version=zr.prototype.version=function(){var r=this.ptr;return x(mr(r))},zr.prototype.lastError=zr.prototype.lastError=function(){var r=this.ptr;return x(vr(r))},zr.prototype.layout=zr.prototype.layout=function(r,e,t){var n=this.ptr;return Rr.prepare(),r=r&&\"object\"==typeof r?r.ptr:Cr(r),e=e&&\"object\"==typeof e?e.ptr:Cr(e),t=t&&\"object\"==typeof t?t.ptr:Cr(t),x(wr(n,r,e,t))},zr.prototype.createFile=zr.prototype.createFile=function(r,e){var t=this.ptr;Rr.prepare(),r=r&&\"object\"==typeof r?r.ptr:Cr(r),e=e&&\"object\"==typeof e?e.ptr:Cr(e),_r(t,r,e)},zr.prototype.__destroy__=zr.prototype.__destroy__=function(){var r=this.ptr;yr(r)},e.ready}})();r.exports=t}(u);var c=u.exports,l=Object.freeze(e({__proto__:null,default:c},[u.exports])),d=function(){return d=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++)for(var o in e=arguments[t])Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o]);return r},d.apply(this,arguments)},f=function(r,e,t){if(t||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return r.concat(n||Array.prototype.slice.call(e))};function p(r){return{path:r.path,data:'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\\\\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\\\n<svg width=\"'.concat(r.width,'\" height=\"').concat(r.height,'\"></svg>')}}function h(r,e){var t,n=d({images:[],files:[]},e);f(f([],n.files,!0),(t=n.images,t.map(p)),!0).forEach((function(e){return r.createFile(e.path,e.data)}))}var m={layout:function(r,e,t,n){return void 0===e&&(e=\"svg\"),void 0===t&&(t=\"dot\"),r?s(l,null==n?void 0:n.wasmFolder,null==n?void 0:n.wasmBinary).then((function(o){var i=new o.Graphviz(void 0!==(null==n?void 0:n.yInvert)&&(null==n?void 0:n.yInvert),void 0!==(null==n?void 0:n.nop)?null==n?void 0:n.nop:0);h(i,n);var a=i.layout(r,e,t);if(o.destroy(i),!a)throw new Error(o.Graphviz.prototype.lastError());return a})):Promise.resolve(\"\")},circo:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"circo\",t)},dot:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"dot\",t)},fdp:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"fdp\",t)},sfdp:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"sfdp\",t)},neato:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"neato\",t)},osage:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"osage\",t)},patchwork:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"patchwork\",t)},twopi:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"twopi\",t)}},v=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};var w={exports:{}};\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */function _(r){return void 0!==r.children}!function(r,e){r.exports=function(){function r(r){var e=typeof r;return null!==r&&(\"object\"===e||\"function\"===e)}function e(r){return\"function\"==typeof r}var t=Array.isArray?Array.isArray:function(r){return\"[object Array]\"===Object.prototype.toString.call(r)},n=0,o=void 0,i=void 0,a=function(r,e){E[n]=r,E[n+1]=e,2===(n+=2)&&(i?i(g):k())};function s(r){i=r}function u(r){a=r}var c=\"undefined\"!=typeof window?window:void 0,l=c||{},d=l.MutationObserver||l.WebKitMutationObserver,f=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),p=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function h(){return function(){return process.nextTick(g)}}function m(){return void 0!==o?function(){o(g)}:y()}function w(){var r=0,e=new d(g),t=document.createTextNode(\"\");return e.observe(t,{characterData:!0}),function(){t.data=r=++r%2}}function _(){var r=new MessageChannel;return r.port1.onmessage=g,function(){return r.port2.postMessage(0)}}function y(){var r=setTimeout;return function(){return r(g,1)}}var E=new Array(1e3);function g(){for(var r=0;r<n;r+=2)(0,E[r])(E[r+1]),E[r]=void 0,E[r+1]=void 0;n=0}function b(){try{var r=Function(\"return this\")().require(\"vertx\");return o=r.runOnLoop||r.runOnContext,m()}catch(r){return y()}}var k=void 0;function D(r,e){var t=this,n=new this.constructor(P);void 0===n[A]&&J(n);var o=t._state;if(o){var i=arguments[o-1];a((function(){return G(o,n,i,t._result)}))}else U(t,n,r,e);return n}function S(r){var e=this;if(r&&\"object\"==typeof r&&r.constructor===e)return r;var t=new e(P);return N(t,r),t}k=f?h():d?w():p?_():void 0===c?b():y();var A=Math.random().toString(36).substring(2);function P(){}var x=void 0,F=1,M=2;function R(){return new TypeError(\"You cannot resolve a promise with itself\")}function C(){return new TypeError(\"A promises callback cannot return that same promise.\")}function j(r,e,t,n){try{r.call(e,t,n)}catch(r){return r}}function z(r,e,t){a((function(r){var n=!1,o=j(t,e,(function(t){n||(n=!0,e!==t?N(r,t):L(r,t))}),(function(e){n||(n=!0,I(r,e))}),\"Settle: \"+(r._label||\" unknown promise\"));!n&&o&&(n=!0,I(r,o))}),r)}function T(r,e){e._state===F?L(r,e._result):e._state===M?I(r,e._result):U(e,void 0,(function(e){return N(r,e)}),(function(e){return I(r,e)}))}function B(r,t,n){t.constructor===r.constructor&&n===D&&t.constructor.resolve===S?T(r,t):void 0===n?L(r,t):e(n)?z(r,t,n):L(r,t)}function N(e,t){if(e===t)I(e,R());else if(r(t)){var n=void 0;try{n=t.then}catch(r){return void I(e,r)}B(e,t,n)}else L(e,t)}function O(r){r._onerror&&r._onerror(r._result),H(r)}function L(r,e){r._state===x&&(r._result=e,r._state=F,0!==r._subscribers.length&&a(H,r))}function I(r,e){r._state===x&&(r._state=M,r._result=e,a(O,r))}function U(r,e,t,n){var o=r._subscribers,i=o.length;r._onerror=null,o[i]=e,o[i+F]=t,o[i+M]=n,0===i&&r._state&&a(H,r)}function H(r){var e=r._subscribers,t=r._state;if(0!==e.length){for(var n=void 0,o=void 0,i=r._result,a=0;a<e.length;a+=3)n=e[a],o=e[a+t],n?G(t,n,o,i):o(i);r._subscribers.length=0}}function G(r,t,n,o){var i=e(n),a=void 0,s=void 0,u=!0;if(i){try{a=n(o)}catch(r){u=!1,s=r}if(t===a)return void I(t,C())}else a=o;t._state!==x||(i&&u?N(t,a):!1===u?I(t,s):r===F?L(t,a):r===M&&I(t,a))}function q(r,e){try{e((function(e){N(r,e)}),(function(e){I(r,e)}))}catch(e){I(r,e)}}var W=0;function V(){return W++}function J(r){r[A]=W++,r._state=void 0,r._result=void 0,r._subscribers=[]}function X(){return new Error(\"Array Methods must be provided an Array\")}var Y=function(){function r(r,e){this._instanceConstructor=r,this.promise=new r(P),this.promise[A]||J(this.promise),t(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?L(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&L(this.promise,this._result))):I(this.promise,X())}return r.prototype._enumerate=function(r){for(var e=0;this._state===x&&e<r.length;e++)this._eachEntry(r[e],e)},r.prototype._eachEntry=function(r,e){var t=this._instanceConstructor,n=t.resolve;if(n===S){var o=void 0,i=void 0,a=!1;try{o=r.then}catch(r){a=!0,i=r}if(o===D&&r._state!==x)this._settledAt(r._state,e,r._result);else if(\"function\"!=typeof o)this._remaining--,this._result[e]=r;else if(t===er){var s=new t(P);a?I(s,i):B(s,r,o),this._willSettleAt(s,e)}else this._willSettleAt(new t((function(e){return e(r)})),e)}else this._willSettleAt(n(r),e)},r.prototype._settledAt=function(r,e,t){var n=this.promise;n._state===x&&(this._remaining--,r===M?I(n,t):this._result[e]=t),0===this._remaining&&L(n,this._result)},r.prototype._willSettleAt=function(r,e){var t=this;U(r,void 0,(function(r){return t._settledAt(F,e,r)}),(function(r){return t._settledAt(M,e,r)}))},r}();function K(r){return new Y(this,r).promise}function $(r){var e=this;return t(r)?new e((function(t,n){for(var o=r.length,i=0;i<o;i++)e.resolve(r[i]).then(t,n)})):new e((function(r,e){return e(new TypeError(\"You must pass an array to race.\"))}))}function Q(r){var e=new this(P);return I(e,r),e}function Z(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function rr(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}var er=function(){function r(e){this[A]=V(),this._result=this._state=void 0,this._subscribers=[],P!==e&&(\"function\"!=typeof e&&Z(),this instanceof r?q(this,e):rr())}return r.prototype.catch=function(r){return this.then(null,r)},r.prototype.finally=function(r){var t=this,n=t.constructor;return e(r)?t.then((function(e){return n.resolve(r()).then((function(){return e}))}),(function(e){return n.resolve(r()).then((function(){throw e}))})):t.then(r,r)},r}();function tr(){var r=void 0;if(void 0!==v)r=v;else if(\"undefined\"!=typeof self)r=self;else try{r=Function(\"return this\")()}catch(r){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var e=r.Promise;if(e){var t=null;try{t=Object.prototype.toString.call(e.resolve())}catch(r){}if(\"[object Promise]\"===t&&!e.cast)return}r.Promise=er}return er.prototype.then=D,er.all=K,er.race=$,er.resolve=S,er.reject=Q,er._setScheduler=s,er._setAsap=u,er._asap=a,er.polyfill=tr,er.Promise=er,er}()}(w),w.exports.polyfill();var y=function(r){var e=[];return r.children.forEach((function(r){_(r)?e.push(y(r)):e.push(E(r))})),\"subgraph cluster_\".concat(r.id,' {\\\\nid=\"').concat(r.id,'\";\\\\nlabel=\"').concat(r.text,'\";\\\\nmargin=16;\\\\n').concat(e.join(\"\\\\n\"),\"\\\\n}\")},E=function(r){return\"\".concat(r.id,' [id=\"').concat(r.id,'\" label=\"').concat(r.text,'\" width=').concat(k(r.width),\" height=\").concat(k(r.height),\"]\")},g=function(r){return 96*r/72},b=function(r){return 96*r},k=function(r){return r/96};function D(r){var e=r?r.split(\",\").map((function(r){return g(+r)})):[0,0,0,0],t=e[0],n=e[1],o=e[2]-t,i=e[3]-n;return{x:t-o/2,y:n-i/2,width:o,height:i}}function S(r,e){var t=r.split(\",\").map((function(r){return g(+r)})),n=t[0],o=t[1];return{x:-n+e.width,y:-o+e.height}}function A(r,e,t){return void 0===t&&(t=\"json\"),m[r](e,t).then((function(r){return\"json\"===t?JSON.parse(r):r}))}function P(e,t){if(self.document=self.document||{currentScript:{src:t.wasmFolder+\"/dummy.js\"}},e.raw)return A(t.engine,e.raw,\"svg\");var n={},o=[],i=[],a={},s=[],u=[],c={},l=[],d=[];function f(r,e){_(r)?(n[r.id]=r,o.push(r),r.children.forEach((function(r){return f(r,!1)})),e&&i.push(y(r))):(a[r.id]=r,s.push(r),e&&u.push(E(r)))}return e.items.forEach((function(r){return f(r,!0)})),e.links.forEach((function(r){var e,t,n,o;c[r.id]=r,l.push(r),d.push((e=r.source.id,t=r.target.id,n=r.id,o=r.text,\"\".concat(e,\" -> \").concat(t,' [id=\"').concat(n,'\", label=\"').concat(o,'\"]')))})),A(t.engine,\"digraph G {\\\\n graph [fontname=Verdana,fontsize=11.0];\\\\n graph [rankdir=TB];\\\\n node [shape=rect,fontname=Verdana,fontsize=11.0,fixedsize=true];\\\\n edge [fontname=Verdana,fontsize=11.0];\\\\n\\\\n\".concat(i.join(\"\\\\n\"),\"\\\\n\\\\n\").concat(d.join(\"\\\\n\"),\"\\\\n\\\\n\").concat(u.join(\"\\\\n\"),\"\\\\n}\")).then((function(e){var t=D(e.bb);return e.objects&&e.objects.forEach((function(r){if(r.nodes){var e=function(r,e){var t=D(r);return{x:-t.x+e.width,y:-t.y+e.height,width:t.width,height:t.height}}(r.bb,t),o=n[r.id];o.x=e.x-t.width/2,o.y=e.y-t.height/2,o.width=e.width,o.height=e.height}else{var i=(u=r.pos,c=r.width,l=r.height,d=S(u,t),f=b(+c),p=b(+l),{x:d.x,y:d.y,width:f,height:p}),s=a[r.id];s&&(s.x=i.x-t.width/2,s.y=i.y-t.height/2)}var u,c,l,d,f,p})),e.edges&&e.edges.forEach((function(e){var n=c[e.id];n&&(n.points=function(e,t){if(e.pos){var n=e.pos.substr(2).split(\" \").map((function(r){return S(r,t)})).map((function(r){return[r.x-t.width/2,r.y-t.height/2]})),o=n.shift();return r(r([],n,!0),[o],!1)}return[]}(e,t))})),{clusters:o,nodes:s,links:l}}))}self.onmessage=function(r){P.apply(void 0,r.data).then((function(r){self.postMessage(r)}))}}();`;\n\n const workerBlob = new Blob([workerCode], { type: \"application/javascript\" });\n const workerUrl = URL.createObjectURL(workerBlob);\n const worker = new Worker(workerUrl);\n const response = new Promise<string>(resolve => {\n worker.onmessage = event => {\n resolve(event.data);\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n };\n worker.postMessage([data, options]);\n });\n return {\n terminate: () => worker.terminate(),\n response\n };\n}\n","import { curveBasis as d3CurveBasis, line as d3Line } from \"d3-shape\";\nimport { Cluster, graphviz as gvWorker, Node } from \"./graphvizWorker\";\nimport { Layout, Point } from \"./layout\";\nimport { EdgePlaceholder } from \"./placeholders\";\n\ntype Engine = \"circo\" | \"dot\" | \"fdp\" | \"neato\" | \"osage\" | \"patchwork\" | \"twopi\";\n\nconst lineBasis = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveBasis)\n ;\n\nexport class Graphviz extends Layout {\n\n _engine: Engine;\n _wasmFolder: string;\n\n constructor(graph, engine: Engine, wasmFolder: string) {\n super(graph);\n this._engine = engine;\n this._wasmFolder = wasmFolder;\n }\n\n start() {\n super.start();\n const size = this._graph.size();\n const data = this._graph.graphData();\n const nodeIdx = {};\n const hierarchy: Array<Cluster | Node> = data.hierarchy((type, item, children) => {\n switch (type) {\n case \"subgraph\":\n return {\n id: item.id,\n text: item.props.text,\n children\n };\n case \"vertex\":\n delete item[\"fx\"];\n delete item[\"fy\"];\n const bbox = item.element.node().getBBox();\n const retVal = {\n id: item.id,\n text: item.props.text,\n width: bbox.width,\n height: bbox.height\n };\n nodeIdx[retVal.id] = retVal;\n return retVal;\n }\n }) as Array<Cluster | Node>;\n return gvWorker({\n items: hierarchy,\n links: data.allEdges().map(e => ({\n id: e.props.id,\n source: nodeIdx[e.source.id],\n target: nodeIdx[e.target.id],\n text: e.props.label || \"\"\n })),\n raw: \"\"\n }, {\n engine: this._engine,\n wasmFolder: this._wasmFolder\n }).response.then((response: any) => {\n if (this.running()) {\n response.clusters.forEach(n => {\n const sg = data.subgraph(n.id);\n sg.x = n.x + size.width / 2 - n.width;\n sg.y = n.y + size.height / 2 - n.height;\n sg.props.width = n.width;\n sg.props.height = n.height;\n });\n response.nodes.forEach(n => {\n const v = data.vertex(n.id);\n v.x = n.x + size.width / 2;\n v.y = n.y + size.height / 2;\n });\n response.links.forEach(l => {\n const e = data.edge(l.id);\n e.points = [[e.source.x, e.source.y], ...(l.points !== undefined ? l.points.map(p => [p[0] + size.width / 2, p[1] + size.height / 2]) : []), [e.target.x, e.target.y]];\n // e.points = l.points.map(p => [p[0] + size.width / 2, p[1] + size.height / 2]);\n });\n this._graph\n .moveSubgraphs(true)\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n }\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } {\n let points = [];\n let hasNaN = false;\n if (ep.points) {\n points = ep.points.map(p => {\n const x = this._graph.project(p[0], false);\n const y = this._graph.project(p[1], false);\n if (isNaN(x) || isNaN(y)) {\n hasNaN = true;\n }\n return [x, y];\n });\n }\n if (hasNaN || points.length < 2) {\n return super.edgePath(ep, curveDepth);\n }\n return {\n path: lineBasis(points),\n labelPos: this.center(points)\n };\n }\n\n}\n\n","import { Layout } from \"./layout\";\n\nexport class Null extends Layout {\n\n start(): Promise<this> {\n return super.start().then(() => {\n this.stop();\n return this;\n });\n }\n}\n\nexport class Initial extends Layout {\n\n start(): Promise<this> {\n return super.start().then(() => {\n const size = this._graph.size();\n const data = this._graph.graphData();\n data.allEdges().forEach(e => delete e.points);\n // Avoid edges of 0 length ---\n data.allVertices().forEach(v => {\n delete v.fx;\n delete v.fy;\n v.x = size.width / 2 + Math.random() * 5 - 2.5;\n v.y = size.height / 2 + Math.random() * 5 - 2.5;\n });\n this._graph\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n return this;\n });\n }\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","import { Graph2 } from \"@hpcc-js/util\";\nimport { cluster, hierarchy, tree } from \"d3-hierarchy\";\nimport { linkHorizontal as d3LinkHorizontal } from \"d3-shape\";\nimport { Hierarchy } from \"./dagreWorker\";\nimport { Layout, Point } from \"./layout\";\nimport { VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder } from \"./placeholders\";\n\nconst linkHorizontal = d3LinkHorizontal<any, { x: number, y: number }>()\n .x(d => d.x)\n .y(d => d.y)\n ;\n\nclass Bounds {\n\n get x() {\n return this.x1;\n }\n\n get y() {\n return this.y1;\n }\n\n get width() {\n return this.x2 - this.x1;\n }\n\n get height() {\n return this.y2 - this.y1;\n }\n\n get center() {\n return {\n x: this.x1 + this.width / 2,\n y: this.y1 + this.height / 2\n };\n }\n\n constructor(public x1: number = 0, public y1: number = 0, public x2: number = x1, public y2: number = y1) {\n }\n\n reset(x: number, y: number) {\n this.x1 = x;\n this.x2 = x;\n this.y1 = y;\n this.y2 = y;\n }\n\n expand(x: number, y: number) {\n if (this.x1 > x) {\n this.x1 = x;\n } else if (this.x2 < x) {\n this.x2 = x;\n }\n if (this.y1 > y) {\n this.y1 = y;\n } else if (this.y2 < y) {\n this.y2 = y;\n }\n }\n}\n\ninterface Node {\n origData: VertexPlaceholder;\n children: Node[];\n}\n\nexport interface EdgeLayout {\n path: string;\n labelPos: Point;\n}\n\nexport interface Options {\n\n}\n\nexport interface TidyTreeOptions extends Options {\n rankdir: \"TB\" | \"LR\";\n}\n\nexport class TidyTreeBase extends Layout {\n\n constructor(graph, protected options: Options) {\n super(graph);\n }\n\n private _visited = {};\n protected _tree: Node;\n protected _d3Hierarchy: Hierarchy;\n\n protected sortTree(data: Graph2, node?: Node) {\n if (!node) {\n node = this._tree;\n }\n // Place busiest children at the top of the list ---\n node.children.sort((l, r) => data.neighbors(r.origData.id).length - data.neighbors(l.origData.id).length);\n\n // Move busiest children to the middle of the list ---\n const children: Node[] = [];\n node.children.forEach((n, i) => {\n if (i % 2 === 0) {\n children.push(n);\n } else {\n children.unshift(n);\n }\n });\n node.children = children;\n\n // Recurse ---\n node.children.forEach(cnode => this.sortTree(data, cnode));\n }\n\n protected depthFirst(data: Graph2<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>, v: VertexPlaceholder, parent?) {\n if (parent === undefined) {\n this._visited = {};\n this._tree = undefined;\n }\n\n if (!this._visited[v.id]) {\n this._visited[v.id] = v;\n const node: Node = {\n origData: v,\n children: []\n };\n if (parent === undefined) {\n this._tree = node;\n } else {\n parent.children.push(node);\n }\n data.neighbors(v.id).forEach(n => this.depthFirst(data, n, node));\n }\n }\n\n protected breadthFirst(data: Graph2<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>, v: VertexPlaceholder) {\n this._visited = {};\n this._visited[v.id] = v;\n this._tree = {\n origData: v,\n children: []\n };\n\n const q: Node[] = [];\n q.push(this._tree);\n while (q.length) {\n const node = q.shift();\n data.neighbors(node.origData.id).forEach(n => {\n if (!this._visited[n.id]) {\n this._visited[n.id] = n;\n const nnode = {\n origData: n,\n children: []\n };\n node.children.push(nnode);\n q.push(nnode);\n }\n });\n }\n this.sortTree(data);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const data = this._graph.graphData();\n const vertices = data.allVertices();\n\n let centroid; // TODO Could Be Many (default should be all with 0 in edges?)\n for (const v of vertices) {\n delete v.fx;\n delete v.fy;\n if (centroid === undefined) {\n centroid = v;\n }\n if (v.centroid) {\n centroid = v;\n break;\n }\n }\n\n const edges = data.allEdges();\n edges.forEach(e => delete e.points);\n\n this.breadthFirst(data, centroid);\n this._d3Hierarchy = hierarchy(this._tree);\n return this;\n });\n }\n\n finalize(nodes: Node[]) {\n const size = this._graph.size();\n\n const bounds = new Bounds();\n nodes.forEach((d, i) => {\n if (i === 0) {\n bounds.reset(d.origData.x, d.origData.y);\n } else {\n bounds.expand(d.origData.x, d.origData.y);\n }\n });\n\n const offset = {\n x: size.width / 2 - bounds.center.x,\n y: size.height / 2 - bounds.center.y\n };\n\n nodes.forEach(d => {\n d.origData.x += offset.x;\n d.origData.y += offset.y;\n });\n\n this._graph\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n }\n}\n\nexport class Tree extends TidyTreeBase {\n\n constructor(graph, protected options: TidyTreeOptions) {\n super(graph, options);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = tree().nodeSize([this.options.rankdir === \"TB\" ? 200 : 100, this.options.rankdir === \"TB\" ? 100 : 200]);\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.x = this.options.rankdir === \"TB\" ? d.x : d.y;\n d.data.origData.y = this.options.rankdir === \"TB\" ? d.y : d.x;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): EdgeLayout {\n const source = this._graph.projectPlacholder(ep.source);\n const target = this._graph.projectPlacholder(ep.target);\n return {\n path: linkHorizontal({ source, target }),\n labelPos: this.center([[source.x, source.y], [target.x, target.y]])\n };\n }\n}\n\nexport class RadialTree extends TidyTreeBase {\n\n constructor(graph) {\n super(graph, {});\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = tree()\n .size([2 * Math.PI, 1024 / 2])\n .separation((a, b) => (a.parent == b.parent ? 1 : 2) / a.depth)\n ;\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.angle = d.x;\n d.data.origData.radius = d.y;\n d.data.origData.x = Math.sin(d.x) * d.y;\n d.data.origData.y = Math.cos(d.x) * d.y;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n}\n\nexport class Dendrogram extends TidyTreeBase {\n\n constructor(graph, protected options: TidyTreeOptions) {\n super(graph, options);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = cluster().nodeSize([this.options.rankdir === \"TB\" ? 200 : 100, this.options.rankdir === \"TB\" ? 100 : 200]);\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.x = this.options.rankdir === \"TB\" ? d.x : d.y;\n d.data.origData.y = this.options.rankdir === \"TB\" ? d.y : d.x;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): EdgeLayout {\n const source = this._graph.projectPlacholder(ep.source);\n const target = this._graph.projectPlacholder(ep.target);\n return {\n path: linkHorizontal({ source, target }),\n labelPos: this.center([[source.x, source.y], [target.x, target.y]])\n };\n }\n}\n\nexport class RadialDendrogram extends TidyTreeBase {\n\n constructor(graph) {\n super(graph, {});\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = cluster()\n .size([2 * Math.PI, 1024 / 2])\n .separation((a, b) => (a.parent == b.parent ? 1 : 2) / a.depth)\n ;\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.x = Math.sin(d.x) * d.y;\n d.data.origData.y = Math.cos(d.x) * d.y;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n}","import { d3Event, drag as d3Drag, Palette, select as d3Select, Selection, Spacer, SVGGlowFilter, SVGZoomWidget, ToggleButton, Utility, Widget } from \"@hpcc-js/common\";\nimport { IconEx, Icons, React, render, Subgraph, Vertex, IVertex3 } from \"@hpcc-js/react\";\nimport { getScriptSrc, Graph2 as GraphCollection, hashSum } from \"@hpcc-js/util\";\nimport { HTMLTooltip } from \"@hpcc-js/html\";\nimport \"d3-transition\";\nimport { Circle, Dagre, ForceDirected, ForceDirectedAnimated, Graphviz, ILayout, Null } from \"./layouts/index\";\nimport { Options as FDOptions } from \"./layouts/forceDirectedWorker\";\nimport { EdgePlaceholder, IEdge, IGraphData2, IHierarchy, ISubgraph, IVertex, SubgraphPlaceholder, VertexPlaceholder } from \"./layouts/placeholders\";\nimport { graphviz as gvWorker } from \"./layouts/graphvizWorker\";\nimport { Tree, RadialTree, Dendrogram, RadialDendrogram } from \"./layouts/tree\";\n\nimport \"../../src/graph2/graph.css\";\nimport { Engine } from \"./layouts/graphvizWorker\";\n\nconst wasmFolder = `${getScriptSrc(\"/graph/lib-umd/graph2/graph\") || getScriptSrc(\"/graph/dist/index\") || \".\"}/graph/dist`;\n\nexport {\n IGraphData2,\n ISubgraph,\n IVertex,\n IEdge,\n IHierarchy\n};\n\ntype GraphLayoutType = \"Hierarchy\" | \"DOT\" | \"Tree\" | \"Dendrogram\" | \"RadialTree\" | \"RadialDendrogram\" | \"ForceDirected\" | \"ForceDirected2\" | \"ForceDirectedHybrid\" | \"Neato\" | \"FDP\" | \"Circle\" | \"TwoPI\" | \"Circo\" | \"None\";\nconst GraphLayoutTypeSet = [\"Hierarchy\", \"DOT\", \"Tree\", \"Dendrogram\", \"RadialTree\", \"RadialDendrogram\", \"ForceDirected\", \"ForceDirected2\", \"ForceDirectedHybrid\", \"Neato\", \"FDP\", \"Circle\", \"TwoPI\", \"Circo\", \"None\"];\n\nconst dragStart = (n: VertexPlaceholder) => {\n n.fx = n.sx = n.x;\n n.fy = n.sy = n.y;\n};\nconst dragTick = (n: VertexPlaceholder, d: VertexPlaceholder) => {\n n.fx = n.sx + d.fx - d.sx;\n n.fy = n.sy + d.fy - d.sy;\n};\nconst dragEnd = (n: VertexPlaceholder) => {\n n.x = n.fx;\n n.y = n.fy;\n n.fx = n.sx = undefined;\n n.fy = n.sy = undefined;\n};\n\nexport class Graph2 extends SVGZoomWidget {\n\n private _toggleHierarchy = new ToggleButton().faChar(\"fa-sitemap\").tooltip(\"Hierarchy\").on(\"click\", () => this.layoutClick(\"Hierarchy\"));\n private _toggleForceDirected = new ToggleButton().faChar(\"fa-expand\").tooltip(\"Force Directed\").on(\"click\", () => this.layoutClick(\"ForceDirected\"));\n private _toggleForceDirected2 = new ToggleButton().faChar(\"fa-arrows\").tooltip(\"Spring\").on(\"click\", () => this.layoutClick(\"ForceDirected2\"));\n private _toggleCircle = new ToggleButton().faChar(\"fa-circle-o\").tooltip(\"Circle\").on(\"click\", () => this.layoutClick(\"Circle\"));\n private _toggleDot = new ToggleButton().faChar(\"fa-angle-double-down\").tooltip(\"DOT\").on(\"click\", () => this.layoutClick(\"DOT\"));\n private _toggleNeato = new ToggleButton().faChar(\"fa-sun-o\").tooltip(\"Neato\").on(\"click\", () => this.layoutClick(\"Neato\"));\n private _toggleFDP = new ToggleButton().faChar(\"fa-asterisk\").tooltip(\"FDP\").on(\"click\", () => this.layoutClick(\"FDP\"));\n private _toggleTwoPI = new ToggleButton().faChar(\"fa-bullseye\").tooltip(\"TwoPI\").on(\"click\", () => this.layoutClick(\"TwoPI\"));\n private _toggleCirco = new ToggleButton().faChar(\"fa-cogs\").tooltip(\"Circo\").on(\"click\", () => this.layoutClick(\"Circo\"));\n private _toggleT = new ToggleButton().faChar(\"fa-sitemap fa-rotate-270\").tooltip(\"Tree\").on(\"click\", () => this.layoutClick(\"Tree\"));\n private _toggleRT = new ToggleButton().faChar(\"fa-sun-o\").tooltip(\"Radial Tree\").on(\"click\", () => this.layoutClick(\"RadialTree\"));\n private _toggleD = new ToggleButton().faChar(\"fa-sitemap fa-rotate-270\").tooltip(\"Dendrogram\").on(\"click\", () => this.layoutClick(\"Dendrogram\"));\n private _toggleRD = new ToggleButton().faChar(\"fa-asterisk\").tooltip(\"Radial Dendrogram\").on(\"click\", () => this.layoutClick(\"RadialDendrogram\"));\n\n protected _graphData = new GraphCollection<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>()\n .idFunc(d => d.id)\n .sourceFunc(e => e.source.id)\n .targetFunc(e => e.target.id)\n .updateFunc((b: any, a: any) => {\n b.props = a.props;\n return b;\n })\n ;\n\n protected _prevDoClickTime: number = 0;\n\n protected _centroidFilter: SVGGlowFilter;\n\n protected _svgDefsAnn: any;\n protected _svgDefsCat: any;\n protected _subgraphG: Selection<SVGGElement, any, SVGGElement, any>;\n protected _edgeG: Selection<SVGGElement, any, SVGGElement, any>;\n protected _vertexG: Selection<SVGGElement, any, SVGGElement, any>;\n\n protected _tooltip: HTMLTooltip = new HTMLTooltip();\n\n protected _selection = new Utility.Selection(this);\n private _dragHandler = d3Drag<Element, VertexPlaceholder>();\n\n protected _catPalette = Palette.ordinal(\"hpcc10\");\n _svgDefs: any;\n\n constructor() {\n super();\n const context = this;\n this._drawStartPos = \"origin\";\n\n const buttons: Widget[] = [\n this._toggleHierarchy,\n this._toggleForceDirected,\n this._toggleForceDirected2,\n this._toggleCircle,\n new Spacer(),\n this._toggleDot,\n this._toggleNeato,\n this._toggleFDP,\n this._toggleTwoPI,\n this._toggleCirco,\n new Spacer(),\n this._toggleT,\n this._toggleRT,\n this._toggleD,\n this._toggleRD,\n new Spacer()\n ];\n this._iconBar.buttons(buttons.concat(this._iconBar.buttons()));\n\n this._dragHandler\n .on(\"start\", function (d) {\n if (context.allowDragging()) {\n d3Select(this).classed(\"grabbed\", true);\n dragStart(d);\n Utility.safeRaise(this);\n context.moveVertexPlaceholder(d, false, true);\n\n const selection = context.selection();\n const isSelected = context.selected(d.props, selection as IVertex[]);\n if (isSelected) {\n selection\n .filter(v => v.id !== d.props.id)\n .forEach(v => {\n const n = context._graphData.vertex(v.id);\n dragStart(n);\n });\n } else if (context.dragSingleNeighbors()) {\n context._graphData.singleNeighbors(d.id).forEach(n => {\n dragStart(n);\n });\n }\n }\n })\n .on(\"drag\", function (d) {\n if (context.allowDragging()) {\n d.fx = d.sx + context.rproject(d3Event().x - d.sx);\n d.fy = d.sy + context.rproject(d3Event().y - d.sy);\n context._graphData.vertexEdges(d.id).forEach(e => delete e.points);\n context.moveVertexPlaceholder(d, false, true);\n const selection = context.selection();\n const isSelected = context.selected(d.props, selection as IVertex[]);\n\n if (isSelected) {\n selection\n .filter(v => v.id !== d.props.id)\n .forEach(v => {\n const n = context._graphData.vertex(v.id);\n dragTick(n, d);\n context.moveVertexPlaceholder(n, false, true);\n });\n } else if (context.dragSingleNeighbors()) {\n context._graphData.singleNeighbors(d.id).forEach(n => {\n dragTick(n, d);\n context.moveVertexPlaceholder(n, false, true);\n });\n }\n }\n })\n .on(\"end\", function (d) {\n let doClick = true;\n if (context.allowDragging()) {\n doClick = Math.abs(d.sx - d.fx) < 1 && Math.abs(d.sy - d.fy) < 1;\n dragEnd(d);\n\n const selection = context.selection();\n const isSelected = context.selected(d.props, selection as IVertex[]);\n if (isSelected) {\n selection\n .filter(v => v.id !== d.props.id)\n .forEach(v => {\n const n = context._graphData.vertex(v.id);\n dragEnd(n);\n });\n } else if (context.dragSingleNeighbors()) {\n context._graphData.singleNeighbors(d.id).forEach(dragEnd);\n }\n\n d3Select(this).classed(\"grabbed\", false);\n }\n if (doClick) {\n context._selection.click({\n _id: d.id,\n element: () => d.element\n }, d3Event().sourceEvent);\n context.selectionChanged();\n const selected = d.element.classed(\"selected\");\n context.vertex_click(d.props.origData || d.props, \"\", selected);\n const doClickTime = Date.now();\n if (doClickTime - context._prevDoClickTime < context.doubleClickMaxDelay()) {\n context.vertex_dblclick(d.props.origData || d.props, \"\", selected);\n }\n context._prevDoClickTime = doClickTime;\n }\n })\n .filter(() => true)\n ;\n this.zoomToFitLimit(1);\n }\n\n iconBarButtons(): Widget[] {\n return this._iconBar.buttons();\n }\n\n protected _categories: IconEx[] = [];\n categories(): IconEx[];\n categories(_: IconEx[]): this;\n categories(_?: IconEx[]): IconEx[] | this {\n if (_ === void 0) return this._categories;\n this._categories = _;\n return this;\n }\n\n protected _annotations: IconEx[] = [];\n annotations(): IconEx[];\n annotations(_: IconEx[]): this;\n annotations(_?: IconEx[]): IconEx[] | this {\n if (_ === void 0) return this._annotations;\n this._annotations = _;\n return this;\n }\n\n private _origData: IGraphData2 = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n data(): IGraphData2;\n data(_: IGraphData2, merge?: boolean): this;\n data(_?: IGraphData2, merge?: boolean): IGraphData2 | this {\n if (_ === void 0) return this._origData;\n this._origData = _;\n\n this._graphData.mergeSubgraphs((_.subgraphs || []).map(sg => ({\n id: sg.id,\n props: sg\n })));\n\n this._graphData.mergeVertices((_.vertices || []).map(v => ({\n id: v.id,\n centroid: v.centroid,\n props: v\n })));\n\n this._graphData.mergeEdges(\n (_.edges || [])\n .filter(e => {\n return this._graphData.vertexExists(e.source.id) && this._graphData.vertexExists(e.target.id);\n })\n .map(e => ({\n id: e.id,\n props: e,\n source: this._graphData.vertex(e.source.id),\n target: this._graphData.vertex(e.target.id)\n }))\n );\n\n this._graphData.clearParents();\n (_.hierarchy ? _.hierarchy : []).forEach(h => {\n if (this._graphData.subgraphExists(h.child.id)) {\n this._graphData.subgraphParent(h.child.id, h.parent.id);\n } else if (this._graphData.vertexExists(h.child.id)) {\n this._graphData.vertexParent(h.child.id, h.parent.id);\n }\n });\n\n return this;\n }\n\n selected(vertex: IVertex, _?: Array<IVertex>): boolean {\n return (_ || this.selection()).some(n => n.id === vertex.id);\n }\n\n selection(_: Array<IVertex | ISubgraph | IEdge>): this;\n selection(): Array<IVertex | ISubgraph | IEdge>;\n selection(_?: Array<IVertex | ISubgraph | IEdge>): Array<IVertex | ISubgraph | IEdge> | this {\n if (!arguments.length) return this._selection.get().map(item => this._graphData.item(item._id).props);\n this._selection.set(_.map(item => {\n const vp = this._graphData.item(item.id);\n return {\n _id: vp.id,\n element: () => vp.element\n };\n }));\n return this;\n }\n\n graphData(): GraphCollection<VertexPlaceholder, EdgePlaceholder> {\n return this._graphData;\n }\n\n resetLayout() {\n delete this._prevLayout;\n return this;\n }\n\n layoutRunning() {\n return this._layoutAlgo && this._layoutAlgo.running();\n }\n\n protected _layoutAlgo: ILayout = new Null(this);\n layoutAlgo(layout: ILayout) {\n if (this._layoutAlgo) {\n this._layoutAlgo.stop();\n }\n this._layoutAlgo = layout;\n return this._layoutAlgo.start().then(() => {\n this.updateIconBar();\n if (this.applyScaleOnLayout()) {\n // Wait for any transitions to finish ---\n setTimeout(() => {\n this.zoomToFit();\n }, this.transitionDuration());\n }\n });\n }\n\n layoutClick(layout: GraphLayoutType) {\n if (this.layoutRunning()) {\n this._layoutAlgo.stop();\n this.updateIconBar();\n } else {\n delete this._prevLayout;\n this\n .layout(layout)\n .render()\n ;\n }\n }\n\n updateIconBarItem(tb: ToggleButton, tbLayout: GraphLayoutType) {\n const layout = this.layout();\n const running = this._layoutAlgo && this._layoutAlgo.running();\n tb.enabled(!running || layout === tbLayout).selected(running && layout === tbLayout).render();\n }\n\n updateIconBar() {\n super.updateIconBar();\n this.updateIconBarItem(this._toggleHierarchy, \"Hierarchy\");\n this.updateIconBarItem(this._toggleDot, \"DOT\");\n this.updateIconBarItem(this._toggleForceDirected, \"ForceDirected\");\n this.updateIconBarItem(this._toggleNeato, \"Neato\");\n this.updateIconBarItem(this._toggleFDP, \"FDP\");\n this.updateIconBarItem(this._toggleForceDirected2, \"ForceDirected2\");\n this.updateIconBarItem(this._toggleCircle, \"Circle\");\n this.updateIconBarItem(this._toggleTwoPI, \"TwoPI\");\n this.updateIconBarItem(this._toggleCirco, \"Circo\");\n this.updateIconBarItem(this._toggleT, \"Tree\");\n this.updateIconBarItem(this._toggleRT, \"RadialTree\");\n this.updateIconBarItem(this._toggleD, \"Dendrogram\");\n this.updateIconBarItem(this._toggleRD, \"RadialDendrogram\");\n }\n\n getNeighborMap(vertex: VertexPlaceholder) {\n const vertices = {};\n const edges = {};\n\n if (vertex) {\n const nedges = this._graphData.vertexEdges(vertex.id);\n for (let i = 0; i < nedges.length; ++i) {\n const edge = this._graphData.edge(nedges[i].id);\n edges[edge.id] = edge;\n if (edge.source.id !== vertex.id) {\n vertices[edge.source.id] = edge.source;\n }\n if (edge.target.id !== vertex.id) {\n vertices[edge.target.id] = edge.target;\n }\n }\n }\n\n return {\n vertices,\n edges\n };\n }\n\n centerOnItem(id: string) {\n const item = this._graphData.item(id);\n let x;\n let y;\n if (this._graphData.isSubgraph(item) || this._graphData.isVertex(item)) {\n x = item.x;\n y = item.y;\n }\n if (this._graphData.isEdge(item)) {\n [x, y] = [0, 0]; // center(item.points);\n }\n if (x !== undefined && y !== undefined) {\n const bbox = item.element.node().getBBox();\n if (this._graphData.isVertex(item)) {\n const proj = this.projectPlacholder(item);\n x = proj.x;\n y = proj.y;\n } else if (this._graphData.isSubgraph(item)) {\n x = this.project(item.x);\n y = this.project(item.y);\n }\n const deltaX = bbox.x + bbox.width / 2;\n const deltaY = bbox.y + bbox.height / 2;\n const itemBBox = {\n x: x + deltaX - bbox.width / 2,\n y: y + deltaY - bbox.height / 2,\n width: bbox.width,\n height: bbox.height\n };\n this.centerOnBBox(itemBBox);\n }\n }\n\n hideVertex(id: string): this {\n const item = this._graphData.item(id);\n if (this._graphData.isVertex(item)) {\n item.props.hidden = true;\n }\n return this;\n }\n\n showVertex(id: string): this {\n const item = this._graphData.item(id);\n if (this._graphData.isVertex(item)) {\n item.props.hidden = false;\n }\n return this;\n }\n\n protected highlight = {\n zoom: 1.1,\n opacity: 0.33,\n edge: \"1.25px\"\n };\n\n highlightVerticies(vertexMap?: { [id: string]: boolean }) {\n const context = this;\n const vertexElements = this._vertexG.selectAll<SVGGElement, VertexPlaceholder>(\".graphVertex\");\n const forceLabelOnHighlight = !context.showVertexLabels() && context.showVertexLabelsOnHighlight();\n vertexElements\n .classed(\"graphVertex-highlighted\", d => !vertexMap || vertexMap[d.id])\n .style(\"filter\", d => vertexMap && vertexMap[d.id] ? \"url(#\" + this.id() + \"_glow)\" : null)\n .each(function (d) {\n if (forceLabelOnHighlight) {\n const props = context.calcProps(\n d.centroid,\n {\n showLabel: !!(vertexMap && vertexMap[d.id]),\n ...context.vertexMapper(d.props, d.props.origData)\n }\n );\n render(\n d.centroid ? context._centroidRenderer : context._vertexRenderer,\n props,\n this\n );\n }\n })\n .transition().duration(this.transitionDuration())\n .on(\"end\", function (d) {\n if (vertexMap && vertexMap[d.id]) {\n if (d.element.node() && d.element.node().parentNode) {\n d.element.node().parentNode.appendChild(d.element.node());\n }\n }\n })\n .style(\"opacity\", function (d) {\n if (d.props.hidden) return 0;\n if (!vertexMap || vertexMap[d.id]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightEdges(edgeMap) {\n const context = this;\n const edgeElements = this._edgeG.selectAll<SVGGElement, EdgePlaceholder>(\".graphEdge\");\n edgeElements\n .classed(\"graphEdge-highlighted\", function (d) { return !edgeMap || edgeMap[d.id]; })\n .style(\"stroke-width\", function (o) {\n if (edgeMap && edgeMap[o.id]) {\n return context.highlight.edge;\n }\n return context.edgeStrokeWidth() + \"px\";\n }).transition().duration(this.transitionDuration())\n .style(\"opacity\", function (o) {\n if (o.source.props.hidden || o.target.props.hidden) return 0;\n if (!edgeMap || edgeMap[o.id]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightVertex(_element, d: VertexPlaceholder) {\n if (this.highlightOnMouseOverVertex()) {\n if (d) {\n const highlight = this.getNeighborMap(d);\n highlight.vertices[d.id] = d;\n this.highlightVerticies(highlight.vertices);\n this.highlightEdges(highlight.edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n highlightEdge(_element, d: EdgePlaceholder) {\n if (this.highlightOnMouseOverEdge()) {\n if (d) {\n const vertices = {};\n vertices[d.source.id] = d.source;\n vertices[d.target.id] = d.target;\n const edges = {};\n edges[d.id] = d;\n this.highlightVerticies(vertices);\n this.highlightEdges(edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n moveSubgraphPlaceholder(sp: SubgraphPlaceholder, transition: boolean): this {\n const x = this.project(sp.x);\n const y = this.project(sp.y);\n const width = this.project(sp.props.width, true);\n const height = this.project(sp.props.height, true);\n if (sp.element) {\n // TODO: any should not be needed (tsc issue?)\n (transition ? sp.element.transition() as any : sp.element)\n .attr(\"transform\", `translate(${x} ${y})`)\n .each(function (d) {\n render(Subgraph, { ...d.props, width, height }, this);\n })\n ;\n }\n return this;\n }\n\n moveEdgePlaceholder(ep: EdgePlaceholder, transition: boolean): this {\n const edgeLayout = this._layoutAlgo.edgePath(ep, this.edgeArcDepth());\n if (ep.elementPath) {\n // TODO: any should not be needed (tsc issue?)\n (transition ? ep.elementPath.transition() as any : ep.elementPath)\n .attr(\"d\", edgeLayout.path)\n .attr(\"stroke-dasharray\", d => d.props.strokeDasharray)\n ;\n }\n\n if (ep.elementText) {\n const lines = ep.props.label?.split(\"\\n\") ?? [];\n ep.elementText\n .selectAll(\".textLine\")\n .data(lines, (d: string) => d)\n .join(\n enter => enter.append(\"tspan\")\n .attr(\"class\", \"textLine\")\n .attr(\"x\", 0),\n update => update\n .attr(\"dy\", (d, i) => `${i}em`)\n .text(d => d),\n exit => exit.remove()\n )\n ;\n // TODO: any should not be needed (tsc issue?)\n (transition ? ep.elementText.transition() as any : ep.elementText)\n .attr(\"transform\", `translate(${edgeLayout.labelPos[0]} ${edgeLayout.labelPos[1]})`)\n .attr(\"font-family\", d => d.props.fontFamily || null)\n ;\n }\n return this;\n }\n\n moveVertexPlaceholder(vp: VertexPlaceholder, transition: boolean, moveNeighbours: boolean): this {\n const { x, y } = this.projectPlacholder(vp);\n vp.element && (transition ? vp.element.transition() as unknown as Selection<SVGPathElement, EdgePlaceholder, SVGGElement, any> : vp.element)\n .attr(\"transform\", `translate(${x} ${y})`)\n ;\n if (moveNeighbours) {\n this._graphData.vertexEdges(vp.id).forEach(e => this.moveEdgePlaceholder(e, transition));\n }\n return this;\n }\n\n moveSubgraphs(transition: boolean): this {\n this._graphData.allSubgraphs().forEach(s => this.moveSubgraphPlaceholder(s, transition));\n return this;\n }\n\n moveEdges(transition: boolean): this {\n this._graphData.allEdges().forEach(e => this.moveEdgePlaceholder(e, transition));\n return this;\n }\n\n moveVertices(transition: boolean): this {\n this._graphData.allVertices().forEach(v => this.moveVertexPlaceholder(v, transition, false));\n return this;\n }\n\n project(pos: number, clip: boolean = false) {\n const rf = 10;\n pos = pos !== undefined ? pos : 0;\n let scale = this._transformScale;\n if (clip) {\n if (this._transformScale > this.maxScale() + (this._transformScale - this.maxScale()) / 2) {\n scale = this.maxScale() + (this._transformScale - this.maxScale()) / 2;\n } else if (this._transformScale < this.minScale() - (this._transformScale - this.minScale()) / 13) {\n // scale = this.minScale() - (this._transformScale - this.minScale()) / 13;\n }\n }\n return Math.round(pos * scale * rf) / rf;\n }\n\n rproject(pos: number) {\n const rf = 10;\n pos = pos !== undefined ? pos : 0;\n return Math.round(pos / this._transformScale * rf) / rf;\n }\n\n projectPlacholder(vp: VertexPlaceholder) {\n return {\n x: this.project(vp.fx !== undefined ? vp.fx : vp.x),\n y: this.project(vp.fy !== undefined ? vp.fy : vp.y)\n };\n }\n\n categoryID(id: string | number, prefix: \"cat\" | \"ann\" = \"cat\"): string {\n return id === undefined || id === \"\" ? \"\" : `${prefix}${this.id()}_${id}`;\n }\n\n updateCategories() {\n render(Icons, {\n icons: this._categories.map((c): IconEx => ({\n ...c,\n id: this.categoryID(c.id),\n fill: c.fill || \"transparent\",\n imageCharFill: c.imageCharFill || this._catPalette(c.id)\n }))\n }, this._svgDefsCat.node());\n }\n\n updateAnnotations() {\n render(Icons, {\n icons: this._annotations.map((c): IconEx => ({\n ...c,\n id: this.categoryID(c.id, \"ann\"),\n shape: c.shape || \"square\",\n height: c.height || 12,\n fill: c.fill || this._catPalette(c.id)\n }))\n }, this._svgDefsAnn.node());\n }\n\n updateEdges(): this {\n const context = this;\n this._edgeG.selectAll(\".graphEdge\")\n .data(this._graphData.allEdges(), (d: EdgePlaceholder) => d.id)\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"graphEdge\")\n .on(\"click.selectionBag\", function (d) {\n context._selection.click({\n _id: d.id,\n element: () => d.element\n }, d3Event());\n context.selectionChanged();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n context.edge_click(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseover\", function (d) {\n Utility.safeRaise(this);\n context.edge_mouseover(d3Select(this), d);\n })\n .on(\"mouseout\", function (d) {\n context.edge_mouseout(d3Select(this), d);\n })\n .each(function (d) {\n d.element = d3Select(this);\n d.elementPath = d.element.append(\"path\");\n d.elementText = d.element.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n ;\n })\n ,\n update => update\n .attr(\"opacity\", d => d.source.props.hidden || d.target.props.hidden ? 0 : 1)\n .classed(\"hide-text\", !context.showEdgeLabels())\n ,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .style(\"stroke\", d => {\n return d.props?.color ?? this.edgeColor();\n })\n .style(\"stroke-width\", this.edgeStrokeWidth() + \"px\")\n ;\n return this;\n }\n\n private _centroidRenderer: React.FunctionComponent<Vertex> = Vertex;\n centroidRenderer(): React.FunctionComponent;\n centroidRenderer(_: React.FunctionComponent): this;\n centroidRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n if (!arguments.length) return this._centroidRenderer;\n this._centroidRenderer = _;\n return this;\n }\n\n private _vertexRenderer: React.FunctionComponent<Vertex> = Vertex;\n vertexRenderer(): React.FunctionComponent;\n vertexRenderer(_: React.FunctionComponent): this;\n vertexRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n if (!arguments.length) return this._vertexRenderer;\n this._vertexRenderer = _;\n return this;\n }\n\n vertexMapper(props: IVertex, origRow: any): Vertex | IVertex3 {\n return {\n ...props,\n categoryID: this.categoryID(props.categoryID),\n annotationIDs: props.annotationIDs ? props.annotationIDs.map(a => this.categoryID(a, \"ann\")) : []\n };\n }\n\n updateVertices(): this {\n const context = this;\n this._vertexG.selectAll(\".graphVertex\")\n .data(this._graphData.allVertices(), (d: VertexPlaceholder) => d.id)\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"graphVertex\")\n .on(\"dblclick\", function (this: SVGElement, d) {\n d3Event().stopPropagation();\n })\n .on(\"mousein\", function (d) {\n Utility.safeRaise(this);\n context.highlightVertex(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n context.vertex_mousein(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseover\", function (d) {\n Utility.safeRaise(this);\n context.highlightVertex(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n if (d.props.tooltip) {\n context._tooltip\n .tooltipHTML(context.tooltipHTML.bind(context))\n .triggerElement(d.element)\n .tooltipWidth(context.tooltipWidth())\n .tooltipHeight(context.tooltipHeight())\n .enablePointerEvents(context.enableTooltipPointerEvents())\n .closeDelay(context.tooltipCloseDelay())\n .direction(\"n\")\n .data(d)\n .visible(true)\n .render()\n ;\n }\n context.vertex_mouseover(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseout\", function (d) {\n context.highlightVertex(null, null);\n const selected = d.element.classed(\"selected\");\n context.vertex_mouseout(d.props.origData || d.props, \"\", selected);\n if (d.props.tooltip) {\n context._tooltip.mouseout();\n }\n })\n .call(this._dragHandler)\n .each(function (d) {\n d.element = d3Select(this);\n }),\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .classed(\"centroid\", d => d.centroid)\n .attr(\"opacity\", d => d.props.hidden ? 0 : 1)\n .attr(\"filter\", d => d.centroid ? \"url(#\" + this.id() + \"_glow)\" : null)\n .each(function (this: SVGGElement, d) {\n const props = context.calcProps(\n d.centroid,\n {\n showLabel: context.showVertexLabels(),\n ...context.vertexMapper(d.props, d.props.origData)\n }\n );\n render(\n d.centroid ? context._centroidRenderer : context._vertexRenderer,\n props,\n this\n );\n })\n ;\n return this;\n }\n\n calcProps(isCentroid: boolean, props) {\n if (!props.icon) props.icon = {};\n if (isCentroid) {\n props.textHeight = props.textHeight ? props.textHeight : this.centroidTextHeight() * this.centroidScale();\n props.textPadding = props.textPadding ? props.textPadding : this.centroidTextPadding() * this.centroidScale();\n props.textFontFamily = props.textFontFamily ? props.textFontFamily : this.centroidLabelFontFamily();\n props.icon.height = props.icon.height ? props.icon.height : this.centroidIconHeight() * this.centroidScale();\n props.icon.padding = props.icon.padding ? props.icon.padding : this.centroidIconPadding() * this.centroidScale();\n props.icon.strokeWidth = props.icon.strokeWidth ? props.icon.strokeWidth : this.centroidIconStrokeWidth();\n props.icon.imageFontFamily = props.icon.imageFontFamily ? props.icon.imageFontFamily : this.centroidIconFontFamily();\n } else {\n props.textHeight = props.textHeight ? props.textHeight : this.vertexTextHeight();\n props.textPadding = props.textPadding ? props.textPadding : this.vertexTextPadding();\n props.textFontFamily = props.textFontFamily ? props.textFontFamily : this.vertexLabelFontFamily();\n props.icon.height = props.icon.height ? props.icon.height : this.vertexIconHeight();\n props.icon.padding = props.icon.padding ? props.icon.padding : this.vertexIconPadding();\n props.icon.strokeWidth = props.icon.strokeWidth ? props.icon.strokeWidth : this.vertexIconStrokeWidth();\n props.icon.imageFontFamily = props.icon.imageFontFamily ? props.icon.imageFontFamily : this.vertexIconFontFamily();\n }\n const text = props.icon.imageChar;\n const fontFamily = props.icon.imageFontFamily;\n const fontSize = props.icon.height - props.icon.padding;\n const rect = this.textRect(text, fontFamily, fontSize);\n\n props.icon.yOffset = -(rect.top - (fontSize / 2)) - (rect.height / 2) + (props.icon.padding > 0 ? fontSize / props.icon.padding / 2 : 0);\n return props;\n }\n\n hasSubgraphs() {\n switch (this.layout()) {\n case \"DOT\":\n case \"Hierarchy\":\n return true;\n }\n return false;\n }\n\n updateSubgraphs(): this {\n const context = this;\n this._subgraphG.selectAll(\".subgraphPlaceholder\")\n .data(this.hasSubgraphs() ? this._graphData.allSubgraphs() : [], (d: SubgraphPlaceholder) => d.id)\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"subgraphPlaceholder\")\n .on(\"click.selectionBag\", function (d) {\n context._selection.click({\n _id: d.id,\n element: () => d.element\n }, d3Event());\n context.selectionChanged();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n context.subgraph_click(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseover\", function () {\n Utility.safeRaise(this);\n })\n .each(function (d) {\n d.element = d3Select(this);\n })\n ,\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .transition()\n .style(\"opacity\", 0)\n .remove()\n )\n .each(function (d) {\n context.moveSubgraphPlaceholder(d, false);\n })\n ;\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n const svg = this.locateSVGNode(domNode);\n this._svgDefs = d3Select(svg).select<SVGDefsElement>(\"defs\");\n this._centroidFilter = new SVGGlowFilter(this._svgDefs, this._id + \"_glow\");\n\n this._svgDefsCat = this._svgDefs.append(\"g\");\n this._svgDefsAnn = this._svgDefs.append(\"g\");\n this._subgraphG = this._renderElement.append(\"g\");\n this._edgeG = this._renderElement.append(\"g\");\n this._vertexG = this._renderElement.append(\"g\");\n\n this._tooltip.target(domNode);\n\n this.on(\"startMarqueeSelection\", () => {\n }).on(\"updateMarqueeSelection\", rect => {\n const vertices: VertexPlaceholder[] = this._graphData.allVertices().filter(v => v.x >= rect.x && v.x <= rect.x + rect.width && v.y >= rect.y && v.y <= rect.y + rect.height);\n this.selection(vertices.map(v => v.props));\n }).on(\"endMarqueeSelection\", () => {\n this.selectionChanged();\n });\n }\n\n protected forceDirectedOptions(): FDOptions {\n return {\n alpha: this.forceDirectedAlpha(),\n alphaMin: this.forceDirectedAlphaMin(),\n alphaDecay: this.forceDirectedAlphaDecay(),\n velocityDecay: this.forceDirectedVelocityDecay(),\n repulsionStrength: this.forceDirectedRepulsionStrength(),\n iterations: this.forceDirectedIterations(),\n linkDistance: this.forceDirectedLinkDistance(),\n linkStrength: this.forceDirectedLinkStrength(),\n pinCentroid: this.forceDirectedPinCentroid(),\n forceStrength: this.forceDirectedForceStrength(),\n distanceMin: this.forceDirectedMinDistance(),\n distanceMax: this.forceDirectedMaxDistance(),\n };\n }\n\n private layoutOptions(layout: GraphLayoutType) {\n switch (layout) {\n case \"ForceDirected\":\n case \"ForceDirected2\":\n case \"ForceDirectedHybrid\":\n return this.forceDirectedOptions();\n case \"Hierarchy\":\n return {\n rankdir: this.hierarchyRankDirection(),\n nodesep: this.hierarchyNodeSeparation(),\n edgesep: this.hierarchyEdgeSeparation(),\n ranksep: this.hierarchyRankSeparation(),\n digraph: this.hierarchyDigraph()\n };\n case \"Tree\":\n case \"Dendrogram\":\n return { rankdir: this.treeRankDirection() };\n case \"DOT\":\n case \"Neato\":\n case \"FDP\":\n case \"TwoPI\":\n case \"Circo\":\n return this.wasmFolder() || wasmFolder;\n case \"None\":\n case \"Circle\":\n case \"RadialTree\":\n case \"RadialDendrogram\":\n default:\n return undefined;\n }\n }\n\n private _prevLayout: string;\n updateLayout() {\n const layout = this.layout();\n const options: any = this.layoutOptions(layout);\n const hash = hashSum([layout, options]);\n if (this._prevLayout !== hash) {\n this._prevLayout = hash;\n switch (layout) {\n case \"None\":\n this.layoutAlgo(new Null(this));\n break;\n case \"Circle\":\n this.layoutAlgo(new Circle(this));\n break;\n case \"ForceDirected\":\n this.layoutAlgo(new ForceDirected(this, options));\n break;\n case \"ForceDirected2\":\n this.layoutAlgo(new ForceDirectedAnimated(this, options));\n break;\n case \"ForceDirectedHybrid\":\n this.layoutAlgo(new ForceDirected(this, options)).then(() => {\n this.layoutAlgo(new ForceDirectedAnimated(this, options));\n });\n break;\n case \"Hierarchy\":\n this.layoutAlgo(new Dagre(this, options));\n break;\n case \"DOT\":\n this.layoutAlgo(new Graphviz(this, \"dot\", options));\n break;\n case \"Tree\":\n this.layoutAlgo(new Tree(this, options));\n break;\n case \"RadialTree\":\n this.layoutAlgo(new RadialTree(this));\n break;\n case \"Dendrogram\":\n this.layoutAlgo(new Dendrogram(this, options));\n break;\n case \"RadialDendrogram\":\n this.layoutAlgo(new RadialDendrogram(this));\n break;\n case \"Neato\":\n this.layoutAlgo(new Graphviz(this, \"neato\", options));\n break;\n case \"FDP\":\n this.layoutAlgo(new Graphviz(this, \"fdp\", options));\n break;\n case \"TwoPI\":\n this.layoutAlgo(new Graphviz(this, \"twopi\", options));\n break;\n case \"Circo\":\n this.layoutAlgo(new Graphviz(this, \"circo\", options));\n break;\n }\n }\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._centroidFilter.update(this.centroidColor());\n this._renderElement.classed(\"allowDragging\", this.allowDragging());\n\n this.updateCategories();\n this.updateAnnotations();\n\n this.updateSubgraphs();\n this.updateVertices();\n this.updateEdges();\n\n this.updateLayout();\n\n this.updateIconBar();\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n this._tooltip.target(null);\n }\n\n render(callback?: (w: Widget) => void): this {\n this.progress(\"start\");\n super.render(w => {\n this.progress(\"stop\");\n if (callback) {\n callback(w);\n }\n });\n return this;\n }\n\n private _prevWidth;\n private _prevHeight;\n private _prevTransformScale;\n private _transformScale = 1;\n zoomed(transform) {\n super.zoomed(transform);\n const { width, height } = this.size();\n\n if (transform.k < this.minScale()) {\n this._edgeG.attr(\"transform\", `scale(${this.minScale() / transform.k})`);\n this._subgraphG.attr(\"transform\", `scale(${this.minScale() / transform.k})`);\n this._vertexG.attr(\"transform\", `scale(${this.minScale() / transform.k})`);\n this._transformScale = transform.k / this.minScale();\n } else if (transform.k > this.maxScale()) {\n this._edgeG.attr(\"transform\", `scale(${this.maxScale() / transform.k})`);\n this._subgraphG.attr(\"transform\", `scale(${this.maxScale() / transform.k})`);\n this._vertexG.attr(\"transform\", `scale(${this.maxScale() / transform.k})`);\n this._transformScale = transform.k / this.maxScale();\n } else {\n this._transformScale = 1;\n this._edgeG.attr(\"transform\", null);\n this._subgraphG.attr(\"transform\", null);\n this._vertexG.attr(\"transform\", null);\n }\n\n if (this._prevTransformScale !== this._transformScale ||\n this._prevWidth !== width ||\n this._prevHeight !== height) {\n this._prevTransformScale = this._transformScale;\n this._prevWidth = width;\n this._prevHeight = height;\n this\n .moveSubgraphs(false)\n .moveVertices(false)\n .moveEdges(false)\n ;\n }\n }\n\n // Events ---\n centroids(): VertexPlaceholder[] {\n return this._graphData.allVertices().filter(vp => !!vp.centroid);\n }\n\n selectionChanged() {\n if (this.highlightSelectedPathToCentroid()) {\n const highlightedVertices = {};\n this.centroids().forEach(centroid => {\n this.selection().forEach(selection => {\n const { ids, len } = this._graphData.dijkstra(centroid.id, selection.id);\n if (len) {\n ids.forEach(id => {\n highlightedVertices[id] = true;\n });\n }\n });\n });\n this._edgeG.selectAll(\".graphEdge\")\n // .classed(\"shortest-path\", d => highlightedEdges[d.id()] === true)\n ;\n }\n }\n\n tooltipHTML(data) {\n return data.props.tooltip;\n }\n\n subgraph_click(row, _col, sel) {\n }\n\n vertex_click(row, _col, sel) {\n }\n\n vertex_dblclick(row, _col, sel) {\n }\n\n vertex_mousein(row, _col, sel) {\n }\n\n vertex_mouseover(row, _col, sel) {\n }\n\n vertex_mouseout(row, _col, sel) {\n }\n\n edge_click(row, _col, sel) {\n }\n\n edge_mouseover(element, d) {\n this.highlightEdge(element, d);\n }\n\n edge_mouseout(_element, _d) {\n this.highlightEdge(null, null);\n }\n\n progress(what: \"start\" | \"stop\" | \"layout-start\" | \"layout-tick\" | \"layout-stop\") {\n }\n}\nGraph2.prototype._class += \" graph_Graph2\";\n\nexport interface Graph2 {\n allowDragging(): boolean;\n allowDragging(_: boolean): this;\n dragSingleNeighbors(): boolean;\n dragSingleNeighbors(_: boolean): this;\n layout(): GraphLayoutType;\n layout(_: GraphLayoutType): this;\n applyScaleOnLayout(): boolean;\n applyScaleOnLayout(_: boolean): this;\n highlightOnMouseOverVertex(): boolean;\n highlightOnMouseOverVertex(_: boolean): this;\n highlightOnMouseOverEdge(): boolean;\n highlightOnMouseOverEdge(_: boolean): this;\n transitionDuration(): number;\n transitionDuration(_: number): this;\n\n centroidColor(): string;\n centroidColor(_: string): this;\n centroidScale(): number;\n centroidScale(_: number): this;\n centroidTextHeight(): number;\n centroidTextHeight(_: number): this;\n centroidTextPadding(): number;\n centroidTextPadding(_: number): this;\n centroidIconHeight(): number;\n centroidIconHeight(_: number): this;\n centroidIconPadding(): number;\n centroidIconPadding(_: number): this;\n centroidIconStrokeWidth(): number;\n centroidIconStrokeWidth(_: number): this;\n centroidIconFontFamily(): string;\n centroidIconFontFamily(_: string): this;\n centroidLabelFontFamily(): string;\n centroidLabelFontFamily(_: string): this;\n vertexTextHeight(): number;\n vertexTextHeight(_: number): this;\n vertexTextPadding(): number;\n vertexTextPadding(_: number): this;\n vertexIconHeight(): number;\n vertexIconHeight(_: number): this;\n vertexIconPadding(): number;\n vertexIconPadding(_: number): this;\n vertexIconStrokeWidth(): number;\n vertexIconStrokeWidth(_: number): this;\n vertexIconFontFamily(): string;\n vertexIconFontFamily(_: string): this;\n vertexLabelFontFamily(): string;\n vertexLabelFontFamily(_: string): this;\n highlightSelectedPathToCentroid(): boolean;\n highlightSelectedPathToCentroid(_: boolean): this;\n edgeArcDepth(): number;\n edgeArcDepth(_: number): this;\n minScale(): number;\n minScale(_: number): this;\n maxScale(): number;\n maxScale(_: number): this;\n showEdgeLabels(): boolean;\n showEdgeLabels(_: boolean): this;\n showEdgeLabelsOnHighlight(): boolean;\n showEdgeLabelsOnHighlight(_: boolean): this;\n showVertexLabels(): boolean;\n showVertexLabels(_: boolean): this;\n showVertexLabelsOnHighlight(): boolean;\n showVertexLabelsOnHighlight(_: boolean): this;\n\n hierarchyRankDirection(): \"TB\" | \"BT\" | \"LR\" | \"RL\";\n hierarchyRankDirection(_: \"TB\" | \"BT\" | \"LR\" | \"RL\"): this;\n hierarchyNodeSeparation(): number;\n hierarchyNodeSeparation(_: number): this;\n hierarchyEdgeSeparation(): number;\n hierarchyEdgeSeparation(_: number): this;\n hierarchyRankSeparation(): number;\n hierarchyRankSeparation(_: number): this;\n hierarchyDigraph(): boolean;\n hierarchyDigraph(_: boolean): this;\n\n forceDirectedAlpha(): number;\n forceDirectedAlpha(_: number): this;\n forceDirectedAlphaMin(): number;\n forceDirectedAlphaMin(_: number): this;\n forceDirectedAlphaDecay(): number;\n forceDirectedAlphaDecay(_: number): this;\n forceDirectedRepulsionStrength(): number;\n forceDirectedRepulsionStrength(_: number): this;\n forceDirectedVelocityDecay(): number;\n forceDirectedVelocityDecay(_: number): this;\n forceDirectedIterations(): number;\n forceDirectedIterations(_: number): this;\n forceDirectedLinkDistance(): number;\n forceDirectedLinkDistance(_: number): this;\n forceDirectedLinkStrength(): number;\n forceDirectedLinkStrength(_: number): this;\n forceDirectedPinCentroid(): boolean;\n forceDirectedPinCentroid(_: boolean): this;\n forceDirectedForceStrength(): number;\n forceDirectedForceStrength(_: number): this;\n forceDirectedMinDistance(): number;\n forceDirectedMinDistance(_: number): this;\n forceDirectedMaxDistance(): number;\n forceDirectedMaxDistance(_: number): this;\n\n treeRankDirection(): \"TB\" | \"LR\";\n treeRankDirection(_: \"TB\" | \"LR\"): this;\n\n edgeColor(): string;\n edgeColor(_: string): this;\n edgeStrokeWidth(): number;\n edgeStrokeWidth(_: number): this;\n tooltipWidth(): number;\n tooltipWidth(_: number): this;\n tooltipHeight(): number;\n tooltipHeight(_: number): this;\n enableTooltipPointerEvents(): boolean;\n enableTooltipPointerEvents(_: boolean): this;\n tooltipCloseDelay(): number;\n tooltipCloseDelay(_: number): this;\n doubleClickMaxDelay(): number;\n doubleClickMaxDelay(_: number): this;\n\n wasmFolder(): string;\n wasmFolder(_: string): this;\n}\n\nGraph2.prototype.publish(\"allowDragging\", true, \"boolean\", \"Allow Dragging of Vertices\");\nGraph2.prototype.publish(\"dragSingleNeighbors\", true, \"boolean\", \"Dragging a Vertex also moves its singleton neighbors\");\nGraph2.prototype.publish(\"layout\", \"ForceDirectedHybrid\", \"set\", \"Default Layout\", GraphLayoutTypeSet);\nGraph2.prototype.publish(\"scale\", \"100%\", \"set\", \"Zoom Level\", [\"all\", \"width\", \"selection\", \"100%\", \"90%\", \"75%\", \"50%\", \"25%\", \"10%\"]);\nGraph2.prototype.publish(\"applyScaleOnLayout\", false, \"boolean\", \"Shrink to fit on Layout\");\nGraph2.prototype.publish(\"highlightOnMouseOverVertex\", true, \"boolean\", \"Highlight Vertex on Mouse Over\");\nGraph2.prototype.publish(\"highlightOnMouseOverEdge\", true, \"boolean\", \"Highlight Edge on Mouse Over\");\nGraph2.prototype.publish(\"transitionDuration\", 250, \"number\", \"Transition Duration\");\nGraph2.prototype.publish(\"showEdges\", true, \"boolean\", \"Show Edges\");\nGraph2.prototype.publish(\"showEdgeLabels\", true, \"boolean\", \"Show Edge labels\");\nGraph2.prototype.publish(\"showEdgeLabelsOnHighlight\", true, \"boolean\", \"Show Edge labels when highlighted\");\nGraph2.prototype.publish(\"showVertexLabels\", true, \"boolean\", \"Show Vertex labels\");\nGraph2.prototype.publish(\"showVertexLabelsOnHighlight\", true, \"boolean\", \"Show Vertex labels when highlighted\");\nGraph2.prototype.publish(\"snapToGrid\", 0, \"number\", \"Snap to Grid\");\nGraph2.prototype.publish(\"selectionClearOnBackgroundClick\", false, \"boolean\", \"Clear selection on background click\");\nGraph2.prototype.publish(\"edgeArcDepth\", 8, \"number\", \"Edge Arc Depth\");\nGraph2.prototype.publish(\"edgeColor\", null, \"html-color\", \"Edge line stroke color\", null, { optional: true });\nGraph2.prototype.publish(\"edgeStrokeWidth\", 1, \"number\", \"Edge line stroke width (pixels)\");\nGraph2.prototype.publish(\"minScale\", 0.6, \"number\", \"Min scale size for text\");\nGraph2.prototype.publish(\"maxScale\", 1.0, \"number\", \"Max scale size for text\");\nGraph2.prototype.publish(\"tooltipWidth\", 256, \"number\", \"Tooltip width (pixels)\");\nGraph2.prototype.publish(\"tooltipHeight\", 128, \"number\", \"Tooltip width (pixels)\");\nGraph2.prototype.publish(\"enableTooltipPointerEvents\", false, \"boolean\", \"If true, tooltip will use the style: 'pointer-events: all'\");\nGraph2.prototype.publish(\"tooltipCloseDelay\", 0, \"number\", \"Number of milliseconds to wait before closing tooltip (cancelled on tooltip mouseover event)\");\nGraph2.prototype.publish(\"doubleClickMaxDelay\", 300, \"number\", \"Number of milliseconds to wait before a subsequent click is not considered a double click\");\n\nGraph2.prototype.publish(\"centroidColor\", \"#00A000\", \"html-color\", \"Centroid Glow Color\");\nGraph2.prototype.publish(\"centroidScale\", 1, \"number\", \"Centroid Scale\");\nGraph2.prototype.publish(\"centroidTextHeight\", 12, \"number\", \"Centroid Text Height\");\nGraph2.prototype.publish(\"centroidTextPadding\", 4, \"number\", \"Centroid Text Padding\");\nGraph2.prototype.publish(\"centroidIconHeight\", 50, \"number\", \"Centroid Icon Height\");\nGraph2.prototype.publish(\"centroidIconPadding\", 10, \"number\", \"Centroid Icon Padding\");\nGraph2.prototype.publish(\"centroidIconStrokeWidth\", 4, \"number\", \"Centroid Icon Stroke Width\");\nGraph2.prototype.publish(\"centroidIconFontFamily\", \"FontAwesome\", \"string\", \"Centroid Icon Font Family\");\nGraph2.prototype.publish(\"centroidLabelFontFamily\", \"FontAwesome\", \"string\", \"Centroid Label Font Family\");\nGraph2.prototype.publish(\"vertexTextHeight\", 10, \"number\", \"Vertex Text Height\");\nGraph2.prototype.publish(\"vertexTextPadding\", 4, \"number\", \"Vertex Text Padding\");\nGraph2.prototype.publish(\"vertexIconHeight\", 50, \"number\", \"Vertex Icon Height\");\nGraph2.prototype.publish(\"vertexIconPadding\", 10, \"number\", \"Vertex Icon Padding\");\nGraph2.prototype.publish(\"vertexIconStrokeWidth\", 0, \"number\", \"Vertex Icon Stroke Width\");\nGraph2.prototype.publish(\"vertexIconFontFamily\", \"FontAwesome\", \"string\", \"Vertex Icon Font Family\");\nGraph2.prototype.publish(\"vertexLabelFontFamily\", \"FontAwesome\", \"string\", \"Vertex Label Font Family\");\nGraph2.prototype.publish(\"highlightSelectedPathToCentroid\", true, \"boolean\", \"Highlight path to Center Vertex (for selected vertices)\");\n\nGraph2.prototype.publish(\"hierarchyRankDirection\", \"TB\", \"set\", \"Direction for Rank Nodes\", [\"TB\", \"BT\", \"LR\", \"RL\"], { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyNodeSeparation\", 50, \"number\", \"Number of pixels that separate nodes horizontally in the layout\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyEdgeSeparation\", 10, \"number\", \"Number of pixels that separate edges horizontally in the layout\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyRankSeparation\", 50, \"number\", \"Number of pixels between each rank in the layout\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyDigraph\", true, \"boolean\", \"Directional Graph2\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\n\nGraph2.prototype.publish(\"forceDirectedAlpha\", 1, \"number\", \"Alpha\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedAlphaMin\", 0.001, \"number\", \"Min Alpha\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedAlphaDecay\", 0.0228, \"number\", \"Defaults to 1 - pow(alphaMin, 1 / 300)\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedRepulsionStrength\", -350, \"number\", \"Charge strength \", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedVelocityDecay\", 0.4, \"number\", \"Velocity Decay \", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedIterations\", 300, \"number\", \"Iterations\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedLinkDistance\", 300, \"number\", \"Target distance between linked nodes\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedLinkStrength\", 1, \"number\", \"Strength (rigidity) of links\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedPinCentroid\", false, \"boolean\", \"Pin centroid to center\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedForceStrength\", 0, \"number\", \"Strength of center force\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedMinDistance\", 1, \"number\", \"Min distance between nodes\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedMaxDistance\", Infinity, \"number\", \"Max distance between nodes\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\n\nGraph2.prototype.publish(\"treeRankDirection\", \"LR\", \"set\", \"Direction for Rank Nodes\", [\"TB\", \"LR\"], { disable: (w: Graph2) => w.layout() !== \"Tree\" && w.layout() !== \"Dendrogram\" });\n\nGraph2.prototype.publish(\"wasmFolder\", null, \"string\", \"WASM Folder\", null, { optional: true, disable: (w: Graph2) => [\"DOT\", \"Neato\", \"FDP\", \"TwoPI\", \"Circo\"].indexOf(w.layout()) < 0 });\n\nconst _origScale = Graph2.prototype.scale;\nGraph2.prototype.scale = function (_?, transitionDuration?) {\n const retVal = _origScale.apply(this, arguments);\n if (arguments.length) {\n this.zoomTo(_, transitionDuration);\n }\n return retVal;\n};\n\nexport function graphviz(dot: string, engine: Engine = \"dot\", _wasmFolder: string = wasmFolder) {\n return gvWorker({\n items: [],\n links: [],\n raw: dot\n }, {\n engine: engine,\n wasmFolder: _wasmFolder\n });\n}\n","import { PropertyExt, publish, Widget } from \"@hpcc-js/common\";\nimport { CentroidVertex3, Vertex3 } from \"@hpcc-js/react\";\nimport { compare2 } from \"@hpcc-js/util\";\nimport { Graph2 } from \"./graph\";\nimport { IEdge, IHierarchy, ISubgraph, IVertex } from \"./layouts/placeholders\";\n\nexport function toJsonObj(row, columns) {\n const retVal = {};\n columns.forEach((c, i) => retVal[c] = row[i]);\n return retVal;\n}\n\nexport class AnnotationColumn extends PropertyExt {\n\n @publish(\"\", \"set\", \"Annotation column (boolean)\", function (this: AnnotationColumn) { return this._owner.vertexColumns(); })\n columnID: publish<this, string>;\n @publish(\"\", \"string\", \"Annotation ID\")\n annotationID: publish<this, string>;\n\n protected _owner: DataGraph;\n owner(): DataGraph;\n owner(_: DataGraph): this;\n owner(_?: DataGraph): DataGraph | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.columnID();\n }\n}\nAnnotationColumn.prototype._class += \" graph_AnnotationColumn\";\n\nexport class DataGraph extends Graph2 {\n\n @publish([], \"any\", \"Subgraph Columns\", null, { internal: true })\n subgraphColumns: publish<this, string[]>;\n @publish([], \"any\", \"Subgraphs\", null, { internal: true })\n subgraphs: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"string\", \"Subgraph ID column\")\n subgraphIDColumn: publish<this, string>;\n @publish(\"\", \"string\", \"Subgraph Label column\")\n subgraphLabelColumn: publish<this, string>;\n\n @publish([], \"any\", \"Vertex Columns\", null, { internal: true })\n vertexColumns: publish<this, string[]>;\n @publish([], \"any\", \"Vertices (Nodes)\", null, { internal: true })\n vertices: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Vertex Category ID column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCategoryColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex ID column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex label column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex centroid column (boolean)\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCentroidColumn: publish<this, string>;\n @publish(\"?\", \"string\", \"Vertex default FAChar\")\n vertexFAChar: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex FAChar column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexFACharColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex tooltip column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexTooltipColumn: publish<this, string>;\n @publish([], \"propertyArray\", \"Annotations\", null, { autoExpand: AnnotationColumn })\n vertexAnnotationColumns: publish<this, AnnotationColumn[]>;\n\n @publish([], \"any\", \"Edge columns\", null, { internal: true })\n edgeColumns: publish<this, string[]>;\n @publish([], \"any\", \"Edges (Edges)\", null, { internal: true })\n edges: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Edge ID column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge label column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge source ID column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeSourceColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge target ID column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeTargetColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge weight column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeWeightColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge color column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeColorColumn: publish<this, string>;\n\n @publish([], \"any\", \"Subgraph Columns\")\n hierarchyColumns: publish<this, string[]>;\n @publish([], \"any\", \"Subgraphs\")\n hierarchy: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"string\", \"Subgraph ID column\")\n hierarchyParentIDColumn: publish<this, string>;\n @publish(\"\", \"string\", \"Subgraph Label column\")\n hierarchyChildIDColumn: publish<this, string>;\n\n constructor() {\n super();\n this\n .vertexRenderer(Vertex3)\n .centroidRenderer(CentroidVertex3)\n .edgeColor(\"#287EC4\")\n .edgeStrokeWidth(2)\n .edgeArcDepth(0)\n ;\n }\n\n clear() {\n this._prevSubgraphs = [];\n this._masterSubgraphs = [];\n this._masterSubgraphsMap = {};\n\n this._prevVertices = [];\n this._masterVertices = [];\n this._masterVerticesMap = {};\n\n this._prevEdges = [];\n this._masterEdges = [];\n\n this._prevHierarchy = [];\n this._masterHierarchy = [];\n this._masterHierarchyMap = {};\n\n this._graphData.clear();\n this.resetLayout();\n }\n\n indexOf(columns: readonly string[], column: string, defColumn: string = \"\"): number {\n const retVal = columns.indexOf(column);\n return retVal >= 0 ? retVal : columns.indexOf(defColumn);\n }\n\n private _prevSubgraphs: readonly ISubgraph[] = [];\n private _masterSubgraphs: ISubgraph[] = [];\n private _masterSubgraphsMap: { [key: string]: ISubgraph } = {};\n mergeSubgraphs() {\n const columns = this.subgraphColumns();\n const idIdx = this.indexOf(columns, this.subgraphIDColumn(), \"id\");\n const labelIdx = this.indexOf(columns, this.subgraphLabelColumn(), \"label\");\n const subgraphs = this.subgraphs().map((sg): ISubgraph => {\n return {\n id: \"\" + sg[idIdx],\n text: \"\" + sg[labelIdx],\n origData: toJsonObj(sg, columns)\n };\n });\n const diff = compare2(this._prevSubgraphs, subgraphs, d => d.id);\n diff.exit.forEach(item => {\n this._masterSubgraphs = this._masterSubgraphs.filter(i => i.id !== item.id);\n delete this._masterSubgraphsMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterSubgraphs.push(item);\n this._masterSubgraphsMap[item.id] = item;\n });\n diff.update.forEach(item => {\n this._masterSubgraphsMap[item.id].origData = item.origData;\n });\n this._prevSubgraphs = subgraphs;\n }\n\n private _prevVertices: readonly IVertex[] = [];\n private _masterVertices: IVertex[] = [];\n private _masterVerticesMap: { [key: string]: IVertex } = {};\n mergeVertices() {\n const columns = this.vertexColumns();\n const annotationColumns = this.vertexAnnotationColumns();\n const catIdx = this.indexOf(columns, this.vertexCategoryColumn(), \"category\");\n const idIdx = this.indexOf(columns, this.vertexIDColumn(), \"id\");\n const labelIdx = this.indexOf(columns, this.vertexLabelColumn(), \"label\");\n const centroidIdx = this.indexOf(columns, this.vertexCentroidColumn(), \"centroid\");\n const faCharIdx = this.indexOf(columns, this.vertexFACharColumn(), \"faChar\");\n const vertexTooltipIdx = this.indexOf(columns, this.vertexTooltipColumn(), \"tooltip\");\n const annotationIdxs = annotationColumns.map(ac => this.indexOf(columns, ac.columnID(), \"\"));\n const vertices: IVertex[] = this.vertices().map((v): IVertex => {\n return {\n categoryID: \"\" + v[catIdx],\n id: \"\" + v[idIdx],\n text: \"\" + v[labelIdx],\n tooltip: \"\" + v[vertexTooltipIdx],\n origData: toJsonObj(v, columns),\n centroid: !!v[centroidIdx],\n icon: {\n imageChar: \"\" + (v[faCharIdx] || this.vertexFAChar())\n },\n annotationIDs: annotationIdxs.map((ai, i) => !!v[ai] ? annotationColumns[i].annotationID() : undefined).filter(a => !!a)\n };\n });\n const diff = compare2(this._prevVertices, vertices, d => d.id);\n diff.exit.forEach(item => {\n this._masterVertices = this._masterVertices.filter(i => i.id !== item.id);\n delete this._masterVerticesMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterVertices.push(item);\n this._masterVerticesMap[item.id] = item;\n });\n diff.update.forEach(item => {\n this._masterVerticesMap[item.id].origData = item.origData;\n });\n this._prevVertices = vertices;\n }\n\n protected _prevEdges: readonly IEdge[] = [];\n protected _masterEdges: IEdge[] = [];\n private _masterEdgesMap: { [key: string]: IEdge } = {};\n mergeEdges() {\n const columns = this.edgeColumns();\n const idIdx = this.indexOf(columns, this.edgeIDColumn(), \"id\");\n const sourceIdx = this.indexOf(columns, this.edgeSourceColumn(), \"source\");\n const targetIdx = this.indexOf(columns, this.edgeTargetColumn(), \"target\");\n const labelIdx = this.indexOf(columns, this.edgeLabelColumn(), \"label\");\n const weightIdx = this.indexOf(columns, this.edgeWeightColumn(), \"weight\");\n const colorIdx = this.indexOf(columns, this.edgeColorColumn(), \"color\");\n const edges: IEdge[] = this.edges().map(e => {\n const source = this._masterVerticesMap[\"\" + e[sourceIdx]];\n if (!source) console.error(`Invalid edge source entity \"${e[sourceIdx]}\" does not exist.`);\n const target = this._masterVerticesMap[\"\" + e[targetIdx]];\n if (!target) console.error(`Invalid edge target entity \"${e[targetIdx]}\" does not exist.`);\n return {\n type: \"edge\",\n id: idIdx >= 0 ? \"\" + e[idIdx] : \"\" + e[sourceIdx] + \"->\" + e[targetIdx],\n source,\n target,\n weight: +e[weightIdx] || 1,\n color: e[colorIdx] as string,\n label: labelIdx >= 0 ? (\"\" + e[labelIdx]) : \"\",\n origData: toJsonObj(e, columns)\n };\n }).filter(e => e.source && e.target);\n const diff = compare2(this._masterEdges, edges, d => d.id);\n diff.exit.forEach(item => {\n this._masterEdges = this._masterEdges.filter(i => i.id !== item.id);\n delete this._masterEdgesMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterEdges.push(item);\n this._masterEdgesMap[item.id] = item;\n\n });\n diff.update.forEach(item => {\n this._masterEdgesMap[item.id].origData = item.origData;\n });\n this._prevEdges = edges;\n }\n\n private _prevHierarchy: readonly IHierarchy[] = [];\n private _masterHierarchy: IHierarchy[] = [];\n private _masterHierarchyMap: { [key: string]: IHierarchy } = {};\n mergeHierarchy() {\n const columns = this.hierarchyColumns();\n const parentIDIdx = this.indexOf(columns, this.hierarchyParentIDColumn(), \"parentID\");\n const childIDIdx = this.indexOf(columns, this.hierarchyChildIDColumn(), \"childID\");\n const hierarchy: IHierarchy[] = this.hierarchy().map((h): IHierarchy => {\n return {\n id: \"\" + h[parentIDIdx] + \"=>\" + h[childIDIdx],\n parent: this._masterSubgraphsMap[\"\" + h[parentIDIdx]],\n child: this._masterSubgraphsMap[\"\" + h[childIDIdx]] || this._masterVerticesMap[\"\" + h[childIDIdx]]\n };\n });\n const diff = compare2(this._prevHierarchy, hierarchy, d => d.id);\n diff.exit.forEach(item => {\n this._masterHierarchy = this._masterHierarchy.filter(i => i.id !== item.id);\n delete this._masterHierarchyMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterHierarchy.push(item);\n this._masterHierarchyMap[item.id] = item;\n });\n this._prevHierarchy = hierarchy;\n }\n\n update(domNode, element) {\n this.mergeSubgraphs();\n this.mergeVertices();\n this.mergeEdges();\n this.mergeHierarchy();\n this.data({ subgraphs: this._masterSubgraphs, vertices: this._masterVertices, edges: this._masterEdges, hierarchy: this._masterHierarchy });\n super.update(domNode, element);\n }\n\n render(callback?: (w: Widget) => void): this {\n super.render(w => {\n if (callback) {\n callback(w);\n }\n });\n return this;\n }\n}\nDataGraph.prototype._class += \" graph_DataGraph\";\n","import { Palette, publish, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { compare2 } from \"@hpcc-js/util\";\nimport { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from \"d3-sankey\";\nimport { select as d3Select } from \"d3-selection\";\nimport { AnnotationColumn, toJsonObj } from \"./dataGraph\";\nimport { IEdge, IVertex } from \"./graph\";\n\nimport \"../../src/graph2/sankeyGraph.css\";\n\nexport class SankeyGraph extends SVGWidget {\n @publish([], \"any\", \"Vertex Columns\", null, { internal: true })\n vertexColumns: publish<this, string[]>;\n @publish([], \"any\", \"Vertices (Nodes)\", null, { internal: true })\n vertices: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Vertex Category ID column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCategoryColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex ID column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex label column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex centroid column (boolean)\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCentroidColumn: publish<this, string>;\n @publish(\"?\", \"string\", \"Vertex default FAChar\")\n vertexFAChar: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex FAChar column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexFACharColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex tooltip column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexTooltipColumn: publish<this, string>;\n @publish([], \"propertyArray\", \"Annotations\", null, { autoExpand: AnnotationColumn })\n vertexAnnotationColumns: publish<this, AnnotationColumn[]>;\n\n @publish([], \"any\", \"Edge columns\", null, { internal: true })\n edgeColumns: publish<this, string[]>;\n @publish([], \"any\", \"Edges (Edges)\", null, { internal: true })\n edges: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Edge ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge label column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge source ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeSourceColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge target ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeTargetColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge target ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeWeightColumn: publish<this, string>;\n\n protected _d3Sankey: any;\n protected _selection: any;\n _palette: any;\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n }\n\n private _prevVertices: readonly IVertex[] = [];\n private _masterVertices: IVertex[] = [];\n private _masterVerticesMap: { [key: string]: IVertex } = {};\n mergeVertices() {\n const columns = this.vertexColumns();\n const annotationColumns = this.vertexAnnotationColumns();\n const catIdx = this.indexOf(columns, this.vertexCategoryColumn(), \"category\");\n const idIdx = this.indexOf(columns, this.vertexIDColumn(), \"id\");\n const labelIdx = this.indexOf(columns, this.vertexLabelColumn(), \"label\");\n const centroidIdx = this.indexOf(columns, this.vertexCentroidColumn(), \"centroid\");\n const faCharIdx = this.indexOf(columns, this.vertexFACharColumn(), \"faChar\");\n const vertexTooltipIdx = this.indexOf(columns, this.vertexTooltipColumn(), \"tooltip\");\n const annotationIdxs = annotationColumns.map(ac => this.indexOf(columns, ac.columnID(), \"\"));\n const vertices: IVertex[] = this.vertices().map((v): IVertex => {\n return {\n categoryID: \"\" + v[catIdx],\n id: \"\" + v[idIdx],\n text: \"\" + v[labelIdx],\n tooltip: \"\" + v[vertexTooltipIdx],\n origData: toJsonObj(v, columns),\n centroid: !!v[centroidIdx],\n icon: {\n imageChar: \"\" + (v[faCharIdx] || this.vertexFAChar())\n },\n annotationIDs: annotationIdxs.map((ai, i) => !!v[ai] ? annotationColumns[i].annotationID() : undefined).filter(a => !!a)\n };\n });\n const diff = compare2(this._prevVertices, vertices, d => d.id);\n diff.exit.forEach(item => {\n this._masterVertices = this._masterVertices.filter(i => i.id !== item.id);\n });\n diff.enter.forEach(item => {\n this._masterVertices.push(item);\n this._masterVerticesMap[item.id] = item;\n });\n this._prevVertices = vertices;\n }\n\n indexOf(columns: readonly string[], column: string, defColumn: string = \"\"): number {\n const retVal = columns.indexOf(column);\n return retVal >= 0 ? retVal : columns.indexOf(defColumn);\n }\n\n protected _prevEdges: readonly IEdge[] = [];\n protected _masterEdges: IEdge[] = [];\n mergeEdges() {\n const columns = this.edgeColumns();\n const idIdx = this.indexOf(columns, this.edgeIDColumn(), \"id\");\n const sourceIdx = this.indexOf(columns, this.edgeSourceColumn(), \"source\");\n const targetIdx = this.indexOf(columns, this.edgeTargetColumn(), \"target\");\n const labelIdx = this.indexOf(columns, this.edgeLabelColumn(), \"label\");\n const weightIdx = this.indexOf(columns, this.edgeWeightColumn(), \"weight\");\n const edges: IEdge[] = this.edges().map(e => {\n const source = this._masterVerticesMap[\"\" + e[sourceIdx]];\n if (!source) console.error(`Invalid edge source entity \"${e[sourceIdx]}\" does not exist.`);\n const target = this._masterVerticesMap[\"\" + e[targetIdx]];\n if (!target) console.error(`Invalid edge target entity \"${e[targetIdx]}\" does not exist.`);\n return {\n type: \"edge\",\n id: idIdx >= 0 ? \"\" + e[idIdx] : \"\" + e[sourceIdx] + \"->\" + e[targetIdx],\n source,\n target,\n value: +e[weightIdx] || 0,\n label: labelIdx >= 0 ? (\"\" + e[labelIdx]) : \"\",\n origData: toJsonObj(e, columns)\n };\n }).filter(e => e.source && e.target);\n const diff = compare2(this._masterEdges, edges, d => d.id);\n diff.exit.forEach(item => {\n this._masterEdges = this._masterEdges.filter(i => i.id !== item.id);\n });\n diff.enter.forEach(item => {\n this._masterEdges.push(item);\n });\n this._prevEdges = edges;\n }\n\n sankeyData() {\n this.mergeVertices();\n this.mergeEdges();\n return {\n vertices: this._masterVertices,\n edges: this._masterEdges\n };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._d3Sankey = d3Sankey();\n this._selection.widgetElement(element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._palette = this._palette.switch(this.paletteID());\n\n const strokeWidth = this.vertexStrokeWidth();\n\n const sankeyData = this.sankeyData();\n this._d3Sankey\n .nodeId(d => d.id)\n .extent([\n [0, 0],\n [this.width(), this.height()]\n ])\n // .nodeAlign(sankeyCenter)\n // .nodeWidth(this.vertexWidth())\n // .nodePadding(this.vertexPadding())\n ;\n if (sankeyData.vertices.length > 0) {\n this._d3Sankey({\n nodes: sankeyData.vertices,\n links: sankeyData.edges\n });\n }\n const context = this;\n\n // Links --- \n const link = element.selectAll(\".link\").data(sankeyData.edges);\n link.enter().append(\"path\")\n .attr(\"class\", \"link\")\n .each(function () {\n d3Select(this)\n .append(\"title\")\n ;\n })\n .merge(link)\n .attr(\"d\", d3SankeyLinkHorizontal())\n .style(\"stroke-width\", (d: any) => Math.max(1, d.width))\n // .sort(function (a, b) { return b.width - a.width; })\n .select(\"title\")\n .text(function (d) {\n return d.source.text + \" → \" + d.target.text + \"\\n\" + d.value;\n })\n ;\n link.exit().remove();\n\n // Nodes ---\n const node = element.selectAll(\".node\").data(sankeyData.vertices);\n node.enter().append(\"g\")\n .attr(\"class\", \"node\")\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(d.origData, \"\", context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(d.origData, \"\", context._selection.selected(this));\n })\n .each(function () {\n const gElement = d3Select(this);\n gElement.append(\"rect\");\n gElement.append(\"text\");\n })\n /*\n .call(d3.behavior.drag()\n .origin(function (d) { return d; })\n .on(\"dragstart\", function () {\n this.parentNode.appendChild(this);\n })\n .on(\"drag\", dragmove)\n )\n */\n .merge(node)\n .attr(\"transform\", function (d) {\n let _x = 0;\n let _y = 0;\n if (d.x0) _x = d.x0;\n if (d.y0) _y = d.y0;\n return \"translate(\" + (_x + strokeWidth) + \",\" + (_y + strokeWidth) + \")\";\n })\n .each(function () {\n const n = d3Select(this);\n n.select(\"rect\")\n .attr(\"height\", (d: any) => {\n return d.y1 - d.y0;\n })\n .attr(\"width\", (d: any) => d.x1 - d.x0)\n .style(\"fill\", function (d: any) { return context._palette(d.categoryID); })\n .style(\"stroke\", function (d: any) { return context.vertexStrokeColor(); })\n .style(\"stroke-width\", function (d: any) { return strokeWidth; })\n .style(\"cursor\", (context.xAxisMovement() || context.yAxisMovement()) ? null : \"default\")\n ;\n n.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d: any) {\n return (d.y1 - d.y0) / 2;\n })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d: any) {\n return d.text;\n })\n .filter(function (d: any) {\n return d.x0 < context.width() / 2;\n })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n });\n node.exit().remove();\n\n /*\n function dragmove(d) {\n var gElement = d3.select(this);\n if (context.xAxisMovement()) {\n d.x = Math.max(0, Math.min(context.width() - d.dx, d3.event.x));\n }\n if (context.yAxisMovement()) {\n d.y = Math.max(0, Math.min(context.height() - d.dy, d3.event.y));\n }\n gElement.attr(\"transform\", \"translate(\" + d.x + \",\" + d.y + \")\");\n context._d3Sankey.relayout();\n link.attr(\"d\", context._d3SankeyPath);\n \n gElement.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d) { return d.dy / 2; })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d) { return d.name; })\n .filter(function (d) { return d.x < context.width() / 2; })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n }\n */\n }\n\n paletteID: { (): string; (_: string): SankeyGraph; };\n vertexStrokeWidth: { (): number; (_: number): SankeyGraph; };\n vertexStrokeColor: { (): string; (_: string): SankeyGraph; };\n vertexWidth: { (): number; (_: number): SankeyGraph; };\n vertexPadding: { (): number; (_: number): SankeyGraph; };\n xAxisMovement: { (): boolean; (_: boolean): SankeyGraph; };\n yAxisMovement: { (): boolean; (_: boolean): SankeyGraph; };\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n // Events ---\n click(row, column, selected) {\n console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n\n dblclick(row, column, selected) {\n console.log(\"Double Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n}\nSankeyGraph.prototype._class += \" graph_SankeyGraph\";\nSankeyGraph.prototype.mixin(Utility.SimpleSelectionMixin);\n\nSankeyGraph.prototype._palette = Palette.ordinal(\"category10\");\n\nSankeyGraph.prototype.publish(\"paletteID\", \"category10\", \"set\", \"Color palette for this widget\", SankeyGraph.prototype._palette.switch());\nSankeyGraph.prototype.publish(\"vertexStrokeWidth\", 1, \"number\", \"Vertex Stroke Width\");\nSankeyGraph.prototype.publish(\"vertexStrokeColor\", \"darkgray\", \"string\", \"Vertex Stroke Color\");\nSankeyGraph.prototype.publish(\"vertexWidth\", 36, \"number\", \"Vertex Width\");\nSankeyGraph.prototype.publish(\"vertexPadding\", 20, \"number\", \"Vertex Padding\");\nSankeyGraph.prototype.publish(\"xAxisMovement\", false, \"boolean\", \"Enable x-axis movement\");\nSankeyGraph.prototype.publish(\"yAxisMovement\", false, \"boolean\", \"Enable y-axis movement\");\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/__package__.ts","../../../node_modules/tslib/tslib.es6.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/link/index.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/Edge.ts","../../../node_modules/dagre/lib/graphlib.js","../../../node_modules/dagre/lib/lodash.js","../../../node_modules/dagre/lib/data/list.js","../../../node_modules/dagre/lib/greedy-fas.js","../../../node_modules/dagre/lib/acyclic.js","../../../node_modules/dagre/lib/util.js","../../../node_modules/dagre/lib/normalize.js","../../../node_modules/dagre/lib/rank/util.js","../../../node_modules/dagre/lib/rank/feasible-tree.js","../../../node_modules/dagre/lib/rank/network-simplex.js","../../../node_modules/dagre/lib/rank/index.js","../../../node_modules/dagre/lib/parent-dummy-chains.js","../../../node_modules/dagre/lib/nesting-graph.js","../../../node_modules/dagre/lib/add-border-segments.js","../../../node_modules/dagre/lib/coordinate-system.js","../../../node_modules/dagre/lib/order/init-order.js","../../../node_modules/dagre/lib/order/cross-count.js","../../../node_modules/dagre/lib/order/barycenter.js","../../../node_modules/dagre/lib/order/resolve-conflicts.js","../../../node_modules/dagre/lib/order/sort.js","../../../node_modules/dagre/lib/order/sort-subgraph.js","../../../node_modules/dagre/lib/order/build-layer-graph.js","../../../node_modules/dagre/lib/order/add-subgraph-constraints.js","../../../node_modules/dagre/lib/order/index.js","../../../node_modules/dagre/lib/position/bk.js","../../../node_modules/dagre/lib/position/index.js","../../../node_modules/dagre/lib/layout.js","../../../node_modules/dagre/lib/debug.js","../../../node_modules/dagre/lib/version.js","../../../node_modules/dagre/index.js","../src/GraphData.ts","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/simulation.js","../../../node_modules/d3-force/src/manyBody.js","../src/GraphLayouts.ts","../src/Subgraph.ts","../src/Vertex.ts","../src/Graph.ts","../src/AdjacencyGraph.ts","../../../node_modules/d3-sankey/src/align.js","../../../node_modules/d3-sankey/src/constant.js","../../../node_modules/d3-sankey/src/sankey.js","../../../node_modules/d3-sankey/src/sankeyLinkHorizontal.js","../src/Sankey.ts","../src/graph2/layouts/layout.ts","../src/graph2/layouts/circle.ts","../src/graph2/layouts/dagre.ts","../src/graph2/layouts/dagreWorker.ts","../src/graph2/layouts/forceDirected.ts","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../src/graph2/layouts/graphvizWorker.ts","../src/graph2/layouts/graphviz.ts","../src/graph2/layouts/null.ts","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../src/graph2/layouts/tree.ts","../src/graph2/graph.ts","../src/graph2/dataGraph.ts","../src/graph2/sankeyGraph.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__spreadArray","to","from","pack","ar","l","slice","concat","pi","Math","PI","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","path","constant$2","x","moveTo","y","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","Error","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","Linear","context","_context","d3CurveLinear","d3Line","pointX","pointY","defined","constant","curve","curveLinear","output","line","data","buffer","defined0","lineStart","lineEnd","point","areaStart","_line","areaEnd","NaN","_point","linkSource","source","linkTarget","curveHorizontal","linkHorizontal","link","argv","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","_x","_y","j","push","custom","bundle","_k","_x2","_y2","Cardinal","tension","d3CurveCardinal","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","pow","a","m","catmullRom","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","graphlib","Curve","Edge","_super","_this","_points","_weight","_strokeDasharray","_hidden","_textBox","TextBox","padding","graphID","_graphID","sourceVertex","_sourceVertex","targetVertex","_targetVertex","weight","points","transitionDuration","skipPushMarkers","_elementPath","update","_element","hidden","text","enter","domNode","element","append","tooltip","render","Platform","svgMarkerGlitch","transition","duration","on","_pushMarkers","_popMarkers","_calculateEdgePoints","svgPoints","selectAll","showControlPoints","attr","merge","exit","remove","pathElements","sourceMarker_exists","sourceMarker","targetMarker_exists","targetMarker","strokeColor_exists","strokeColor","strokeDasharray_exists","strokeDasharray","move","_findMidPoint","midIdx","floor","p0","p1","filter","contains","pos","unshift","intersection","_pos","showArc","midX","arcDepth","midY","SVGWidget","_class","publish","tags","optional","publishProxy","require","e","window","lodash","graphlib_1","cloneDeep","defaults","each","find","flatten","forEach","forIn","has","isUndefined","last","map","mapValues","max","min","minBy","now","pick","range","reduce","sortBy","uniqueId","values","zipObject","lodash_1","list","List","sentinel","_next","_prev","_sentinel","unlink","entry","filterOutLinks","k","v","dequeue","enqueue","strs","curr","JSON","stringify","join","require$$0","Graph","require$$1","require$$2","greedyFas","g","weightFn","nodeCount","state","fasGraph","maxIn","maxOut","nodes","setNode","in","out","edges","prevWeight","edge","edgeWeight","setEdge","node","buckets","zeroIdx","assignBucket","graph","buildState","DEFAULT_WEIGHT_FN","results","sources","sinks","removeNode","doGreedyFAS","outEdges","collectPredecessors","undefined","inEdges","uEntry","wEntry","greedyFAS","acyclic","run","fas","acyclicer","stack","visited","dfs","dfsFAS","label","removeEdge","forwardName","name","reversed","undo","util","addDummyNode","simplify","simplified","setGraph","simpleLabel","minlen","asNonCompoundGraph","multigraph","isMultigraph","children","successorWeights","weightMap","sucs","predecessorWeights","preds","intersectRect","sx","sy","width","height","buildLayerMatrix","layering","maxRank","rank","order","normalizeRanks","removeEmptyRanks","offset","layers","delta","nodeRankFactor","vs","addBorderNode","prefix","partition","collection","fn","result","lhs","rhs","value","time","start","console","log","notime","attrs","hasNode","dummy","normalize","dummyChains","vRank","wRank","edgeLabel","labelRank","edgeObj","labelpos","normalizeEdge","origLabel","successors","longestPath","Number","POSITIVE_INFINITY","slack","feasibleTree_1","directed","size","tightTree","findMinSlackEdge","shiftRanks","nodeEdges","edgeV","feasibleTree","initRank","preorder","require$$3","alg","postorder","require$$4","networkSimplex_1","networkSimplex","initLowLimValues","initCutValues","leaveEdge","exchangeEdges","enterEdge","child","parent","cutvalue","calcCutValue","assignCutValue","childIsTail","graphEdge","cutValue","isOutEdge","other","pointsToHead","otherWeight","tree","u","hasEdge","isTreeEdge","otherCutValue","root","dfsAssignLowLim","nextLim","low","neighbors","lim","vLabel","wLabel","tailLabel","flip","candidates","isDescendant","f","flipped","updateRanks","rootLabel","rank_1","ranker","networkSimplexRanker","tightTreeRanker","longestPathRanker","parentDummyChains_1","postorderNums","pathData","lca","vPath","wPath","reverse","findPath","pathIdx","pathV","ascending","minRank","setParent","nestingGraph","depths","depth","treeDepths","nodeSep","nestingRoot","acc","sumWeights","cleanup","graphLabel","nestingEdge","top","bottom","borderTop","borderBottom","childNode","childTop","childBottom","thisWeight","addBorderSegments_1","borderLeft","borderRight","prop","sg","sgNode","borderType","prev","coordinateSystem","adjust","rankDir","rankdir","toLowerCase","swapWidthHeight","reverseYOne","reverseY","swapXYOne","swapXY","swapWidthHeightOne","initOrder_1","simpleNodes","orderedVs","crossCount_1","cc","twoLayerCrossCount","northLayer","southLayer","southPos","southEntries","firstIndex","treeSize","index","weightSum","consumeUnsortable","unsortable","pop","barycenter","movable","inV","nodeU","sum","resolveConflicts","entries","cg","mappedEntries","tmp","indegree","entryV","entryW","sourceSet","handleIn","vEntry","merged","mergeEntries","handleOut","doResolveConflicts","sort","biasRight","parts","sortable","vsIndex","bias","sortSubgraph_1","sortSubgraph","bl","br","subgraphs","barycenters","subgraphResult","expandSubgraphs","predecessors","blPred","brPred","buildLayerGraph_1","relationship","createRootNode","compound","setDefaultNodeLabel","initOrder","crossCount","buildLayerGraph","addSubgraphConstraints","rootPrev","prevChild","require$$6","require$$7","order_1","downLayerGraphs","buildLayerGraphs","upLayerGraphs","assignOrder","best","bestCC","lastBest","sweepLayerGraphs","ranks","layerGraphs","lg","sorted","layer","bk","adjustedLayering","conflicts","findType1Conflicts","findType2Conflicts","xss","vert","horiz","inner","neighborFn","bind","align","verticalAlignment","xs","horizontalCompaction","smallestWidth","findSmallestWidthAlignment","alignCoordinates","balance","prevLayer","k0","scanPos","prevLayerLength","lastNode","findOtherInnerSegmentNode","k1","scanNode","uLabel","uPos","addConflict","scan","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","nextNorthPos","prevNorthPos","southLookahead","conflictsV","hasConflict","prevIdx","ws","mp","il","ceil","reverseSep","blockG","blockGraph","sepFn","edgeSep","sep","nodesep","edgesep","vRoot","uRoot","prevMax","buildBlockGraph","iterate","setXsFunc","nextNodesFunc","elem","NEGATIVE_INFINITY","halfWidth","alignTo","alignToVals","alignToMin","alignToMax","alignment","xsVals","ul","ignore","positionX","position_1","rankSep","ranksep","prevY","maxHeight","positionY","parentDummyChains","require$$5","addBorderSegments","require$$8","require$$9","position","require$$10","require$$11","layout_1","opts","debugTiming","layoutGraph","inputGraph","canonicalize","graphDefaults","selectNumberAttrs","graphNumAttrs","graphAttrs","nodeNumAttrs","nodeDefaults","edgeDefaults","edgeNumAttrs","edgeAttrs","buildLayoutGraph","labeloffset","makeSpaceForEdgeLabels","selfEdges","removeSelfEdges","injectEdgeLabelProxies","assignRankMinMax","removeEdgeLabelProxies","orderShift","selfEdge","insertSelfEdges","selfNode","positionSelfEdges","removeBorderNodes","fixupEdgeLabelCoords","minX","maxX","minY","maxY","marginX","marginx","marginY","marginy","getExtremes","translateGraph","p2","nodeV","nodeW","assignNodeIntersects","reversePointsForReversedEdges","runLayout","inputLabel","layoutLabel","updateInputGraph","obj","newAttrs","dagre","layout","debug","debugOrdering","layerMatrix","layerV","version","GraphlibGraph","GraphData","_g","setDefaultEdgeLabel","cn","filterNodes","pred","filtered","eachNode","callback","item","filterEdges","eachEdge","setData","vertices","hierarchy","retVal","addedVertices","addedEdges","allVertices","entity","_id","edgeIDs_1","indexOf","vertexIDs_1","id","glEdge","singleNeighbors","gatherShortestPath","pathObj","targetID","walkID","pathItem","distance","Infinity","predecessor","anEdge","shortestPath","sourceID","dijkstra","undirectedShortestPath","getJSON","graphObj","json","write","_text","d3ForceCenter","force","initialize","constant$1","jiggle","random","add","isNaN","xm","ym","xp","yp","right","_root","leaf","next","Quad","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","copy","treeProto","nodeById","nodeId","get","d3ForceLink","links","strengths","distances","count","strength","iterations","vx","vy","initializeStrength","initializeDistance","cover","xz","yz","z","visit","extent","radius","q","x3","y3","quads","d2","retainer","previous","removeAll","visitAfter","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","Date","setFrame","requestAnimationFrame","setTimeout","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","t0","t2","t1","sleep","nap","poke","clearTimeout","clearInterval","setInterval","stop","initialAngle","d3ForceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","step","event","dispatch","tick","fx","fy","initializeNodes","angle","initializeForce","set","closest","d3ForceManyBody","distanceMin2","distanceMax2","theta2","accumulate","quad","distanceMin","distanceMax","theta","Circle","graphData","currStep","getBBox","fixed","ForceDirected","options","vertexMap","vertex","newItem","_e","forceLink","linkDistance","linkStrength","forceManyBody","cs","charge","oneShot","friction","total","Hierarchy","_width","_height","digraph","clientSize","dagreLayout","deltaX","deltaY","nodePos","edgePoints","Subgraph","_textWidget","Text","anchor","fontSize","_buttonMin","Icon","diameter","shape_colorStroke","shape_colorFill","image_colorFill","minClick","_minState","minState","calcIcon","refresh","round","_border","bbox","border_colorFill","border_colorStroke","border_colorFill_exists","title_colorFill_exists","title_colorFill","Palette","textColor","showTitle","title","visible","showMinMax","faChar","pointA","pointB","nearest","click","Vertex","_icon","_annotationWidgets","getIconBBox","iconBBox","textBoxBBox","iconAnchor","_prevHash","mouseover","mouseout","hash","hashSum","classed","centroid","iconTooltip","context_1","annotations","annotationIcons","annotationsEnter","_d","idx","shape","xOffset_1","yOffset_1","annotationWidget","annotationDiameter","textbox_shape_colorFill","textbox_shape_colorStroke","globalThis","__hpcc_debug","aBBox","annotationSpacing","element2","d3Select","i1","i2","_toggleHierarchy","ToggleButton","layoutClick","_toggleForceDirected","_toggleForceDirected2","_toggleCircle","_dataHash","_neighborOffsets","IGraph","ITooltip","tooltipHTML","content","replace","_drawStartPos","buttons","Spacer","_iconBar","_graphData","highlight","zoom","opacity","_selection","Utility","Selection","zoomToFitLimit","iconBarButtons","applyScaleOnLayout","getOffsetPos","clear","_renderCount","dupMap_1","dupEdgeCount","selection","linkcolor_default","_linkcolor","linktooltip_default","_linktooltip","dragstart","allowDragging","event_1","d3Event","sourceEvent","stopPropagation","__drag_dx","__drag_dy","_dragging","forceLayout","active","forceNode","dragSingleNeighbors","neighbor","raise","offsetX","offsetY","nextSibling","parentNode","dragging","event_2","neighborOffset","neighborX","neighborY","refreshIncidentEdges","dragend","snapToGrid","snapLoc","calcSnap","_zoomGrab","selectionClearOnBackgroundClick","_d3Drag","d3Drag","defs","_renderElement","addMarkers","_centroidFilter","SVGGlowFilter","svg","svgC","svgE","svgV","getBounds","items","layoutEngine","vBounds","leftX","rightX","topY","bottomY","getVertexBounds","getSelectionBounds","centerOnItem","itemBBox","centerOnBBox","zoomToItem","zoomToBBox","updateVertices","rootElement","rootSuffix","vertexElements","selectionChanged","vertexElement","select","selected","empty","vertex_click","rowToObj","vertex_dblclick","vertex_contextmenu","hide","show","vertex_mouseover","vertex_mouseout","animationFrameRender","allowResize","centroidColor","edgeElements","showEdges","edgeElement","edge_click","edge_dblclick","edge_mouseover","edge_mouseout","progress","doLayout","then","Promise","resolve","reject","_prevLayout","_prevDataHash","_doLayout","getLayoutEngine","total_1","count_1","zoomToFit","_fixIEMarkers","GraphLayouts.Circle","_size","GraphLayouts.ForceDirected","forceDirectedLinkDistance","forceDirectedLinkStrength","forceDirectedFriction","forceDirectedCharge","chargeDistance","forceDirectedChargeDistance","forceDirectedTheta","gravity","forceDirectedGravity","GraphLayouts.Hierarchy","hierarchyRankDirection","hierarchyNodeSeparation","hierarchyEdgeSeparation","hierarchyRankSeparation","hierarchyDigraph","getNeighborMap","nedges","highlightVerticies","_placeholderElement","highlightEdges","edgeMap","o","highlightVertex","highlightOnMouseOverVertex","highlightEdge","highlightOnMouseOverEdge","centroids","highlightSelectedPathToCentroid","highlightedEdges_1","_row","_col","_sel","more","_opts","clearFirst","what","profileID","SVGZoomWidget","implements","_origScale","scale","zoomTo","Annotation","owner","_owner","valid","iconColumn","indexes","columns","iconCol","iconFillCol","iconFillColumn","tooltipCol","tooltipColumn","shapeStrokeCol","shapeStrokeColumn","shapeFillCol","shapeFillColumn","mapper","row","shapeFillDefault","shapeStrokeDefault","iconFillDefault","PropertyExt","AdjacencyGraph","_vertexMap","_edgeMap","_merge","_adjacencyData","linksColumns","linksCol","linksColumn","linksField","_db","field","validAnnotations","updateData","prevAdjacencyDataHash","uidColumn","labelColumn","linkUidColumn","linkLabelColumn","_prevAdjacencyDataHash","uidCol_1","labelCol_1","iconCol_1","linksUidCol","linksLabelCol","annotationMappers_1","vertexMap_1","uid","am","_i","_a","_b","links_1","childRow","linkUid","linkLabel","edgeID","col","sel","justify","sourceLinks","ascendingSourceBreadth","ascendingBreadth","ascendingTargetBreadth","defaultId","defaultNodes","defaultLinks","computeLinkBreadths","targetLinks","Sankey","py","linkSort","sankey","computeNodeLinks","computeNodeValues","computeNodeDepths","computeNodeHeights","computeNodeBreadths","Map","fixedValue","current","Set","kx","column","computeNodeLayers","ky","reorderLinks","initializeNodeBreadths","relaxRightToLeft","relaxLeftToRight","targetTop","reorderNodeLinks","resolveCollisions","sourceTop","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","nodeAlign","nodeSort","nodeWidth","nodePadding","horizontalSource","horizontalTarget","d3SankeyLinkHorizontal","autoExpand","d3Aggr","mean","d3Mean","median","d3Median","d3Min","d3Max","d3Sum","SankeyColumn","aggregate","aggrType","colIdx_1","aggrColumn","disable","mappings","SimpleSelectionMixin","sankeyData","vertexIndex","mapping","rollupView","__id","__category","origRow","mapping2_1","_d3Sankey","d3Sankey","widgetElement","_palette","switch","paletteID","strokeWidth","vertexStrokeWidth","sw2","vertexWidth","vertexPadding","dblclick","gElement","vertexStrokeColor","xAxisMovement","yAxisMovement","Column","mixin","ordinal","lineBasis","lineCardinal","Layout","_running","_graph","running","center","edgePath","ep","curveDepth","sPos","projectPlacholder","tPos","labelPos","rads","degrees","sideLength","allEdges","vertexCount","moveVertices","moveEdges","clusterID","Dagre","_options","workerBlob","Blob","workerUrl","URL","createObjectURL","worker","Worker","terminate","response","onmessage","revokeObjectURL","postMessage","allSubgraphs","props","subgraphParent","vertexParent","subgraph","substring","sourceDist","targetDist","moveSubgraphs","hasNaN","project","ForceDirectedBase","_links","_charge","repulsionStrength","_center","d3ForceX","forceStrength","d3ForceY","_simulation","pinCentroid","ForceDirectedAnimated","graphviz","Graphviz","engine","wasmFolder","_engine","_wasmFolder","nodeIdx","gvWorker","raw","clusters","Null","defaultSeparation","meanXReduce","maxYReduce","cluster","separation","nodeSize","previousNode","eachAfter","meanX","left","leafLeft","leafRight","childs","Node","valued","defaultChildren","eachBefore","computeHeight","copyData","nextLeft","nextRight","moveSubtree","wm","wp","shift","change","nextAncestor","vim","ancestor","TreeNode","A","treeRoot","firstWalk","secondWalk","sizeNode","tx","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","Initial","compare","end","aNodes","ancestors","bNodes","leastCommonAncestor","splice","descendants","leaves","d3LinkHorizontal","Bounds","reset","expand","TidyTreeBase","_visited","sortTree","_tree","origData","cnode","depthFirst","node_1","breadthFirst","nnode","vertices_1","_d3Hierarchy","finalize","bounds","Tree","treeFunc","RadialTree","Dendrogram","RadialDendrogram","getScriptSrc","dragStart","dragTick","dragEnd","Graph2","_toggleDot","_toggleNeato","_toggleFDP","_toggleTwoPI","_toggleCirco","_toggleT","_toggleRT","_toggleD","_toggleRD","GraphCollection","idFunc","sourceFunc","targetFunc","updateFunc","_prevDoClickTime","_tooltip","HTMLTooltip","_dragHandler","_catPalette","_categories","_annotations","_origData","_layoutAlgo","_centroidRenderer","_vertexRenderer","_transformScale","safeRaise","moveVertexPlaceholder","rproject","vertexEdges","doClick","doClickTime","doubleClickMaxDelay","categories","mergeSubgraphs","mergeVertices","mergeEdges","vertexExists","clearParents","subgraphExists","some","vp","resetLayout","layoutRunning","layoutAlgo","updateIconBar","updateIconBarItem","tb","tbLayout","enabled","isSubgraph","isVertex","isEdge","proj","hideVertex","showVertex","_vertexG","forceLabelOnHighlight","showVertexLabels","showVertexLabelsOnHighlight","calcProps","showLabel","vertexMapper","_edgeG","edgeStrokeWidth","moveSubgraphPlaceholder","sp","moveEdgePlaceholder","edgeLayout","edgeArcDepth","elementPath","elementText","lines","split","fontFamily","moveNeighbours","clip","maxScale","minScale","categoryID","updateCategories","Icons","icons","fill","imageCharFill","_svgDefsCat","updateAnnotations","_svgDefsAnn","updateEdges","showEdgeLabels","color","edgeColor","centroidRenderer","vertexRenderer","annotationIDs","vertex_mousein","triggerElement","tooltipWidth","tooltipHeight","enablePointerEvents","enableTooltipPointerEvents","closeDelay","tooltipCloseDelay","direction","isCentroid","icon","textHeight","centroidTextHeight","centroidScale","textPadding","centroidTextPadding","textFontFamily","centroidLabelFontFamily","centroidIconHeight","centroidIconPadding","centroidIconStrokeWidth","imageFontFamily","centroidIconFontFamily","vertexTextHeight","vertexTextPadding","vertexLabelFontFamily","vertexIconHeight","vertexIconPadding","vertexIconStrokeWidth","vertexIconFontFamily","imageChar","textRect","yOffset","hasSubgraphs","updateSubgraphs","_subgraphG","subgraph_click","locateSVGNode","_svgDefs","forceDirectedOptions","forceDirectedAlpha","forceDirectedAlphaMin","forceDirectedAlphaDecay","forceDirectedVelocityDecay","forceDirectedRepulsionStrength","forceDirectedIterations","forceDirectedPinCentroid","forceDirectedForceStrength","forceDirectedMinDistance","forceDirectedMaxDistance","layoutOptions","treeRankDirection","updateLayout","zoomed","transform","_prevTransformScale","_prevWidth","_prevHeight","highlightedVertices_1","ids","len","toJsonObj","AnnotationColumn","columnID","vertexColumns","DataGraph","_prevSubgraphs","_masterSubgraphs","_masterSubgraphsMap","_prevVertices","_masterVertices","_masterVerticesMap","_prevEdges","_masterEdges","_masterEdgesMap","_prevHierarchy","_masterHierarchy","_masterHierarchyMap","Vertex3","CentroidVertex3","defColumn","subgraphColumns","idIdx","subgraphIDColumn","labelIdx","subgraphLabelColumn","diff","compare2","annotationColumns","vertexAnnotationColumns","catIdx","vertexCategoryColumn","vertexIDColumn","vertexLabelColumn","centroidIdx","vertexCentroidColumn","faCharIdx","vertexFACharColumn","vertexTooltipIdx","vertexTooltipColumn","annotationIdxs","ac","vertexFAChar","ai","annotationID","edgeColumns","edgeIDColumn","sourceIdx","edgeSourceColumn","targetIdx","edgeTargetColumn","edgeLabelColumn","weightIdx","edgeWeightColumn","colorIdx","edgeColorColumn","error","mergeHierarchy","hierarchyColumns","parentIDIdx","hierarchyParentIDColumn","childIDIdx","hierarchyChildIDColumn","internal","SankeyGraph","dot"],"mappings":"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","sourcesContent":["export const PKG_NAME = \"@hpcc-js/graph\";\r\nexport const PKG_VERSION = \"2.79.3\";\r\nexport const BUILD_VERSION = \"2.102.9\";\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\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","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export var slice = Array.prototype.slice;\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\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","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { Platform, SVGWidget, TextBox, Widget } from \"@hpcc-js/common\";\nimport { curveBasis as d3CurveBasis, curveBundle as d3CurveBundle, curveCardinal as d3CurveCardinal, curveCatmullRom as d3CurveCatmullRom, curveLinear as d3CurveLinear, line as d3Line } from \"d3-shape\";\n\nimport \"../src/Edge.css\";\n\nconst Curve = {\n basis: d3CurveBasis,\n bundle: d3CurveBundle,\n cardinal: d3CurveCardinal,\n catmullRom: d3CurveCatmullRom,\n linear: d3CurveLinear\n};\n\nexport class Edge extends SVGWidget {\n protected _points: any[];\n protected _weight: number;\n protected _strokeDasharray: number[];\n protected _hidden: boolean;\n protected _textBox: TextBox;\n protected _sourceVertex: Widget;\n protected _targetVertex: Widget;\n protected _elementPath;\n protected _graphID;\n\n constructor() {\n super();\n\n this._points = [];\n this._weight = 100;\n this._strokeDasharray = null;\n this._hidden = false;\n\n this._textBox = new TextBox()\n .padding(0)\n ;\n }\n\n graphID(_) {\n if (!arguments.length) return this._graphID;\n this._graphID = _;\n return this;\n }\n\n sourceVertex(): Widget;\n sourceVertex(_: Widget): this;\n sourceVertex(_?: Widget): Widget | this {\n if (!arguments.length) return this._sourceVertex;\n this._sourceVertex = _;\n return this;\n }\n\n targetVertex(): Widget;\n targetVertex(_: Widget): this;\n targetVertex(_?: Widget): Widget | this {\n if (!arguments.length) return this._targetVertex;\n this._targetVertex = _;\n return this;\n }\n\n weight(): number;\n weight(_: number): this;\n weight(_?: number): number | this {\n if (!arguments.length) return this._weight;\n this._weight = _;\n return this;\n }\n\n points(): any[];\n points(_: any[], transitionDuration?, skipPushMarkers?): this;\n points(_?: any[], transitionDuration?, skipPushMarkers?): any[] | this {\n if (!arguments.length) return this._points;\n this._points = _;\n if (this._elementPath) {\n this.update(null, this._element, transitionDuration, skipPushMarkers);\n }\n return this;\n }\n\n hidden(_) {\n if (!arguments.length) return this._hidden;\n this._hidden = _;\n return this;\n }\n\n text(): string;\n text(_: string): this;\n text(_?: string): string | this {\n if (!arguments.length) return this._textBox.text();\n this._textBox.text(_);\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._elementPath = element.append(\"path\");\n\n if (this._textBox.text()) {\n this._textBox\n .target(domNode)\n .tooltip(this.tooltip())\n .render()\n ;\n }\n }\n\n update(domNode, element, transitionDuration?, skipPushMarkers?) {\n super.update(domNode, element);\n\n const context = this;\n if (Platform.svgMarkerGlitch && !skipPushMarkers) {\n element.transition().duration((transitionDuration ? transitionDuration : 0) + 100)\n .on(\"start\", function () {\n context._pushMarkers(element);\n })\n .on(\"end\", function () {\n context._popMarkers(element);\n })\n ;\n }\n const points = context._calculateEdgePoints(this._sourceVertex, this._targetVertex, this._points);\n const svgPoints = element.selectAll(\".point2\").data(this.showControlPoints() ? points : []);\n svgPoints.enter().append(\"circle\")\n .attr(\"class\", \"point2\")\n .style(\"stroke\", \"red\")\n .merge(svgPoints)\n .attr(\"cx\", d => d.x)\n .attr(\"cy\", d => d.y)\n .attr(\"r\", 1)\n ;\n svgPoints.exit().remove();\n\n const line = d3Line()\n .x(function (d: any) { return d.x; })\n .y(function (d: any) { return d.y; })\n // .tension(0.75)\n .curve(Curve.basis)(points)\n ;\n let pathElements = this._elementPath;\n if (transitionDuration) {\n pathElements = pathElements.transition().duration(transitionDuration);\n }\n pathElements\n .attr(\"opacity\", this._hidden ? 0 : 1)\n .attr(\"marker-start\", !(Platform.svgMarkerGlitch && skipPushMarkers) && this.sourceMarker_exists() ? \"url(#\" + this._graphID + \"_\" + this.sourceMarker() + \"Foot)\" : null)\n .attr(\"marker-end\", !(Platform.svgMarkerGlitch && skipPushMarkers) && this.targetMarker_exists() ? \"url(#\" + this._graphID + \"_\" + this.targetMarker() + \"Head)\" : null)\n .attr(\"stroke\", this.strokeColor_exists() ? this.strokeColor() : null)\n .attr(\"stroke-dasharray\", this.strokeDasharray_exists() ? this.strokeDasharray() : null)\n .attr(\"d\", line)\n ;\n\n if (this._textBox.text()) {\n this._textBox\n .tooltip(this.tooltip())\n .move(this._findMidPoint(points), transitionDuration)\n ;\n }\n }\n\n exit(domNode, element) {\n if (this._textBox) {\n this._textBox.target(null);\n }\n super.exit(domNode, element);\n }\n\n _findMidPoint(points) {\n const midIdx = points.length / 2;\n if (points.length % 2) {\n return points[Math.floor(midIdx)];\n } else if (points.length) {\n const p0 = points[midIdx - 1];\n const p1 = points[midIdx];\n return { x: (p0.x + p1.x) / 2, y: (p0.y + p1.y) / 2 };\n }\n return { x: 0, y: 0 };\n }\n\n _calculateEdgePoints(source, target, _points) {\n if (!source || !target) {\n return [{ x: 0, y: 0 }, { x: 0, y: 0 }];\n }\n let points = _points ? _points.filter(p => !source.contains(p) && !target.contains(p)) : [];\n const p0 = points.length === 0 ? target.pos() : points[0];\n const p1 = points.length === 0 ? source.pos() : points[points.length - 1];\n\n points.unshift(source.intersection(source._pos, p0));\n points.push(target.intersection(target._pos, p1));\n if (!points[0]) {\n points[0] = source._pos;\n }\n if (!points[points.length - 1]) {\n points[points.length - 1] = target._pos;\n }\n\n if ((!_points || _points.length === 0) && points.length === 2 && points[0] && points[1]) {\n const dx = points[0].x - points[1].x;\n const dy = points[0].y - points[1].y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist) {\n if (this.showArc()) {\n const midX = (points[0].x + points[1].x) / 2 - dy * this.arcDepth() / 100;\n const midY = (points[0].y + points[1].y) / 2 + dx * this.arcDepth() / 100;\n points = [{ x: points[0].x, y: points[0].y }, { x: midX, y: midY }, { x: points[1].x, y: points[1].y }];\n } else {\n points = [{ x: points[0].x, y: points[0].y }, { x: points[1].x, y: points[1].y }];\n }\n }\n }\n return points;\n }\n}\nEdge.prototype._class += \" graph_Edge\";\n\nexport interface Edge {\n arcDepth(): number;\n arcDepth(_: number): this;\n showControlPoints(): boolean;\n showControlPoints(_: boolean): this;\n showArc(): boolean;\n showArc(_: boolean): this;\n tooltip(): string;\n tooltip(_: string): this;\n\n sourceMarker(): string;\n sourceMarker(_: string): this;\n sourceMarker_exists: () => boolean;\n targetMarker(): string;\n targetMarker(_: string): this;\n targetMarker_exists: () => boolean;\n strokeDasharray(): string;\n strokeDasharray(_: string): this;\n strokeDasharray_exists: () => boolean;\n strokeColor(): string;\n strokeColor(_: string): this;\n strokeColor_exists: () => boolean;\n\n text_shape_colorFill(): string;\n text_shape_colorFill(_: string): this;\n text_shape_colorStroke(): string;\n text_shape_colorStroke(_: string): this;\n text_text_colorFill(): string;\n text_text_colorFill(_: string): this;\n}\n\nEdge.prototype.publish(\"arcDepth\", 16, \"number\", \"Arc Depth\", null, { tags: [\"Basic\"] });\nEdge.prototype.publish(\"showControlPoints\", false, \"boolean\", \"Show/Hide Control Points\", null, { tags: [\"Basic\"] });\nEdge.prototype.publish(\"showArc\", true, \"boolean\", \"Show/Hide Arc\", null, { tags: [\"Basic\"] });\nEdge.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\n\nEdge.prototype.publish(\"sourceMarker\", \"circle\", \"set\", \"Source Marker\", [\"none\", \"circle\"], { optional: true });\nEdge.prototype.publish(\"targetMarker\", \"arrow\", \"set\", \"Source Marker\", [\"none\", \"arrow\", \"circle\"], { optional: true });\nEdge.prototype.publish(\"strokeDasharray\", null, \"string\", \"Stroke Dash Array\", null, { optional: true });\nEdge.prototype.publish(\"strokeColor\", null, \"html-color\", \"Stroke Color\", null, { optional: true });\nEdge.prototype.publish(\"textColor\", null, \"html-color\", \"Text Color\", null, { optional: true });\nEdge.prototype.publishProxy(\"text_shape_colorFill\", \"_textBox\", \"shape_colorFill\");\nEdge.prototype.publishProxy(\"text_shape_colorStroke\", \"_textBox\", \"shape_colorStroke\");\nEdge.prototype.publishProxy(\"text_text_colorFill\", \"_textBox\", \"text_colorFill\");\n","/* global window */\n\nvar graphlib;\n\nif (typeof require === \"function\") {\n try {\n graphlib = require(\"graphlib\");\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!graphlib) {\n graphlib = window.graphlib;\n}\n\nmodule.exports = graphlib;\n","/* global window */\n\nvar lodash;\n\nif (typeof require === \"function\") {\n try {\n lodash = {\n cloneDeep: require(\"lodash/cloneDeep\"),\n constant: require(\"lodash/constant\"),\n defaults: require(\"lodash/defaults\"),\n each: require(\"lodash/each\"),\n filter: require(\"lodash/filter\"),\n find: require(\"lodash/find\"),\n flatten: require(\"lodash/flatten\"),\n forEach: require(\"lodash/forEach\"),\n forIn: require(\"lodash/forIn\"),\n has: require(\"lodash/has\"),\n isUndefined: require(\"lodash/isUndefined\"),\n last: require(\"lodash/last\"),\n map: require(\"lodash/map\"),\n mapValues: require(\"lodash/mapValues\"),\n max: require(\"lodash/max\"),\n merge: require(\"lodash/merge\"),\n min: require(\"lodash/min\"),\n minBy: require(\"lodash/minBy\"),\n now: require(\"lodash/now\"),\n pick: require(\"lodash/pick\"),\n range: require(\"lodash/range\"),\n reduce: require(\"lodash/reduce\"),\n sortBy: require(\"lodash/sortBy\"),\n uniqueId: require(\"lodash/uniqueId\"),\n values: require(\"lodash/values\"),\n zipObject: require(\"lodash/zipObject\"),\n };\n } catch (e) {\n // continue regardless of error\n }\n}\n\nif (!lodash) {\n lodash = window._;\n}\n\nmodule.exports = lodash;\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nmodule.exports = List;\n\nfunction List() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n}\n\nList.prototype.dequeue = function() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n};\n\nList.prototype.enqueue = function(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n};\n\nList.prototype.toString = function() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return \"[\" + strs.join(\", \") + \"]\";\n};\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== \"_next\" && k !== \"_prev\") {\n return v;\n }\n}\n","var _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\nvar List = require(\"./data/list\");\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nmodule.exports = greedyFAS;\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(_.map(results, function(e) {\n return g.outEdges(e.v, e.w);\n }), true);\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function(edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function(edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry[\"in\"] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function(v) {\n fasGraph.setNode(v, { v: v, \"in\": 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function(e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);\n maxIn = Math.max(maxIn, fasGraph.node(e.w)[\"in\"] += weight);\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function(v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry[\"in\"]) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry[\"in\"] + zeroIdx].enqueue(entry);\n }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar greedyFAS = require(\"./greedy-fas\");\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\nfunction run(g) {\n var fas = (g.graph().acyclicer === \"greedy\"\n ? greedyFAS(g, weightFn(g))\n : dfsFAS(g));\n _.forEach(fas, function(e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId(\"rev\"));\n });\n\n function weightFn(g) {\n return function(e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (_.has(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function(e) {\n if (_.has(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function(e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n","/* eslint \"no-console\": off */\n\n\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n addDummyNode: addDummyNode,\n simplify: simplify,\n asNonCompoundGraph: asNonCompoundGraph,\n successorWeights: successorWeights,\n predecessorWeights: predecessorWeights,\n intersectRect: intersectRect,\n buildLayerMatrix: buildLayerMatrix,\n normalizeRanks: normalizeRanks,\n removeEmptyRanks: removeEmptyRanks,\n addBorderNode: addBorderNode,\n maxRank: maxRank,\n partition: partition,\n time: time,\n notime: notime\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen)\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function(v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function(e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function(e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var preds = {};\n _.forEach(g.inEdges(v), function(e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error(\"Not possible to find intersection inside of the rectangle\");\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = h * dx / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = w * dy / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function() { return []; });\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (_.has(node, \"rank\")) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n\n var layers = [];\n _.forEach(g.nodes(), function(v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function(vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function(v) { g.node(v).rank += delta; });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, \"border\", node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(_.map(g.nodes(), function(v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n }));\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function(value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + \" time: \" + (_.now() - start) + \"ms\");\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function(edge) { normalizeEdge(g, edge); });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0, height: 0,\n edgeLabel: edgeLabel, edgeObj: e,\n rank: vRank\n };\n dummy = util.addDummyNode(g, \"edge\", attrs, \"_d\");\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n attrs.dummy = \"edge-label\";\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === \"edge-label\") {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = {\n longestPath: longestPath,\n slack: slack\n};\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (_.has(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(_.map(g.outEdges(v), function(e) {\n return dfs(e.w) - g.edge(e).minlen;\n }));\n\n if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null) { // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar slack = require(\"./util\").slack;\n\nmodule.exports = feasibleTree;\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function(e) {\n var edgeV = e.v,\n w = (v === edgeV) ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function(e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function(v) {\n g.node(v).rank += delta;\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar feasibleTree = require(\"./feasible-tree\");\nvar slack = require(\"./util\").slack;\nvar initRank = require(\"./util\").longestPath;\nvar preorder = require(\"../graphlib\").alg.preorder;\nvar postorder = require(\"../graphlib\").alg.postorder;\nvar simplify = require(\"../util\").simplify;\n\nmodule.exports = networkSimplex;\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n initRank(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function(v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function(e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function(w) {\n if (!_.has(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function(e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function(edge) {\n return flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel);\n });\n\n return _.minBy(candidates, function(edge) { return slack(g, edge); });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; });\n var vs = preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function(v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","\"use strict\";\n\nvar rankUtil = require(\"./util\");\nvar longestPath = rankUtil.longestPath;\nvar feasibleTree = require(\"./feasible-tree\");\nvar networkSimplex = require(\"./network-simplex\");\n\nmodule.exports = rank;\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch(g.graph().ranker) {\n case \"network-simplex\": networkSimplexRanker(g); break;\n case \"tight-tree\": tightTreeRanker(g); break;\n case \"longest-path\": longestPathRanker(g); break;\n default: networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n","var _ = require(\"./lodash\");\n\nmodule.exports = parentDummyChains;\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca &&\n g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (pathIdx < path.length - 1 &&\n g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent &&\n (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = {\n run: run,\n cleanup: cleanup\n};\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, \"root\", {}, \"_root\");\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, \"_bt\");\n var bottom = util.addBorderNode(g, \"_bb\");\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function(child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function(v) { dfs(v, 1); });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(g.edges(), function(acc, e) {\n return acc + g.edge(e).weight;\n }, 0);\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\n\nmodule.exports = addBorderSegments;\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (_.has(node, \"minRank\")) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1;\n rank < maxRank;\n ++rank) {\n addBorderNode(g, \"borderLeft\", \"_bl\", v, node, rank);\n addBorderNode(g, \"borderRight\", \"_br\", v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, \"border\", label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\n\nmodule.exports = {\n adjust: adjust,\n undo: undo\n};\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === \"lr\" || rankDir === \"rl\") {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === \"bt\" || rankDir === \"rl\") {\n reverseY(g);\n }\n\n if (rankDir === \"lr\" || rankDir === \"rl\") {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); });\n _.forEach(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function(v) { reverseYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (_.has(edge, \"y\")) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function(v) { swapXYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (_.has(edge, \"x\")) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = initOrder;\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function(v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; }));\n var layers = _.map(_.range(maxRank + 1), function() { return []; });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = crossCount;\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i-1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(southLayer,\n _.map(southLayer, function (v, i) { return i; }));\n var southEntries = _.flatten(_.map(northLayer, function(v) {\n return _.sortBy(_.map(g.outEdges(v), function(e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }), \"pos\");\n }), true);\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function() { return 0; });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(southEntries.forEach(function(entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n while (index > 0) {\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n }));\n\n return cc;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = barycenter;\n\nfunction barycenter(g, movable) {\n return _.map(movable, function(v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(inV, function(acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + (edge.weight * nodeU.order),\n weight: acc.weight + edge.weight\n };\n }, { sum: 0, weight: 0 });\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight\n };\n }\n });\n}\n\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\n\nmodule.exports = resolveConflicts;\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function(entry, i) {\n var tmp = mappedEntries[entry.v] = {\n indegree: 0,\n \"in\": [],\n out: [],\n vs: [entry.v],\n i: i\n };\n if (!_.isUndefined(entry.barycenter)) {\n tmp.barycenter = entry.barycenter;\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function(e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function(entry) {\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function(uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (_.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function(wEntry) {\n wEntry[\"in\"].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry[\"in\"].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(_.filter(entries, function(entry) { return !entry.merged; }),\n function(entry) {\n return _.pick(entry, [\"vs\", \"i\", \"barycenter\", \"weight\"]);\n });\n\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n","var _ = require(\"../lodash\");\nvar util = require(\"../util\");\n\nmodule.exports = sort;\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function(entry) {\n return _.has(entry, \"barycenter\");\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs, true) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function(entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n","var _ = require(\"../lodash\");\nvar barycenter = require(\"./barycenter\");\nvar resolveConflicts = require(\"./resolve-conflicts\");\nvar sort = require(\"./sort\");\n\nmodule.exports = sortSubgraph;\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight: undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function(w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function(entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (_.has(subgraphResult, \"barycenter\")) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br], true);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!_.has(result, \"barycenter\")) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter = (result.barycenter * result.weight +\n blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function(entry) {\n entry.vs = _.flatten(entry.vs.map(function(v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n }), true);\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter = (target.barycenter * target.weight +\n other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n","var _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\n\nmodule.exports = buildLayerGraph;\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true }).setGraph({ root: root })\n .setDefaultNodeLabel(function(v) { return g.node(v); });\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function(e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (_.has(node, \"minRank\")) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank]\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId(\"_root\"))));\n return v;\n}\n","var _ = require(\"../lodash\");\n\nmodule.exports = addSubgraphConstraints;\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function(v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar initOrder = require(\"./init-order\");\nvar crossCount = require(\"./cross-count\");\nvar sortSubgraph = require(\"./sort-subgraph\");\nvar buildLayerGraph = require(\"./build-layer-graph\");\nvar addSubgraphConstraints = require(\"./add-subgraph-constraints\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\nmodule.exports = order;\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), \"inEdges\"),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), \"outEdges\");\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function(rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function(lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function(v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, i) {\n g.node(v).order = i;\n });\n });\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar Graph = require(\"../graphlib\").Graph;\nvar util = require(\"../util\");\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nmodule.exports = {\n positionX: positionX,\n findType1Conflicts: findType1Conflicts,\n findType2Conflicts: findType2Conflicts,\n addConflict: addConflict,\n hasConflict: hasConflict,\n verticalAlignment: verticalAlignment,\n horizontalCompaction: horizontalCompaction,\n alignCoordinates: alignCoordinates,\n findSmallestWidthAlignment: findSmallestWidthAlignment,\n balance: balance\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var\n // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function(v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i +1), function(scanNode) {\n _.forEach(g.predecessors(scanNode), function(u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) &&\n !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function(i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function(u) {\n var uNode = g.node(u);\n if (uNode.dummy &&\n (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function(v, southLookahead) {\n if (g.node(v).dummy === \"border\") {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function(u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function(layer) {\n var prevIdx = -1;\n _.forEach(layer, function(v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function(w) { return pos[w]; });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v &&\n prevIdx < pos[w] &&\n !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? \"borderLeft\" : \"borderRight\";\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function(acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function(v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function(layer) {\n var u;\n _.forEach(layer, function(v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach([\"u\", \"d\"], function(vert) {\n _.forEach([\"l\", \"r\"], function(horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === \"l\" ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function(x) { return x + delta; });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function(ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(\n findType1Conflicts(g, layering),\n findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach([\"u\", \"d\"], function(vert) {\n adjustedLayering = vert === \"u\" ? layering : _.values(layering).reverse();\n _.forEach([\"l\", \"r\"], function(horiz) {\n if (horiz === \"r\") {\n adjustedLayering = _.map(adjustedLayering, function(inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === \"u\" ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering,\n align.root, align.align, horiz === \"r\");\n if (horiz === \"r\") {\n xs = _.mapValues(xs, function(x) { return -x; });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function(g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (_.has(vLabel, \"labelpos\")) {\n switch (vLabel.labelpos.toLowerCase()) {\n case \"l\": delta = -vLabel.width / 2; break;\n case \"r\": delta = vLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (_.has(wLabel, \"labelpos\")) {\n switch (wLabel.labelpos.toLowerCase()) {\n case \"l\": delta = wLabel.width / 2; break;\n case \"r\": delta = -wLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n","\"use strict\";\n\nvar _ = require(\"../lodash\");\nvar util = require(\"../util\");\nvar positionX = require(\"./bk\").positionX;\n\nmodule.exports = position;\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forEach(positionX(g), function(x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function(layer) {\n var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; }));\n _.forEach(layer, function(v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n\n","\"use strict\";\n\nvar _ = require(\"./lodash\");\nvar acyclic = require(\"./acyclic\");\nvar normalize = require(\"./normalize\");\nvar rank = require(\"./rank\");\nvar normalizeRanks = require(\"./util\").normalizeRanks;\nvar parentDummyChains = require(\"./parent-dummy-chains\");\nvar removeEmptyRanks = require(\"./util\").removeEmptyRanks;\nvar nestingGraph = require(\"./nesting-graph\");\nvar addBorderSegments = require(\"./add-border-segments\");\nvar coordinateSystem = require(\"./coordinate-system\");\nvar order = require(\"./order\");\nvar position = require(\"./position\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = layout;\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time(\"layout\", function() {\n var layoutGraph = \n time(\" buildLayoutGraph\", function() { return buildLayoutGraph(g); });\n time(\" runLayout\", function() { runLayout(layoutGraph, time); });\n time(\" updateInputGraph\", function() { updateInputGraph(g, layoutGraph); });\n });\n}\n\nfunction runLayout(g, time) {\n time(\" makeSpaceForEdgeLabels\", function() { makeSpaceForEdgeLabels(g); });\n time(\" removeSelfEdges\", function() { removeSelfEdges(g); });\n time(\" acyclic\", function() { acyclic.run(g); });\n time(\" nestingGraph.run\", function() { nestingGraph.run(g); });\n time(\" rank\", function() { rank(util.asNonCompoundGraph(g)); });\n time(\" injectEdgeLabelProxies\", function() { injectEdgeLabelProxies(g); });\n time(\" removeEmptyRanks\", function() { removeEmptyRanks(g); });\n time(\" nestingGraph.cleanup\", function() { nestingGraph.cleanup(g); });\n time(\" normalizeRanks\", function() { normalizeRanks(g); });\n time(\" assignRankMinMax\", function() { assignRankMinMax(g); });\n time(\" removeEdgeLabelProxies\", function() { removeEdgeLabelProxies(g); });\n time(\" normalize.run\", function() { normalize.run(g); });\n time(\" parentDummyChains\", function() { parentDummyChains(g); });\n time(\" addBorderSegments\", function() { addBorderSegments(g); });\n time(\" order\", function() { order(g); });\n time(\" insertSelfEdges\", function() { insertSelfEdges(g); });\n time(\" adjustCoordinateSystem\", function() { coordinateSystem.adjust(g); });\n time(\" position\", function() { position(g); });\n time(\" positionSelfEdges\", function() { positionSelfEdges(g); });\n time(\" removeBorderNodes\", function() { removeBorderNodes(g); });\n time(\" normalize.undo\", function() { normalize.undo(g); });\n time(\" fixupEdgeLabelCoords\", function() { fixupEdgeLabelCoords(g); });\n time(\" undoCoordinateSystem\", function() { coordinateSystem.undo(g); });\n time(\" translateGraph\", function() { translateGraph(g); });\n time(\" assignNodeIntersects\", function() { assignNodeIntersects(g); });\n time(\" reversePoints\", function() { reversePointsForReversedEdges(g); });\n time(\" acyclic.undo\", function() { acyclic.undo(g); });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function(v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (_.has(layoutLabel, \"x\")) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = [\"nodesep\", \"edgesep\", \"ranksep\", \"marginx\", \"marginy\"];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: \"tb\" };\nvar graphAttrs = [\"acyclicer\", \"ranker\", \"rankdir\", \"align\"];\nvar nodeNumAttrs = [\"width\", \"height\"];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = [\"minlen\", \"weight\", \"width\", \"height\", \"labeloffset\"];\nvar edgeDefaults = {\n minlen: 1, weight: 1, width: 0, height: 0,\n labeloffset: 10, labelpos: \"r\"\n};\nvar edgeAttrs = [\"labelpos\"];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(_.merge({},\n graphDefaults,\n selectNumberAttrs(graph, graphNumAttrs),\n _.pick(graph, graphAttrs)));\n\n _.forEach(inputGraph.nodes(), function(v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(e, _.merge({},\n edgeDefaults,\n selectNumberAttrs(edge, edgeNumAttrs),\n _.pick(edge, edgeAttrs)));\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== \"c\") {\n if (graph.rankdir === \"TB\" || graph.rankdir === \"BT\") {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, \"edge-proxy\", label, \"_ep\");\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === \"edge-proxy\") {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function(v) { getExtremes(g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, \"x\")) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function(p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (_.has(edge, \"x\")) { edge.x -= minX; }\n if (_.has(edge, \"y\")) { edge.y -= minY; }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, \"x\")) {\n if (edge.labelpos === \"l\" || edge.labelpos === \"r\") {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case \"l\": edge.x -= edge.width / 2 + edge.labeloffset; break;\n case \"r\": edge.x += edge.width / 2 + edge.labeloffset; break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function(v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function(v) {\n if (g.node(v).dummy === \"border\") {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function(e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function(layer) {\n var orderShift = 0;\n _.forEach(layer, function(v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function(selfEdge) {\n util.addDummyNode(g, \"selfedge\", {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + (++orderShift),\n e: selfEdge.e,\n label: selfEdge.label\n }, \"_se\");\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === \"selfedge\") {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + 2 * dx / 3, y: y - dy },\n { x: x + 5 * dx / 6, y: y - dy },\n { x: x + dx , y: y },\n { x: x + 5 * dx / 6, y: y + dy },\n { x: x + 2 * dx / 3, y: y + dy }\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function(v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n","var _ = require(\"./lodash\");\nvar util = require(\"./util\");\nvar Graph = require(\"./graphlib\").Graph;\n\nmodule.exports = {\n debugOrdering: debugOrdering\n};\n\n/* istanbul ignore next */\nfunction debugOrdering(g) {\n var layerMatrix = util.buildLayerMatrix(g);\n\n var h = new Graph({ compound: true, multigraph: true }).setGraph({});\n\n _.forEach(g.nodes(), function(v) {\n h.setNode(v, { label: v });\n h.setParent(v, \"layer\" + g.node(v).rank);\n });\n\n _.forEach(g.edges(), function(e) {\n h.setEdge(e.v, e.w, {}, e.name);\n });\n\n _.forEach(layerMatrix, function(layer, i) {\n var layerV = \"layer\" + i;\n h.setNode(layerV, { rank: \"same\" });\n _.reduce(layer, function(u, v) {\n h.setEdge(u, v, { style: \"invis\" });\n return v;\n });\n });\n\n return h;\n}\n","module.exports = \"0.8.5\";\n","/*\nCopyright (c) 2012-2014 Chris Pettitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nmodule.exports = {\n graphlib: require(\"./lib/graphlib\"),\n\n layout: require(\"./lib/layout\"),\n debug: require(\"./lib/debug\"),\n util: {\n time: require(\"./lib/util\").time,\n notime: require(\"./lib/util\").notime\n },\n version: require(\"./lib/version\")\n};\n","import { Edge as GLEdge, GraphEdge, graphlib, Node } from \"dagre\";\nimport { Vertex } from \"./Vertex\";\n\ntype GLNode = Node<Vertex>;\n\nclass GraphlibGraph extends graphlib.Graph<Vertex> {\n}\n\ninterface GraphlibGraph {\n nodeEdges(outNodeName: string, inNodeName?: string): GLEdge[] | undefined;\n}\n\nexport interface GraphLabel {\n debugTiming?: boolean;\n}\n\nexport class GraphData {\n\n private _g: GraphlibGraph;\n\n constructor() {\n this._g = new GraphlibGraph({ multigraph: true, compound: true });\n this._g.setGraph({});\n this._g.setDefaultNodeLabel(function () { return { debug: \"error\" }; });\n this._g.setDefaultEdgeLabel(function () { return { debug: \"error\" }; });\n }\n\n parent(cn: string): string {\n return this._g.parent(cn);\n }\n\n private filterNodes(pred) {\n const filtered = [];\n this.eachNode(function (e) {\n if (pred(e)) {\n filtered.push(e);\n }\n });\n return filtered;\n }\n\n eachNode(callback) {\n this._g.nodes().forEach(function (item) {\n callback(item, this.node(item));\n }, this);\n }\n\n private filterEdges(pred): GLEdge[] {\n const filtered = [];\n this.eachEdge(function (e) {\n if (pred(e)) {\n filtered.push(e);\n }\n });\n return filtered;\n }\n\n eachEdge(callback) {\n this._g.edges().forEach(function (item) {\n callback(item, item.v, item.w, this.edge(item));\n }, this);\n }\n\n setData(subgraphs, vertices, edges, hierarchy, merge) {\n const retVal = {\n addedVertices: [],\n addedEdges: []\n };\n\n const allVertices = subgraphs.concat(vertices);\n\n // Add new items ---\n for (let i = 0; i < allVertices.length; ++i) {\n const entity = allVertices[i];\n if (!merge || !this._g.hasNode(entity._id)) {\n this._g.setNode(entity._id, entity);\n retVal.addedVertices.push(entity);\n }\n }\n for (let i = 0; i < edges.length; ++i) {\n const edge = edges[i];\n if (!merge || !this._g.hasEdge(edge._id)) {\n if (edge._sourceVertex && edge._targetVertex) {\n this._g.setEdge(edge._sourceVertex._id, edge._targetVertex._id, edge, edge._id);\n retVal.addedEdges.push(edge);\n } else {\n console.log(\"Bad edge definition\");\n }\n }\n }\n if (hierarchy) {\n for (let i = 0; i < hierarchy.length; ++i) {\n this._g.setParent(hierarchy[i].child._id, hierarchy[i].parent._id);\n }\n }\n\n // Remove old items ---\n if (merge) {\n const edgeIDs = edges.map(function (item) {\n return item._id;\n });\n this\n .filterEdges(item => edgeIDs.indexOf(item.name) < 0)\n .forEach(item => this._g.removeEdge(item.v, item.w))\n ;\n\n const vertexIDs = allVertices.map(function (item) {\n return item._id;\n });\n this\n .filterNodes(item => vertexIDs.indexOf(item) < 0)\n .forEach(item => this._g.removeNode(item))\n ;\n }\n return retVal;\n }\n\n node(id: string): GLNode {\n return this._g.node(id);\n }\n\n nodeCount(): number {\n return this._g.nodeCount();\n }\n\n nodes(): GLNode[] {\n return this._g.nodes().map(n => this._g.node(n));\n }\n\n nodeEdges(id: string): GLEdge[] {\n return this._g.nodeEdges(id);\n }\n\n edge(glEdge: GLEdge): GraphEdge {\n return this._g.edge(glEdge);\n }\n\n edges(): GraphEdge[] {\n return this._g.edges().map(e => this._g.edge(e));\n }\n\n neighbors(id: string) {\n return this._g.neighbors(id).map(n => this._g.node(n));\n }\n\n singleNeighbors(id: string) {\n return this._g.neighbors(id)\n .filter((n: any) => this._g.neighbors(n).length === 1)\n .map(item => this._g.node(item as any));\n }\n\n gatherShortestPath(pathObj, targetID) {\n const retVal = [];\n let walkID = targetID;\n let pathItem = pathObj[walkID];\n while (pathItem) {\n if (pathItem.distance < Infinity && pathItem.predecessor) {\n const anEdge = this._g.nodeEdges(walkID, pathItem.predecessor)[0];\n retVal.push(this._g.edge(anEdge as any));\n }\n walkID = pathItem.predecessor;\n pathItem = pathObj[walkID];\n }\n return retVal;\n }\n\n shortestPath(sourceID: string, targetID: string) {\n return this.gatherShortestPath(graphlib.alg.dijkstra(this._g, sourceID), targetID);\n }\n\n undirectedShortestPath(sourceID: string, targetID: string) {\n return this.gatherShortestPath(graphlib.alg.dijkstra(this._g, sourceID, null, v => this._g.nodeEdges(v) as any), targetID);\n }\n\n getJSON() {\n const graphObj = graphlib.json.write(this._g);\n return JSON.stringify(graphObj, function (key, value) {\n if (key === \"value\") {\n if (value._text && value._text._text) {\n return value._text._text;\n }\n return value._id;\n }\n return value;\n }, \" \");\n }\n}\n","export default function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\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(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","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {map} from \"d3-collection\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = map(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\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() {\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","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 {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","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\nimport {x, y} from \"./simulation\";\n\nexport default function() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import { forceCenter as d3ForceCenter, forceLink as d3ForceLink, forceManyBody as d3ForceManyBody, forceSimulation as d3ForceSimulation } from \"d3-force\";\nimport { GraphLabel, graphlib, layout } from \"dagre\";\nimport { GraphData } from \"./GraphData\";\n\nexport function Circle(graphData: GraphData, width?, height?, radius?) {\n const context = this;\n this.pos = {};\n\n // Initial Positions ---\n const padding = 0;\n radius = radius || (width < height ? width - padding : height - padding) / 2;\n const order = graphData.nodeCount();\n let currStep = -Math.PI / 2;\n const step = 2 * Math.PI / order;\n graphData.eachNode(function (u, value) {\n const size = value.getBBox();\n const maxSize = 0; // Math.max(size.width, size.height);\n context.pos[u] = {\n x: value.fixed ? value.x : width / 2 + Math.cos(currStep) * (radius - maxSize),\n y: value.fixed ? value.y : height / 2 + Math.sin(currStep) * (radius - maxSize),\n width: size.width,\n height: size.height\n };\n currStep += step;\n });\n}\nCircle.prototype.nodePos = function (u) {\n return this.pos[u];\n};\nCircle.prototype.edgePoints = function (_e) {\n return [];\n};\n\nexport function None(graphData: GraphData, _width, _height, _radius) {\n const context = this;\n this.pos = {};\n\n graphData.eachNode(function (u, value) {\n context.pos[u] = {\n x: value.x,\n y: value.y,\n width: value.width,\n height: value.height\n };\n });\n}\nNone.prototype.nodePos = function (u) {\n return this.pos[u];\n};\nNone.prototype.edgePoints = function (_e) {\n return [];\n};\n\nexport function ForceDirected(graphData: GraphData, width, height, options) {\n options = options || {};\n const context = this;\n this.pos = {};\n\n this.vertices = [];\n this.vertexMap = {};\n graphData.eachNode(function (u) {\n const vertex = graphData.node(u);\n const size = vertex.getBBox();\n const newItem = {\n id: u,\n x: vertex.pos().x,\n y: vertex.pos().y,\n width: size.width,\n height: size.height,\n value: vertex\n };\n context.vertices.push(newItem);\n context.vertexMap[u] = newItem;\n });\n this.edges = [];\n graphData.eachEdge(function (_e, s, t) {\n context.edges.push({\n source: s,\n target: t\n });\n });\n const forceLink = d3ForceLink()\n .id(function (d: any) {\n return d.id;\n })\n .distance(options.linkDistance)\n .strength(options.linkStrength)\n ;\n const forceManyBody = d3ForceManyBody()\n .strength(function (d: any) {\n const cs = d.value.getBBox();\n return options.charge * Math.max(cs.width, cs.height);\n })\n ;\n this.force = d3ForceSimulation()\n .force(\"link\", forceLink)\n .force(\"charge\", forceManyBody)\n .force(\"center\", d3ForceCenter(width / 2, height / 2))\n .velocityDecay(options.oneShot ? 0.1 : options.friction)\n .nodes(this.vertices)\n ;\n forceLink\n .links(this.edges)\n ;\n\n if (options.oneShot) {\n this.force.restart();\n let total = graphData.nodeCount();\n total = Math.min(total * total, 500);\n for (let i = 0; i < total; ++i) {\n this.force.tick();\n }\n this.force.stop();\n }\n}\nForceDirected.prototype.nodePos = function (u) {\n return this.vertexMap[u];\n};\nForceDirected.prototype.edgePoints = function (_e) {\n return [];\n};\n\nexport function Hierarchy(graphData: GraphData, _width, _height, options) {\n const digraph = new graphlib.Graph({ multigraph: true, compound: true })\n .setGraph(options)\n .setDefaultNodeLabel(function () { return {}; })\n .setDefaultEdgeLabel(function () { return {}; })\n ;\n graphData.eachNode(function (u) {\n const value = graphData.node(u);\n const clientSize = value.getBBox();\n digraph.setNode(u, {\n width: clientSize.width,\n height: clientSize.height\n });\n });\n graphData.eachEdge(function (e, s, t) {\n const value = graphData.edge(e);\n digraph.setEdge(s, t, {\n weight: value.weight()\n }, value._id);\n if (!options.digraph) {\n digraph.setEdge(t, s, {\n weight: value.weight()\n }, value._id);\n }\n });\n graphData.eachNode(function (u) {\n digraph.setParent(u, graphData.parent(u));\n });\n this.dagreLayout = layout(digraph, { debugTiming: false } as GraphLabel);\n const deltaX = -digraph.graph().width / 2;\n const deltaY = -digraph.graph().height / 2;\n digraph.nodes().forEach(function (u) {\n const value = digraph.node(u);\n value.x += deltaX + _width / 2;\n value.y += deltaY + _height / 2;\n });\n digraph.edges().forEach(function (e) {\n const value = digraph.edge(e);\n for (let i = 0; i < value.points.length; ++i) {\n value.points[i].x += deltaX + _width / 2;\n value.points[i].y += deltaY + _height / 2;\n }\n });\n this.digraph = digraph;\n}\nHierarchy.prototype.nodePos = function (u) {\n return this.digraph.node(u);\n};\nHierarchy.prototype.edgePoints = function (edge) {\n return this.digraph.edge(edge._sourceVertex.id(), edge._targetVertex.id(), edge._id).points;\n};\n","import { Icon, Palette, SVGWidget, Text } from \"@hpcc-js/common\";\nimport \"d3-transition\";\n\nimport \"../src/Subgraph.css\";\n\nconst TITLE_SIZE = 14;\nconst MINMAX_SIZE = 18;\n\nexport type SubgraphMinState = \"normal\" | \"partial\";\n\nexport class Subgraph extends SVGWidget {\n protected _border;\n protected _textWidget = new Text()\n .anchor(\"start\")\n .fontSize(TITLE_SIZE)\n ;\n protected _buttonMin = new Icon()\n .diameter(MINMAX_SIZE)\n .shape_colorStroke(\"#1f77b4\")\n .shape_colorFill(\"#dcf1ff\")\n .image_colorFill(\"#1f77b4\")\n .on(\"click\", () => {\n this.minClick();\n }, true)\n .on(\"dblclick\", () => {\n }, true)\n ;\n\n protected _minState: SubgraphMinState = \"normal\";\n\n constructor() {\n super();\n }\n\n minState(): SubgraphMinState;\n minState(_: SubgraphMinState): this;\n minState(_?: SubgraphMinState): SubgraphMinState | this {\n if (!arguments.length) return this._minState;\n this._minState = _;\n return this;\n }\n\n calcIcon() {\n switch (this._minState) {\n case \"normal\":\n return \"\\uf2d2\";\n case \"partial\":\n return \"\\uf2d0\";\n }\n }\n\n getBBox(refresh = false, round = false) {\n const width = this.width();\n const height = this.height();\n return {\n x: -width / 2,\n y: -height / 2 - TITLE_SIZE,\n width,\n height\n };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._border = element.append(\"rect\").attr(\"class\", \"border\");\n this._textWidget.target(domNode);\n this._buttonMin.target(domNode);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const bbox = this.getBBox();\n\n this._border\n .attr(\"x\", bbox.x)\n .attr(\"y\", bbox.y)\n .attr(\"width\", bbox.width)\n .attr(\"height\", bbox.height)\n .style(\"fill\", this.border_colorFill())\n .style(\"stroke\", this.border_colorStroke())\n ;\n\n if (this.border_colorFill_exists() && !this.title_colorFill_exists()) {\n this.title_colorFill(Palette.textColor(this.border_colorFill()));\n }\n this._textWidget\n .pos({ x: bbox.x + 4, y: bbox.y + TITLE_SIZE })\n .width(this.width() - 8)\n .text(this.showTitle() ? this.title() : \"\")\n .render()\n ;\n\n this._buttonMin\n .visible(this.showMinMax())\n .pos({ x: bbox.x + bbox.width - (MINMAX_SIZE / 2 + 4), y: bbox.y + (MINMAX_SIZE / 2 + 4) })\n .faChar(this.calcIcon())\n .render()\n ;\n }\n\n exit(domNode, element) {\n this._buttonMin.target(null);\n this._textWidget.target(null);\n this._border.remove();\n super.exit(domNode, element);\n }\n\n intersection(pointA, pointB) {\n const hits = [];\n let nearest = null;\n hits.forEach(function (item) {\n if (nearest === null || nearest.d > item.d) {\n nearest = item;\n }\n });\n return nearest && nearest.i ? nearest.i : null;\n }\n\n click(d) {\n console.log(\"Clicked: \" + d.id);\n }\n\n minClick() {\n switch (this._minState) {\n case \"normal\":\n this._minState = \"partial\";\n break;\n case \"partial\":\n this._minState = \"normal\";\n break;\n }\n this._buttonMin\n .faChar(this.calcIcon()) // max:f2d0, restore: f2d2, min: f2d1\n .render()\n ;\n }\n}\nSubgraph.prototype._class += \" graph_Subgraph\";\n\nexport interface Subgraph {\n border_colorStroke(): string;\n border_colorStroke(_: string): this;\n border_colorFill(): string;\n border_colorFill(_: string): this;\n border_colorFill_exists: () => boolean;\n showTitle(): boolean;\n showTitle(_: boolean): this;\n title(): string;\n title(_: string): this;\n titleFontSize(): string;\n titleFontSize(_: string): this;\n title_colorFill(): string;\n title_colorFill(_: string): this;\n title_colorFill_exists: () => boolean;\n showMinMax(): boolean;\n showMinMax(_: boolean): this;\n}\n\nSubgraph.prototype.publish(\"border_colorStroke\", null, \"html-color\", \"Stroke Color\", null, { optional: true });\nSubgraph.prototype.publish(\"border_colorFill\", null, \"html-color\", \"Fill Color\", null, { optional: true });\nSubgraph.prototype.publish(\"showTitle\", true, \"boolean\", \"Show Title\", null, { tags: [\"Basic\"] });\nSubgraph.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Basic\"] });\nSubgraph.prototype.publishProxy(\"titleFontSize\", \"_textWidget\", \"fontSize\");\nSubgraph.prototype.publishProxy(\"title_colorFill\", \"_textWidget\", \"colorFill\");\nSubgraph.prototype.publish(\"showMinMax\", false, \"boolean\", \"Show Min/Max\", null, { tags: [\"Basic\"] });\n","import { Icon, SVGWidget, TextBox } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Vertex.css\";\n\nexport interface IAnnotation {\n faChar?: string;\n imageUrl?: string;\n tooltip?: string;\n diameter?: number;\n paddingPercent?: number;\n shape_colorFill?: string;\n shape_colorStroke?: string;\n image_colorFill?: string;\n fontFamily?: string;\n}\n\nexport class Vertex extends SVGWidget {\n protected _icon: Icon;\n protected _textBox: TextBox;\n protected _annotationWidgets: object;\n protected _graphID;\n\n constructor() {\n super();\n\n this._icon = new Icon();\n this._textBox = new TextBox();\n this._annotationWidgets = {};\n this.pos({ x: undefined, y: undefined });\n }\n\n getIconBBox() {\n const iconBBox = this._icon.getBBox(true);\n const textBoxBBox = this._textBox.getBBox(true);\n switch (this.iconAnchor()) {\n case \"start\":\n return {\n x: -(textBoxBBox.width / 2) + (iconBBox.width / 3),\n y: -(textBoxBBox.height / 2) - (iconBBox.height / 3),\n width: iconBBox.width,\n height: iconBBox.height\n };\n case \"middle\":\n return {\n x: 0,\n y: -(textBoxBBox.height / 2) - (iconBBox.height / 3),\n width: iconBBox.width,\n height: iconBBox.height\n };\n case \"end\":\n return {\n x: (textBoxBBox.width / 2) - (iconBBox.width / 3),\n y: -(textBoxBBox.height / 2) - (iconBBox.height / 3),\n width: iconBBox.width,\n height: iconBBox.height\n };\n case \"left\":\n return {\n x: -(textBoxBBox.width / 2) - iconBBox.width / 2,\n y: 0,\n width: iconBBox.width,\n height: iconBBox.height\n };\n default:\n }\n return {\n x: 0,\n y: 0,\n width: iconBBox.width,\n height: iconBBox.height\n };\n }\n\n getBBox(refresh = false, round = false) {\n const iconBBox = this.getIconBBox();\n const textBoxBBox = this._textBox.getBBox(true);\n const x = Math.min(iconBBox.x, textBoxBBox.x);\n const y = Math.min(iconBBox.y, textBoxBBox.y);\n const right = Math.max(iconBBox.x + iconBBox.width, textBoxBBox.x + textBoxBBox.width);\n const bottom = Math.max(iconBBox.y + iconBBox.height, textBoxBBox.y + textBoxBBox.height);\n return {\n x,\n y,\n width: right - x,\n height: bottom - y\n };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n delete this._prevHash;\n this._icon\n .target(domNode)\n ;\n this._textBox\n .target(domNode)\n ;\n element\n .on(\"mouseover\", d => this.mouseover(d.data()))\n .on(\"mouseout\", d => this.mouseout(d.data()))\n ;\n }\n\n _prevHash;\n update(domNode, element) {\n super.update(domNode, element);\n const hash = this.hashSum();\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n element.classed(\"centroid\", this.centroid());\n element.style(\"filter\", this.centroid() ? \"url(#\" + this._graphID + \"_glow)\" : null);\n this._icon\n .tooltip(this.iconTooltip() ? this.iconTooltip() : this.tooltip())\n .render()\n ;\n this._textBox\n .tooltip(this.tooltip())\n .render()\n ;\n\n const iconBBox = this.getIconBBox();\n this._icon.move(iconBBox);\n\n const context = this;\n const annotations = element.selectAll(\".annotation\").data(this.annotationIcons());\n const annotationsEnter = annotations.enter().append(\"g\")\n .attr(\"class\", \"annotation\")\n .each(function (_d, idx) {\n context._annotationWidgets[idx] = new Icon()\n .target(this)\n .shape(\"square\")\n ;\n })\n ;\n const bbox = this._textBox.getBBox(true);\n let xOffset = bbox.width / 2;\n const yOffset = bbox.height / 2;\n annotationsEnter.merge(annotations)\n .each(function (d, idx) {\n const annotationWidget = context._annotationWidgets[idx];\n annotationWidget\n .diameter(context.annotationDiameter())\n .shape_colorFill(context.textbox_shape_colorFill())\n .shape_colorStroke(context.textbox_shape_colorStroke())\n ;\n for (const key in d) {\n if (annotationWidget[key]) {\n annotationWidget[key](d[key]);\n } else if (globalThis.__hpcc_debug) {\n console.log(\"Invalid annotation property: \" + key);\n }\n }\n annotationWidget.render();\n\n const aBBox = annotationWidget.getBBox(true);\n annotationWidget\n .move({\n x: xOffset - aBBox.width / 2 + 4,\n y: yOffset + aBBox.height / 2 - 4\n })\n ;\n xOffset -= aBBox.width + context.annotationSpacing();\n })\n ;\n annotations.exit()\n .each(function (_d, idx) {\n const element2 = d3Select(this);\n context._annotationWidgets[idx].target(null);\n delete context._annotationWidgets[idx];\n element2.remove();\n })\n ;\n }\n }\n\n exit(domNode, element) {\n for (const key in this._annotationWidgets) {\n this._annotationWidgets[key].target(null);\n }\n this._icon.target(null);\n this._textBox.target(null);\n super.exit(domNode, element);\n }\n\n // Methods ---\n contains(point): boolean {\n return this._icon.contains(point) || this._textBox.contains(point);\n }\n\n intersection(pointA, pointB) {\n const i1 = this._icon.intersection(pointA, pointB);\n const i2 = this._textBox.intersection(pointA, pointB);\n if (i1 && i2) {\n return this.distance(i1, pointB) < this.distance(i2, pointB) ? i1 : i2;\n }\n return i1 || i2;\n }\n\n // Events ---\n mouseover(d) {\n }\n\n mouseout(d) {\n }\n}\nVertex.prototype._class += \" graph_Vertex\";\n\nexport interface Vertex {\n faChar(): string;\n faChar(_: string): this;\n imageUrl(): string;\n imageUrl(_: string): this;\n icon_diameter(): number;\n icon_diameter(_: number): this;\n icon_paddingPercent(): number;\n icon_paddingPercent(_: number): this;\n icon_shape_colorFill(): string;\n icon_shape_colorFill(_: string): this;\n icon_shape_colorStroke(): string;\n icon_shape_colorStroke(_: string): this;\n icon_image_colorFill(): string;\n icon_image_colorFill(_: string): this;\n icon_fontFamily(): string;\n icon_fontFamily(_: string): this;\n\n centroid(): boolean;\n centroid(_: boolean): this;\n\n text(): string;\n text(_: string): this;\n anchor(): string;\n anchor(_: string): this;\n textbox_shape_colorStroke(): string;\n textbox_shape_colorStroke(_: string): this;\n textbox_shape_colorFill(): string;\n textbox_shape_colorFill(_: string): this;\n textbox_text_colorFill(): string;\n textbox_text_colorFill(_: string): this;\n\n iconAnchor(): \"\" | \"start\" | \"middle\" | \"end\" | \"left\";\n iconAnchor(_: \"\" | \"start\" | \"middle\" | \"end\" | \"left\"): this;\n iconTooltip(): string;\n iconTooltip(_: string): this;\n\n tooltip(): string;\n tooltip(_: string): this;\n\n annotationDiameter(): number;\n annotationDiameter(_: number): this;\n annotationSpacing(): number;\n annotationSpacing(_: number): this;\n annotationIcons(): IAnnotation[];\n annotationIcons(_: IAnnotation[]): this;\n}\n\nVertex.prototype.publishProxy(\"faChar\", \"_icon\");\nVertex.prototype.publishProxy(\"imageUrl\", \"_icon\");\nVertex.prototype.publishProxy(\"icon_diameter\", \"_icon\", \"diameter\");\nVertex.prototype.publishProxy(\"icon_paddingPercent\", \"_icon\", \"paddingPercent\");\nVertex.prototype.publishProxy(\"icon_shape_colorFill\", \"_icon\", \"shape_colorFill\");\nVertex.prototype.publishProxy(\"icon_shape_colorStroke\", \"_icon\", \"shape_colorStroke\");\nVertex.prototype.publishProxy(\"icon_image_colorFill\", \"_icon\", \"image_colorFill\");\nVertex.prototype.publishProxy(\"icon_fontFamily\", \"_icon\", \"fontFamily\");\n\nVertex.prototype.publish(\"centroid\", false, \"boolean\", \"Centroid Vertex\");\n\nVertex.prototype.publishProxy(\"text\", \"_textBox\");\nVertex.prototype.publishProxy(\"anchor\", \"_textBox\");\nVertex.prototype.publishProxy(\"textbox_shape_colorStroke\", \"_textBox\", \"shape_colorStroke\");\nVertex.prototype.publishProxy(\"textbox_shape_colorFill\", \"_textBox\", \"shape_colorFill\");\nVertex.prototype.publishProxy(\"textbox_text_colorFill\", \"_textBox\", \"text_colorFill\");\nVertex.prototype.publishProxy(\"textbox_text_fontFamily\", \"_textBox\", \"text_fontFamily\");\n\nVertex.prototype.publish(\"iconAnchor\", \"start\", \"set\", \"Horizontal anchor position of icon\", [\"\", \"start\", \"middle\", \"end\", \"left\"], { tags: [\"Basic\"] });\nVertex.prototype.publish(\"iconTooltip\", \"\", \"string\", \"iconTooltip\", null, { tags: [\"Private\"] });\n\nVertex.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\n\nVertex.prototype.publish(\"annotationDiameter\", 14, \"number\", \"Annotation Diameter\", null, { tags: [\"Private\"] });\nVertex.prototype.publish(\"annotationSpacing\", 3, \"number\", \"Annotation Spacing\", null, { tags: [\"Private\"] });\nVertex.prototype.publish(\"annotationIcons\", [], \"array\", \"Annotations\", null, { tags: [\"Private\"] });\n","import { IGraph, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, drag as d3Drag, ISize, Platform, select as d3Select, Spacer, SVGGlowFilter, SVGZoomWidget, ToggleButton, Utility, Widget } from \"@hpcc-js/common\";\n\nimport \"d3-transition\";\nimport { Edge } from \"./Edge\";\nimport { GraphData } from \"./GraphData\";\nimport * as GraphLayouts from \"./GraphLayouts\";\nimport { Subgraph } from \"./Subgraph\";\nimport { Vertex } from \"./Vertex\";\n\nimport \"../src/Graph.css\";\n\nexport interface Lineage {\n parent: Widget;\n child: Widget;\n}\nexport interface IGraphData {\n subgraphs?: Widget[];\n vertices: Widget[];\n edges: Edge[];\n hierarchy?: Lineage[];\n}\nexport type GraphLayoutType = \"Hierarchy\" | \"DOT\" | \"ForceDirected\" | \"ForceDirected2\" | \"Neato\" | \"FDP\" | \"Circle\" | \"TwoPI\" | \"Circo\" | \"None\";\n\nexport class Graph extends SVGZoomWidget {\n static Subgraph = Subgraph;\n static Vertex = Vertex;\n static Edge = Edge;\n\n private _toggleHierarchy = new ToggleButton().faChar(\"fa-sitemap\").tooltip(\"Hierarchy\").on(\"click\", () => this.layoutClick(\"Hierarchy\"));\n private _toggleForceDirected = new ToggleButton().faChar(\"fa-expand\").tooltip(\"Force Directed\").on(\"click\", () => this.layoutClick(\"ForceDirected\"));\n private _toggleForceDirected2 = new ToggleButton().faChar(\"fa-arrows\").tooltip(\"Spring\").on(\"click\", () => this.layoutClick(\"ForceDirected2\"));\n private _toggleCircle = new ToggleButton().faChar(\"fa-circle-o\").tooltip(\"Circle\").on(\"click\", () => this.layoutClick(\"Circle\"));\n\n private _graphData: GraphData;\n protected highlight;\n protected _selection;\n protected _dragging;\n protected forceLayout;\n protected _d3Drag;\n protected defs;\n protected _centroidFilter: SVGGlowFilter;\n protected svgFragment;\n protected svg;\n protected svgC;\n protected svgE;\n protected svgV;\n\n constructor() {\n super();\n IGraph.call(this);\n ITooltip.call(this);\n this.tooltipHTML(function (d: any) {\n let content;\n if (d instanceof Subgraph) {\n content = d.title().replace(/\\n/g, \"<br>\");\n } else if (d instanceof Vertex || d instanceof Edge) {\n content = d.text().replace(/\\n/g, \"<br>\");\n }\n if (content) {\n return `<p style=\"text-align:center\">${content}</p>`;\n }\n return null;\n });\n\n this._drawStartPos = \"origin\";\n\n const buttons: Widget[] = [\n this._toggleHierarchy,\n this._toggleForceDirected,\n this._toggleForceDirected2,\n this._toggleCircle,\n new Spacer()];\n this._iconBar.buttons(buttons.concat(this._iconBar.buttons()));\n\n this._graphData = new GraphData();\n this.highlight = {\n zoom: 1.1,\n opacity: 0.33,\n edge: \"1.25px\"\n };\n this._selection = new Utility.Selection(this);\n this.zoomToFitLimit(1);\n }\n\n iconBarButtons(): Widget[] {\n return this._iconBar.buttons();\n }\n\n layoutClick(layout: GraphLayoutType) {\n this.layout(layout);\n if (layout !== \"ForceDirected2\") this.applyScaleOnLayout(true);\n this\n .layout(layout)\n .render(w => {\n this.applyScaleOnLayout(false);\n });\n }\n\n // Properties ---\n getOffsetPos() {\n return { x: 0, y: 0 };\n }\n\n size(): ISize;\n size(_): this;\n size(_?): ISize | this {\n const retVal = super.size.apply(this, arguments);\n return retVal;\n }\n\n clear() {\n this.data({ subgraphs: [], vertices: [], edges: [], hierarchy: [] }, false);\n }\n\n _dataHash = 0;\n data(): IGraphData;\n data(_: IGraphData, merge?: boolean): this;\n data(_?: IGraphData, merge?: boolean): IGraphData | this {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length) {\n if (!merge) {\n this._graphData = new GraphData();\n this._renderCount = 0;\n }\n const data = this._graphData.setData(_.subgraphs || [], _.vertices || [], _.edges || [], _.hierarchy || [], merge || false);\n if (data.addedVertices.length) {\n this._dataHash++;\n }\n\n const context = this;\n data.addedVertices.forEach(function (item) {\n item._graphID = context._id;\n });\n data.addedEdges.forEach(function (item) {\n item._graphID = context._id;\n });\n\n // Recalculate edge arcs ---\n const dupMap = {};\n this._graphData.edges().forEach(function (item) {\n if (!dupMap[item._sourceVertex._id]) {\n dupMap[item._sourceVertex._id] = {};\n }\n if (!dupMap[item._sourceVertex._id][item._targetVertex._id]) {\n dupMap[item._sourceVertex._id][item._targetVertex._id] = 0;\n }\n const dupEdgeCount = ++dupMap[item._sourceVertex._id][item._targetVertex._id];\n item.arcDepth(16 * dupEdgeCount);\n });\n }\n return retVal;\n }\n\n graphData(): any {\n return this._graphData;\n }\n\n selection(_: Widget[]): this;\n selection(): Widget[];\n selection(_?: Widget[]): Widget[] | this {\n if (!arguments.length) return this._selection.get();\n this._selection.set(_);\n return this;\n }\n\n private _linkcolor: string;\n linkcolor_default(): string;\n linkcolor_default(_: string): this;\n linkcolor_default(_?: string): string | this {\n if (!arguments.length) return this._linkcolor;\n this._linkcolor = _;\n return this;\n }\n\n private _linktooltip: string;\n linktooltip_default(): string;\n linktooltip_default(_: string): this;\n linktooltip_default(_?: string): string | this {\n if (!arguments.length) return this._linktooltip;\n this._linktooltip = _;\n return this;\n }\n\n // Drag ---\n private _neighborOffsets: Array<{ neighbor: Vertex, offsetX: number, offsetY: number }> = [];\n dragstart(d) {\n if (this.allowDragging()) {\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n\n d.__drag_dx = event.x - d.x();\n d.__drag_dy = event.y - d.y();\n this._dragging = true;\n if (this.forceLayout) {\n if (!event.active) this.forceLayout.force.alphaTarget(0.3).restart();\n const forceNode = this.forceLayout.vertexMap[d.id()];\n forceNode.fixed = true;\n forceNode.fx = forceNode.x;\n forceNode.fy = forceNode.y;\n }\n\n this._neighborOffsets = [];\n if (this.dragSingleNeighbors()) {\n this._neighborOffsets = this._graphData.singleNeighbors(d.id()).map((neighbor: any) => {\n d3Select(neighbor.target()).raise();\n return {\n neighbor,\n offsetX: d.x() - neighbor.x(),\n offsetY: d.y() - neighbor.y()\n };\n });\n }\n\n // Safe Raise - does not interfere with current click event ---\n const target = d.target();\n let nextSibling = target.nextSibling;\n while (nextSibling) {\n target.parentNode.insertBefore(nextSibling, target);\n nextSibling = target.nextSibling;\n }\n\n if (Platform.svgMarkerGlitch) {\n this._graphData.nodeEdges(d.id()).forEach(glEdge => {\n const edge = this._graphData.edge(glEdge);\n this._pushMarkers(edge.element());\n });\n }\n }\n }\n\n dragging(d) {\n if (this.allowDragging()) {\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n d.move({ x: event.x - d.__drag_dx, y: event.y - d.__drag_dy });\n if (this.forceLayout) {\n const forceNode = this.forceLayout.vertexMap[d.id()];\n forceNode.fixed = true;\n forceNode.fx = event.x - d.__drag_dx;\n forceNode.fy = event.y - d.__drag_dy;\n }\n\n // Drag singleton child nodes\n this._neighborOffsets.forEach(neighborOffset => {\n const neighborX = event.x - d.__drag_dx - neighborOffset.offsetX;\n const neighborY = event.y - d.__drag_dy - neighborOffset.offsetY;\n if (this.forceLayout) {\n const forceNode = this.forceLayout.vertexMap[neighborOffset.neighbor.id()];\n forceNode.fixed = true;\n forceNode.fx = neighborX;\n forceNode.fy = neighborY;\n }\n neighborOffset.neighbor.move({ x: neighborX, y: neighborY });\n });\n\n this.refreshIncidentEdges(d, true);\n }\n }\n\n dragend(d) {\n if (this.allowDragging()) {\n d3Event().sourceEvent.stopPropagation();\n this._dragging = false;\n if (this.snapToGrid()) {\n const snapLoc = d.calcSnap(this.snapToGrid());\n d.move(snapLoc[0]);\n this.refreshIncidentEdges(d, true);\n }\n if (this.forceLayout) {\n const forceNode = this.forceLayout.vertexMap[d.id()];\n forceNode.fixed = false;\n forceNode.fx = null;\n forceNode.fy = null;\n\n this._neighborOffsets.forEach(neighborOffset => {\n const forceNode = this.forceLayout.vertexMap[neighborOffset.neighbor.id()];\n forceNode.fixed = false;\n forceNode.fx = null;\n forceNode.fy = null;\n });\n }\n this._neighborOffsets = [];\n\n if (Platform.svgMarkerGlitch) {\n this._graphData.nodeEdges(d.id()).forEach(function (id) {\n const edge = this._graphData.edge(id);\n this._popMarkers(edge.element());\n });\n }\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._zoomGrab.on(\"click.clear\", () => {\n if (this.selectionClearOnBackgroundClick()) {\n this._selection.clear();\n }\n });\n\n this._d3Drag = d3Drag()\n // .origin(function (d) {\n // return d.pos();\n // })\n .on(\"start\", d => this.dragstart(d))\n .on(\"end\", d => this.dragend(d))\n .on(\"drag\", d => this.dragging(d))\n ;\n // SVG ---\n this.defs = this._renderElement.append(\"defs\");\n this.addMarkers();\n this._centroidFilter = new SVGGlowFilter(this.defs, this._id + \"_glow\");\n\n // element.call(this.zoom);\n this.svg = this._renderElement.append(\"svg:g\");\n // this._svgBrush = this.svg.append(\"g\").attr(\"class\", \"selectionBrush\").call(this.brush);\n // this._svgBrush.select(\".background\").style(\"cursor\", null);\n // context._svgBrush.call(context.brush.clear());\n this.svgC = this.svg.append(\"g\").attr(\"id\", this._id + \"C\");\n this.svgE = this.svg.append(\"g\").attr(\"id\", this._id + \"E\");\n this.svgV = this.svg.append(\"g\").attr(\"id\", this._id + \"V\");\n }\n\n getBounds(items, layoutEngine?) {\n const vBounds = [[null, null], [null, null]];\n items.forEach(function (item) {\n const pos = layoutEngine ? layoutEngine.nodePos(item._id) : { x: item.x(), y: item.y(), width: item.width(), height: item.height() };\n const leftX = pos.x - pos.width / 2;\n const rightX = pos.x + pos.width / 2;\n const topY = pos.y - pos.height / 2;\n const bottomY = pos.y + pos.height / 2;\n if (vBounds[0][0] === null || vBounds[0][0] > leftX) {\n vBounds[0][0] = leftX;\n }\n if (vBounds[0][1] === null || vBounds[0][1] > topY) {\n vBounds[0][1] = topY;\n }\n if (vBounds[1][0] === null || vBounds[1][0] < rightX) {\n vBounds[1][0] = rightX;\n }\n if (vBounds[1][1] === null || vBounds[1][1] < bottomY) {\n vBounds[1][1] = bottomY;\n }\n });\n return vBounds;\n }\n\n getVertexBounds(layoutEngine) {\n return this.getBounds(this._graphData.nodes(), layoutEngine);\n }\n\n getSelectionBounds(layoutEngine) {\n return this.getBounds(this._selection.get(), layoutEngine);\n }\n\n centerOnItem(item: Widget) {\n const bbox = item.getBBox(true);\n const deltaX = bbox.x + bbox.width / 2;\n const deltaY = bbox.y + bbox.height / 2;\n const itemBBox = {\n x: item.x() + deltaX - bbox.width / 2,\n y: item.y() + deltaY - bbox.height / 2,\n width: bbox.width,\n height: bbox.height\n };\n this.centerOnBBox(itemBBox);\n }\n\n zoomToItem(item: Widget) {\n const bbox = item.getBBox(true);\n const deltaX = bbox.x + bbox.width / 2;\n const deltaY = bbox.y + bbox.height / 2;\n const itemBBox = {\n x: item.x() + deltaX - bbox.width / 2,\n y: item.y() + deltaY - bbox.height / 2,\n width: bbox.width,\n height: bbox.height\n };\n this.zoomToBBox(itemBBox);\n }\n\n // Render ---\n updateVertices(rootElement, rootSuffix, data) {\n const width = this.width();\n const height = this.height();\n const context = this;\n\n const vertexElements = rootElement.selectAll(\"#\" + this._id + rootSuffix + \" > .graphVertex\").data(data, function (d) { return d.id(); });\n vertexElements.enter().append(\"g\")\n .attr(\"class\", \"graphVertex\")\n .style(\"opacity\", 1e-6)\n // TODO: Events need to be optional ---\n .on(\"click.selectionBag\", function (d) {\n context._selection.click(d, d3Event());\n context.selectionChanged();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const vertexElement = d3Select(this).select(\".graph_Vertex\");\n let selected = false;\n if (!vertexElement.empty()) {\n selected = vertexElement.classed(\"selected\");\n }\n context.vertex_click(context.rowToObj(d.data()), \"\", selected, {\n vertex: d\n });\n })\n .on(\"dblclick\", function (this: SVGElement, d) {\n d3Event().stopPropagation();\n const vertexElement = d3Select(this).select(\".graph_Vertex\");\n let selected = false;\n if (!vertexElement.empty()) {\n selected = vertexElement.classed(\"selected\");\n }\n context.vertex_dblclick(context.rowToObj(d.data()), \"\", selected, {\n vertex: d\n });\n })\n .on(\"contextmenu\", function (this: SVGElement, d) {\n const vertexElement = d3Select(this).select(\".graph_Vertex\");\n let selected = false;\n if (!vertexElement.empty()) {\n selected = vertexElement.classed(\"selected\");\n }\n context.vertex_contextmenu(context.rowToObj(d.data()), \"\", selected, {\n vertex: d\n });\n })\n .on(\"mouseout.tooltip\", this.tooltip.hide)\n .on(\"mousemove.tooltip\", this.tooltip.show)\n .on(\"mouseover\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.vertex_mouseover(d3Select(this), d);\n })\n .on(\"mouseout\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.vertex_mouseout(d3Select(this), d);\n })\n .each(createV)\n .transition()\n .duration(750)\n .style(\"opacity\", 1)\n ;\n function createV(this: SVGElement, d) {\n d3Select(this).style(\"cursor\", context.allowDragging() ? \"move\" : \"pointer\");\n d\n .target(this)\n .pos({ x: d.x() || width / 2, y: d.y() || height / 2 })\n .animationFrameRender()\n ;\n if (context.allowDragging()) {\n d3Select(this)\n .call(context._d3Drag)\n ;\n }\n if (d.dispatch) {\n d.dispatch.on(\"sizestart\", function (d2) {\n d2.allowResize(context.allowDragging());\n if (context.allowDragging()) {\n context._dragging = true;\n }\n });\n d.dispatch.on(\"size\", function (d2) {\n context.refreshIncidentEdges(d2, false);\n });\n d.dispatch.on(\"sizeend\", function (d2) {\n context._dragging = false;\n if (context.snapToGrid()) {\n const snapLoc = d2.calcSnap(context.snapToGrid());\n d2\n .pos(snapLoc[0])\n .size(snapLoc[1])\n .render()\n ;\n context.refreshIncidentEdges(d2, false);\n }\n });\n }\n }\n\n vertexElements\n .each(updateV)\n ;\n function updateV(d) {\n d\n .animationFrameRender()\n ;\n }\n\n vertexElements.exit()\n .each(function (d) {\n d.target(null);\n })\n .remove()\n ;\n\n vertexElements.order();\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this.tooltip.hide();\n this._centroidFilter.update(this.centroidColor());\n\n // IconBar ---\n const layout = this.layout();\n this._toggleHierarchy.selected(layout === \"Hierarchy\").render();\n this._toggleForceDirected.selected(layout === \"ForceDirected\").render();\n this._toggleForceDirected2.selected(layout === \"ForceDirected2\").render();\n this._toggleCircle.selected(layout === \"Circle\").render();\n\n // Create ---\n const context = this;\n\n this.updateVertices(this.svgC, \"C\", this._graphData.nodes().filter(v => this.layout() === \"Hierarchy\" ? (v instanceof Subgraph) : false));\n this.updateVertices(this.svgV, \"V\", this._graphData.nodes().filter(v => !(v instanceof Subgraph)));\n\n const edgeElements = this.svgE.selectAll(\"#\" + this._id + \"E > .graphEdge\").data(this.showEdges() ? this._graphData.edges() : [], function (d) { return d.id(); });\n edgeElements.enter().append(\"g\")\n .attr(\"class\", \"graphEdge\")\n .style(\"opacity\", 1e-6)\n .on(\"click.selectionBag\", function (d) {\n context._selection.click(d, d3Event());\n })\n .on(\"click\", function (this: SVGElement, d) {\n const edgeElement = d3Select(this).select(\".graph_Edge\");\n let selected = false;\n if (!edgeElement.empty()) {\n selected = edgeElement.classed(\"selected\");\n }\n context.edge_click(context.rowToObj(d.data()), \"\", selected, {\n edge: d\n });\n })\n .on(\"dblclick\", function (this: SVGElement, d) {\n const edgeElement = d3Select(this).select(\".graph_Edge\");\n let selected = false;\n if (!edgeElement.empty()) {\n selected = edgeElement.classed(\"selected\");\n }\n context.edge_dblclick(context.rowToObj(d.data()), \"\", selected, {\n edge: d\n });\n })\n .on(\"mouseout.tooltip\", this.tooltip.hide)\n .on(\"mousemove.tooltip\", this.tooltip.show)\n .on(\"mouseover\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.edge_mouseover(d3Select(this), d);\n })\n .on(\"mouseout\", function (this: SVGElement, d) {\n if (context._dragging)\n return;\n context.edge_mouseout(d3Select(this), d);\n })\n .each(createE)\n .transition()\n .duration(750)\n .style(\"opacity\", 1)\n ;\n function createE(this: SVGElement, d) {\n d\n .target(this)\n .animationFrameRender()\n ;\n }\n\n edgeElements\n .each(updateE)\n ;\n function updateE(d) {\n d\n .animationFrameRender()\n ;\n }\n\n edgeElements.exit()\n .each(function (d) {\n d.target(null);\n })\n .remove()\n ;\n\n if (!this._renderCount) {\n this._renderCount++;\n this.layout(this.layout());\n }\n }\n\n exit(domNode, element) {\n this._graphData.nodes().forEach(v => v.target(null));\n this._graphData.edges().forEach(e => e.target(null));\n super.exit(domNode, element);\n }\n\n static profileID = 0;\n render(callback?: (w: Widget) => void): this {\n this.progress(\"start\");\n super.render(w => {\n this.doLayout().then(() => {\n this.progress(\"end\");\n if (callback) {\n callback(w);\n }\n });\n });\n return this;\n }\n\n // Methods ---\n _prevLayout;\n _prevDataHash;\n doLayout(transitionDuration = 0): Promise<void> {\n return new Promise((resolve, reject) => {\n requestAnimationFrame(() => {\n if (this._prevLayout !== this.layout() || this._prevDataHash !== this._dataHash) {\n this._prevLayout = this.layout();\n this._prevDataHash = this._dataHash;\n this._doLayout(transitionDuration).then(() => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n });\n }\n\n _doLayout(transitionDuration = 0): Promise<void> {\n return new Promise((resolve, reject) => {\n this.progress(\"layout-start\");\n if (this.forceLayout) {\n this.forceLayout.force.stop();\n this.forceLayout = null;\n }\n\n const context = this;\n const layoutEngine = this.getLayoutEngine();\n if (this.layout() === \"ForceDirected2\") {\n let total = 0;\n let count = 0;\n this.forceLayout = layoutEngine;\n this.forceLayout.force\n .on(\"tick\", function (this: SVGElement) {\n const start = performance.now();\n context.progress(\"layout-tick\");\n layoutEngine.vertices.forEach(function (item) {\n if (item.fixed) {\n // item.x = item.px;\n // item.y = item.py;\n } else {\n // item.px = item.x;\n // item.py = item.y;\n\n // Might have been cleared ---\n const vertex = context._graphData.node(item.id);\n if (vertex) {\n vertex\n .move({ x: item.x, y: item.y })\n ;\n }\n }\n });\n context._graphData.edges().forEach((item: any) => {\n item\n .points([], false, false)\n ;\n });\n if (context.applyScaleOnLayout()) {\n // const vBounds = context.getVertexBounds(layoutEngine);\n // context.shrinkToFit(vBounds);\n }\n total += performance.now() - start;\n ++count;\n console.log(\"tick:\" + (total / count));\n })\n .on(\"end\", function (this: SVGElement) {\n context.progress(\"layout-end\");\n })\n ;\n this.forceLayout.force.restart();\n resolve();\n } else if (layoutEngine) {\n this.forceLayout = null;\n context._dragging = true;\n context._graphData.nodes().forEach(function (item) {\n const pos = layoutEngine.nodePos(item.id());\n if (item instanceof Graph.Subgraph) {\n item\n .pos({ x: pos.x, y: pos.y })\n .size({ width: pos.width, height: pos.height })\n .animationFrameRender()\n ;\n } else {\n item.move({ x: pos.x, y: pos.y }, 0);\n }\n });\n context._graphData.edges().forEach((item: any) => {\n const points = layoutEngine.edgePoints(item);\n item.points(points, transitionDuration);\n });\n if (context.applyScaleOnLayout()) {\n requestAnimationFrame(() => {\n context.zoomToFit();\n resolve();\n });\n }\n this._fixIEMarkers();\n setTimeout(function () {\n context._dragging = false;\n }, transitionDuration ? transitionDuration + 50 : 50); // Prevents highlighting during morph ---\n this.progress(\"layout-end\");\n if (!context.applyScaleOnLayout()) {\n resolve();\n }\n }\n });\n }\n\n getLayoutEngine() {\n switch (this.layout()) {\n case \"Circle\":\n return new GraphLayouts.Circle(this._graphData, this._size.width, this._size.height);\n case \"ForceDirected\":\n return new GraphLayouts.ForceDirected(this._graphData, this._size.width, this._size.height, {\n oneShot: true,\n linkDistance: this.forceDirectedLinkDistance(),\n linkStrength: this.forceDirectedLinkStrength(),\n friction: this.forceDirectedFriction(),\n charge: this.forceDirectedCharge(),\n chargeDistance: this.forceDirectedChargeDistance(),\n theta: this.forceDirectedTheta(),\n gravity: this.forceDirectedGravity()\n });\n case \"ForceDirected2\":\n return new GraphLayouts.ForceDirected(this._graphData, this._size.width, this._size.height, {\n linkDistance: this.forceDirectedLinkDistance(),\n linkStrength: this.forceDirectedLinkStrength(),\n friction: this.forceDirectedFriction(),\n charge: this.forceDirectedCharge(),\n chargeDistance: this.forceDirectedChargeDistance(),\n theta: this.forceDirectedTheta(),\n gravity: this.forceDirectedGravity()\n });\n case \"Hierarchy\":\n return new GraphLayouts.Hierarchy(this._graphData, this._size.width, this._size.height, {\n rankdir: this.hierarchyRankDirection(),\n nodesep: this.hierarchyNodeSeparation(),\n edgesep: this.hierarchyEdgeSeparation(),\n ranksep: this.hierarchyRankSeparation(),\n digraph: this.hierarchyDigraph()\n });\n default:\n }\n return null; // new GraphLayouts.None(this.graphData, this._size.width, this._size.height);\n }\n\n getNeighborMap(vertex) {\n const vertices = {};\n const edges = {};\n\n if (vertex) {\n const nedges = this._graphData.nodeEdges(vertex.id());\n for (let i = 0; i < nedges.length; ++i) {\n const edge = this._graphData.edge(nedges[i]);\n edges[edge.id()] = edge;\n if (edge._sourceVertex.id() !== vertex.id()) {\n vertices[edge._sourceVertex.id()] = edge._sourceVertex;\n }\n if (edge._targetVertex.id() !== vertex.id()) {\n vertices[edge._targetVertex.id()] = edge._targetVertex;\n }\n }\n }\n\n return {\n vertices,\n edges\n };\n }\n\n highlightVerticies(vertexMap?: { [id: string]: boolean }) {\n const context = this;\n const vertexElements = this.svgV.selectAll(\".graphVertex\");\n vertexElements\n .classed(\"graphVertex-highlighted\", d => !vertexMap || vertexMap[d.id()])\n .style(\"filter\", d => vertexMap && vertexMap[d.id()] ? \"url(#\" + this.id() + \"_glow)\" : null)\n .transition().duration(this.transitionDuration())\n .on(\"end\", function (d) {\n if (vertexMap && vertexMap[d.id()]) {\n if (d._placeholderElement.node() && d._placeholderElement.node().parentNode) {\n d._placeholderElement.node().parentNode.appendChild(d._placeholderElement.node());\n }\n }\n })\n .style(\"opacity\", function (d) {\n if (!vertexMap || vertexMap[d.id()]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightEdges(edgeMap) {\n const context = this;\n const edgeElements = this.svgE.selectAll(\".graphEdge\");\n edgeElements\n .classed(\"graphEdge-highlighted\", function (d) { return !edgeMap || edgeMap[d.id()]; })\n .style(\"stroke-width\", function (o) {\n if (edgeMap && edgeMap[o.id()]) {\n return context.highlight.edge;\n }\n return \"1px\";\n }).transition().duration(this.transitionDuration())\n .style(\"opacity\", function (o) {\n if (!edgeMap || edgeMap[o.id()]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightVertex(_element, d) {\n if (this.highlightOnMouseOverVertex()) {\n if (d) {\n const highlight = this.getNeighborMap(d);\n highlight.vertices[d.id()] = d;\n this.highlightVerticies(highlight.vertices);\n this.highlightEdges(highlight.edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n highlightEdge(_element, d) {\n if (this.highlightOnMouseOverEdge()) {\n if (d) {\n const vertices = {};\n vertices[d._sourceVertex.id()] = d._sourceVertex;\n vertices[d._targetVertex.id()] = d._targetVertex;\n const edges = {};\n edges[d.id()] = d;\n this.highlightVerticies(vertices);\n this.highlightEdges(edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n refreshIncidentEdges(d, skipPushMarkers) {\n this._graphData.nodeEdges(d.id()).forEach(glEdge => {\n const edge: any = this._graphData.edge(glEdge);\n edge\n .points([], false, skipPushMarkers)\n ;\n });\n }\n\n // Events ---\n centroids(): Vertex[] {\n return (this._graphData.nodes() as any[]).filter(vertex => vertex.centroid());\n }\n\n selectionChanged() {\n if (this.highlightSelectedPathToCentroid()) {\n const highlightedEdges = {};\n this.centroids().forEach(centroid => {\n this.selection().forEach(selection => {\n this._graphData.undirectedShortestPath(centroid.id(), selection.id()).forEach(e => {\n highlightedEdges[e.id()] = true;\n });\n });\n });\n this.svgE.selectAll(\".graphEdge\")\n .classed(\"shortest-path\", d => highlightedEdges[d.id()] === true)\n ;\n }\n }\n\n vertex_click(_row, _col, _sel, more) {\n if (more && more.vertex) {\n more.vertex._placeholderElement.node().parentNode.appendChild(more.vertex._placeholderElement.node());\n }\n IGraph.prototype.vertex_click.apply(this, arguments);\n }\n\n vertex_dblclick(_row, _col, _sel, _opts) {\n }\n\n vertex_contextmenu(_row, _col, _sel, _opts) {\n }\n\n vertex_mouseover(element, d) {\n this.highlightVertex(element, d);\n }\n\n vertex_mouseout(_element, _d) {\n this.highlightVertex(null, null);\n }\n\n edge_mouseover(element, d) {\n this.highlightEdge(element, d);\n }\n\n edge_mouseout(_element, _d) {\n this.highlightEdge(null, null);\n }\n\n addMarkers(clearFirst: boolean = false) {\n if (clearFirst) {\n this.defs.select(\"#\" + this._id + \"_arrowHead\").remove();\n this.defs.select(\"#\" + this._id + \"_circleFoot\").remove();\n this.defs.select(\"#\" + this._id + \"_circleHead\").remove();\n this.defs.select(\"#\" + this._id + \"_glow\").remove();\n }\n this.defs.append(\"marker\")\n .attr(\"class\", \"marker\")\n .attr(\"id\", this._id + \"_arrowHead\")\n .attr(\"viewBox\", \"0 0 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 5)\n .attr(\"markerWidth\", 8)\n .attr(\"markerHeight\", 8)\n .attr(\"markerUnits\", \"strokeWidth\")\n .attr(\"orient\", \"auto\")\n .append(\"polyline\")\n .attr(\"points\", \"0,0 10,5 0,10 1,5\")\n ;\n this.defs.append(\"marker\")\n .attr(\"class\", \"marker\")\n .attr(\"id\", this._id + \"_circleFoot\")\n .attr(\"viewBox\", \"0 0 10 10\")\n .attr(\"refX\", 1)\n .attr(\"refY\", 5)\n .attr(\"markerWidth\", 7)\n .attr(\"markerHeight\", 7)\n .attr(\"markerUnits\", \"strokeWidth\")\n .attr(\"orient\", \"auto\")\n .append(\"circle\")\n .attr(\"cx\", 5)\n .attr(\"cy\", 5)\n .attr(\"r\", 4)\n ;\n this.defs.append(\"marker\")\n .attr(\"class\", \"marker\")\n .attr(\"id\", this._id + \"_circleHead\")\n .attr(\"viewBox\", \"0 0 10 10\")\n .attr(\"refX\", 9)\n .attr(\"refY\", 5)\n .attr(\"markerWidth\", 7)\n .attr(\"markerHeight\", 7)\n .attr(\"markerUnits\", \"strokeWidth\")\n .attr(\"orient\", \"auto\")\n .append(\"circle\")\n .attr(\"cx\", 5)\n .attr(\"cy\", 5)\n .attr(\"r\", 4)\n ;\n }\n\n // IGraph ---\n edge_click: (_row, _col, _sel, _more) => void;\n edge_dblclick: (_row, _col, _sel, _more) => void;\n\n // ITooltip ---\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n\n // Progess Events ---\n progress(what: \"start\" | \"end\" | \"layout-start\" | \"layout-tick\" | \"layout-end\") {\n }\n}\nGraph.prototype._class += \" graph_Graph\";\nGraph.prototype.implements(IGraph.prototype);\nGraph.prototype.implements(ITooltip.prototype);\n\nexport interface Graph {\n allowDragging(): boolean;\n allowDragging(_: boolean): this;\n dragSingleNeighbors(): boolean;\n dragSingleNeighbors(_: boolean): this;\n layout(): GraphLayoutType;\n layout(_: GraphLayoutType): this;\n // scale: { (): string; (_: string): this; };\n applyScaleOnLayout(): boolean;\n applyScaleOnLayout(_: boolean): this;\n highlightOnMouseOverVertex(): boolean;\n highlightOnMouseOverVertex(_: boolean): this;\n highlightOnMouseOverEdge(): boolean;\n highlightOnMouseOverEdge(_: boolean): this;\n transitionDuration(): number;\n transitionDuration(_: number): this;\n showEdges(): boolean;\n showEdges(_: boolean): this;\n snapToGrid(): number;\n snapToGrid(_: number): this;\n selectionClearOnBackgroundClick(): boolean;\n selectionClearOnBackgroundClick(_: boolean): this;\n\n centroidColor(): string;\n centroidColor(_: string): this;\n highlightSelectedPathToCentroid(): boolean;\n highlightSelectedPathToCentroid(_: boolean): this;\n\n hierarchyRankDirection(): string;\n hierarchyRankDirection(_: string): this;\n hierarchyNodeSeparation(): number;\n hierarchyNodeSeparation(_: number): this;\n hierarchyEdgeSeparation(): number;\n hierarchyEdgeSeparation(_: number): this;\n hierarchyRankSeparation(): number;\n hierarchyRankSeparation(_: number): this;\n hierarchyDigraph(): boolean;\n hierarchyDigraph(_: boolean): this;\n\n forceDirectedLinkDistance(): number;\n forceDirectedLinkDistance(_: number): this;\n forceDirectedLinkStrength(): number;\n forceDirectedLinkStrength(_: number): this;\n forceDirectedFriction(): number;\n forceDirectedFriction(_: number): this;\n forceDirectedCharge(): number;\n forceDirectedCharge(_: number): this;\n forceDirectedChargeDistance(): number;\n forceDirectedChargeDistance(_: number): this;\n forceDirectedTheta(): number;\n forceDirectedTheta(_: number): this;\n forceDirectedGravity(): number;\n forceDirectedGravity(_: number): this;\n}\n\nGraph.prototype.publish(\"allowDragging\", true, \"boolean\", \"Allow Dragging of Vertices\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"dragSingleNeighbors\", false, \"boolean\", \"Dragging a Vertex also moves its singleton neighbors\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"layout\", \"Circle\", \"set\", \"Default Layout\", [\"Circle\", \"ForceDirected\", \"ForceDirected2\", \"Hierarchy\", \"None\"], { tags: [\"Basic\"] });\nGraph.prototype.publish(\"scale\", \"100%\", \"set\", \"Zoom Level\", [\"all\", \"width\", \"selection\", \"100%\", \"90%\", \"75%\", \"50%\", \"25%\", \"10%\"], { tags: [\"Basic\"] });\nGraph.prototype.publish(\"applyScaleOnLayout\", false, \"boolean\", \"Shrink to fit on Layout\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"highlightOnMouseOverVertex\", false, \"boolean\", \"Highlight Vertex on Mouse Over\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"highlightOnMouseOverEdge\", false, \"boolean\", \"Highlight Edge on Mouse Over\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"transitionDuration\", 250, \"number\", \"Transition Duration\", null, { tags: [\"Intermediate\"] });\nGraph.prototype.publish(\"showEdges\", true, \"boolean\", \"Show Edges\", null, { tags: [\"Intermediate\"] });\nGraph.prototype.publish(\"snapToGrid\", 0, \"number\", \"Snap to Grid\", null, { tags: [\"Private\"] });\nGraph.prototype.publish(\"selectionClearOnBackgroundClick\", false, \"boolean\", \"Clear selection on background click\");\n\nGraph.prototype.publish(\"centroidColor\", \"#00A000\", \"html-color\", \"Centroid Color\", null, { tags: [\"Basic\"] });\nGraph.prototype.publish(\"highlightSelectedPathToCentroid\", false, \"boolean\", \"Highlight path to Center Vertex (for selected vertices)\", null, { tags: [\"Basic\"] });\n\nGraph.prototype.publish(\"hierarchyRankDirection\", \"TB\", \"set\", \"Direction for Rank Nodes\", [\"TB\", \"BT\", \"LR\", \"RL\"], { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyNodeSeparation\", 50, \"number\", \"Number of pixels that separate nodes horizontally in the layout\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyEdgeSeparation\", 10, \"number\", \"Number of pixels that separate edges horizontally in the layout\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyRankSeparation\", 50, \"number\", \"Number of pixels between each rank in the layout\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"hierarchyDigraph\", true, \"boolean\", \"Directional Graph\", null, { tags: [\"Advanced\"] });\n\nGraph.prototype.publish(\"forceDirectedLinkDistance\", 300, \"number\", \"Target distance between linked nodes\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedLinkStrength\", 1, \"number\", \"Strength (rigidity) of links\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedFriction\", 0.9, \"number\", \"Friction coefficient\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedCharge\", -25, \"number\", \"Charge strength \", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedChargeDistance\", 10000, \"number\", \"Maximum distance over which charge forces are applied\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedTheta\", 0.8, \"number\", \"Barnes–Hut approximation criterion\", null, { tags: [\"Advanced\"] });\nGraph.prototype.publish(\"forceDirectedGravity\", 0.1, \"number\", \"Gravitational strength\", null, { tags: [\"Advanced\"] });\n\nconst _origScale = Graph.prototype.scale;\nGraph.prototype.scale = function (_?, transitionDuration?) {\n const retVal = _origScale.apply(this, arguments);\n if (arguments.length) {\n this.zoomTo(_, transitionDuration);\n }\n return retVal;\n};\n","import { PropertyExt } from \"@hpcc-js/common\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Edge } from \"./Edge\";\nimport { Graph, IGraphData } from \"./Graph\";\nimport { IAnnotation, Vertex } from \"./Vertex\";\n\ninterface IAnnotationIndexes {\n iconCol: number;\n iconFillCol: number;\n tooltipCol: number;\n shapeStrokeCol: number;\n shapeFillCol: number;\n}\n\nexport class Annotation extends PropertyExt {\n protected _owner: AdjacencyGraph;\n\n owner(): AdjacencyGraph;\n owner(_: AdjacencyGraph): this;\n owner(_?: AdjacencyGraph): AdjacencyGraph | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.iconColumn();\n }\n\n indexes(): IAnnotationIndexes {\n const columns = this._owner.columns();\n return {\n iconCol: columns.indexOf(this.iconColumn()),\n iconFillCol: columns.indexOf(this.iconFillColumn()),\n tooltipCol: columns.indexOf(this.tooltipColumn()),\n shapeStrokeCol: columns.indexOf(this.shapeStrokeColumn()),\n shapeFillCol: columns.indexOf(this.shapeFillColumn())\n };\n }\n\n mapper(): (row) => IAnnotation {\n const indexes = this.indexes();\n return (row) => ({\n faChar: row[indexes.iconCol],\n tooltip: row[indexes.tooltipCol],\n shape_colorFill: row[indexes.shapeFillCol] || this.shapeFillDefault(),\n shape_colorStroke: row[indexes.shapeStrokeCol] || this.shapeStrokeDefault(),\n image_colorFill: row[indexes.iconFillCol] || this.iconFillDefault()\n });\n }\n}\nAnnotation.prototype._class += \" graph_Annotation\";\nexport interface Annotation {\n iconColumn(): string;\n iconColumn(_: string): this;\n iconFillDefault(): string;\n iconFillDefault(_: string): this;\n iconFillColumn(): string;\n iconFillColumn(_: string): this;\n tooltipColumn(): string;\n tooltipColumn(_: string): this;\n shapeStrokeDefault(): string;\n shapeStrokeDefault(_: string): this;\n shapeStrokeColumn(): string;\n shapeStrokeColumn(_: string): this;\n shapeFillDefault(): string;\n shapeFillDefault(_: string): this;\n shapeFillColumn(): string;\n shapeFillColumn(_: string): this;\n}\nAnnotation.prototype.publish(\"iconColumn\", \"\", \"set\", \"Icon column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"iconFillDefault\", \"white\", \"html-color\", \"Icon fill default color\");\nAnnotation.prototype.publish(\"iconFillColumn\", \"\", \"set\", \"Icon fill color column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"tooltipColumn\", \"\", \"set\", \"Tooltip column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"shapeStrokeDefault\", \"darkred\", \"html-color\", \"Shape stroke default color\");\nAnnotation.prototype.publish(\"shapeStrokeColumn\", \"\", \"set\", \"Shape stroke color column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\nAnnotation.prototype.publish(\"shapeFillDefault\", \"red\", \"html-color\", \"Shape fill default color\");\nAnnotation.prototype.publish(\"shapeFillColumn\", \"\", \"set\", \"Shape fill color column\", function (this: Annotation) { return this._owner.columns(); }, { optional: true });\n\nexport class AdjacencyGraph extends Graph {\n\n private _vertexMap: { [key: string]: Vertex } = {};\n private _edgeMap: { [key: string]: Edge } = {};\n private _prevAdjacencyDataHash: string;\n private _merge: boolean = false;\n private _adjacencyData: object[] = [];\n\n constructor() {\n super();\n }\n\n linksColumns(): string[] {\n const linksCol: number = this.columns().indexOf(this.linksColumn());\n const linksField = this._db.field(linksCol);\n if (linksField) {\n return linksField.children().map(field => field.label());\n }\n return [];\n }\n\n validAnnotations() {\n return this.annotations().filter(a => a.valid());\n }\n\n updateData() {\n const prevAdjacencyDataHash = hashSum([this._adjacencyData, this.uidColumn(), this.labelColumn(), this.iconColumn(), this.linksColumn(), this.linkUidColumn(), this.linkLabelColumn(), this.validAnnotations().map(a => a.hashSum())]);\n if (this._prevAdjacencyDataHash !== prevAdjacencyDataHash) {\n this._prevAdjacencyDataHash = prevAdjacencyDataHash;\n\n const columns = this.columns();\n const uidCol: number = columns.indexOf(this.uidColumn());\n const labelCol: number = columns.indexOf(this.labelColumn());\n const iconCol: number = columns.indexOf(this.iconColumn());\n const linksCol: number = columns.indexOf(this.linksColumn());\n\n const linksColumns = this.linksColumns();\n const linksUidCol: number = linksColumns.indexOf(this.linkUidColumn());\n const linksLabelCol: number = linksColumns.indexOf(this.linkLabelColumn());\n\n const annotationMappers = this.validAnnotations().map(a => a.mapper());\n\n const vertexMap: { [key: string]: Vertex } = {};\n const edgeMap: { [key: string]: Edge } = {};\n const graphData: IGraphData = {\n vertices: this._adjacencyData.map(row => {\n const uid = row[uidCol];\n if (uid !== undefined) {\n let retVal = vertexMap[uid] || this._vertexMap[uid];\n if (!retVal) {\n retVal = new Vertex();\n }\n vertexMap[uid] = retVal;\n\n retVal\n .text(row[labelCol])\n .data(row)\n .faChar(row[iconCol])\n .annotationIcons(annotationMappers.map(am => am(row)))\n ;\n\n return retVal;\n }\n }).filter(v => !!v),\n edges: []\n };\n for (const row of this._adjacencyData) {\n const uid = row[uidCol];\n const links = row[linksCol];\n if (uid !== undefined && links !== undefined) {\n for (const childRow of links) {\n const linkUid = childRow[linksUidCol];\n const linkLabel = childRow[linksLabelCol];\n const edgeID = `${uid}->${linkUid}`;\n let retVal = edgeMap[edgeID] || this._edgeMap[edgeID];\n if (!retVal) {\n if (vertexMap[uid] && vertexMap[linkUid]) {\n retVal = new Edge()\n .sourceVertex(vertexMap[uid])\n .targetVertex(vertexMap[linkUid])\n .data(childRow)\n ;\n } else {\n console.log(\"Missing vertices for edge: \" + edgeID);\n }\n }\n if (retVal) {\n retVal.text(linkLabel);\n edgeMap[edgeID] = retVal;\n graphData.edges.push(retVal);\n }\n }\n }\n }\n this._vertexMap = vertexMap;\n this._edgeMap = edgeMap;\n super.data(graphData, this._merge);\n }\n }\n\n data(): IGraphData;\n data(_: IGraphData, merge?: boolean): this;\n data(_?: IGraphData | object[], merge?: boolean): IGraphData | object[] | this {\n if (!arguments.length) return this._adjacencyData;\n if (_ instanceof Array) {\n this._merge = merge;\n this._adjacencyData = _;\n return this;\n }\n throw new Error(\"Invalid data shape.\");\n }\n\n update(domNode, element) {\n this.updateData();\n super.update(domNode, element);\n }\n\n click(row, col, sel) {\n console.log(\"click\");\n }\n}\nAdjacencyGraph.prototype._class += \" graph_AdjacencyGraph\";\n\nexport interface AdjacencyGraph {\n uidColumn(): string;\n uidColumn(_: string): this;\n labelColumn(): string;\n labelColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n linksColumn(): string;\n linksColumn(_: string): this;\n linkUidColumn(): string;\n linkUidColumn(_: string): this;\n linkLabelColumn(): string;\n linkLabelColumn(_: string): this;\n annotations(): Annotation[];\n annotations(_: Annotation[]): this;\n}\nAdjacencyGraph.prototype.publish(\"uidColumn\", \"\", \"set\", \"UID column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"labelColumn\", \"\", \"set\", \"Label column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"iconColumn\", \"\", \"set\", \"Icon column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"linksColumn\", \"\", \"set\", \"Links column\", function (this: AdjacencyGraph) { return this.columns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"linkUidColumn\", \"\", \"set\", \"Link UID column\", function (this: AdjacencyGraph) { return this.linksColumns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"linkLabelColumn\", \"\", \"set\", \"Link Label column\", function (this: AdjacencyGraph) { return this.linksColumns(); }, { optional: true });\nAdjacencyGraph.prototype.publish(\"annotations\", [], \"propertyArray\", \"Annotations\", null, { autoExpand: Annotation });\n","import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n","export default function constant(x) {\n return function() {\n return x;\n };\n}\n","import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n","import {linkHorizontal} from \"d3-shape\";\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nexport default function() {\n return linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n}\n","import { Palette, PropertyExt, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { max as d3Max, mean as d3Mean, median as d3Median, min as d3Min, sum as d3Sum } from \"d3-array\";\nimport { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from \"d3-sankey\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Sankey.css\";\n\nconst d3Aggr = {\n mean: d3Mean,\n median: d3Median,\n min: d3Min,\n max: d3Max,\n sum: d3Sum\n};\n\nexport class SankeyColumn extends PropertyExt {\n _owner: Sankey;\n\n constructor() {\n super();\n }\n\n owner(): Sankey;\n owner(_: Sankey): this;\n owner(_?: Sankey): Sankey | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.column();\n }\n\n aggregate(values) {\n switch (this.aggrType()) {\n case null:\n case undefined:\n case \"\":\n return values.length;\n default:\n const columns = this._owner.columns();\n const colIdx = columns.indexOf(this.aggrColumn());\n return d3Aggr[this.aggrType()](values, function (value) {\n return +value[colIdx];\n });\n }\n }\n\n column: { (): string; (_: string): SankeyColumn; };\n aggrType: { (): string; (_: string): SankeyColumn; };\n aggrColumn: { (): string; (_: string): SankeyColumn; };\n\n}\nSankeyColumn.prototype._class += \" graph_Sankey.SankeyColumn\";\n\nSankeyColumn.prototype.publish(\"column\", null, \"set\", \"Field\", function () { return this._owner ? this._owner.columns() : []; }, { optional: true });\nSankeyColumn.prototype.publish(\"aggrType\", null, \"set\", \"Aggregation Type\", [null, \"mean\", \"median\", \"sum\", \"min\", \"max\"], { optional: true, disable: w => !w._owner || w._owner.mappings().indexOf(w) === 0 });\nSankeyColumn.prototype.publish(\"aggrColumn\", null, \"set\", \"Aggregation Field\", function () { return this._owner ? this._owner.columns() : []; }, { optional: true, disable: w => !w._owner || !w.aggrType() || w._owner.mappings().indexOf(w) === 0 });\n\nexport class Sankey extends SVGWidget {\n Column;\n _palette;\n _d3Sankey;\n _d3SankeyPath;\n _selection;\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this);\n this._drawStartPos = \"origin\";\n }\n\n sankeyData() {\n const retVal = {\n vertices: [],\n edges: []\n };\n if (this.data().length === 0) return retVal;\n const vertexIndex = {};\n const valueIdx = 2;\n const mappings = this.mappings().filter(mapping => mapping.valid());\n mappings.forEach(function (mapping, idx) {\n const view = this._db.rollupView([mapping.column()]);\n view.entries().forEach(function (row) {\n const id = mapping.column() + \":\" + idx + \":\" + row.key;\n if (!vertexIndex[id]) {\n retVal.vertices.push({\n __id: id,\n __category: mapping.column(),\n name: row.key,\n origRow: row.value,\n value: row.value[idx][valueIdx]\n });\n vertexIndex[id] = retVal.vertices.length - 1;\n }\n }, this);\n }, this);\n mappings.forEach(function (mapping, idx) {\n if (idx < mappings.length - 1) {\n const mapping2 = mappings[idx + 1];\n const view = this._db.rollupView([mapping.column(), mapping2.column()]);\n view.entries().forEach(function (row) {\n const sourceID = mapping.column() + \":\" + idx + \":\" + row.key;\n row.values.forEach(function (value) {\n const targetID = mapping2.column() + \":\" + (idx + 1) + \":\" + value.key;\n retVal.edges.push({\n __id: sourceID + \"_\" + targetID,\n source: vertexIndex[sourceID],\n target: vertexIndex[targetID],\n value: value.value[0][valueIdx]\n });\n });\n });\n }\n }, this);\n\n return retVal;\n }\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._d3Sankey = new d3Sankey();\n this._selection.widgetElement(element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._palette = this._palette.switch(this.paletteID());\n\n const strokeWidth = this.vertexStrokeWidth();\n\n const sankeyData = this.sankeyData();\n const sw2 = strokeWidth * 2;\n this._d3Sankey\n .extent([\n [strokeWidth, strokeWidth],\n [this.width() - sw2, this.height() - sw2]\n ])\n .nodeWidth(this.vertexWidth())\n .nodePadding(this.vertexPadding())\n ;\n this._d3Sankey({\n nodes: sankeyData.vertices,\n links: sankeyData.edges\n });\n const context = this;\n\n // Links ---\n const link = element.selectAll(\".link\").data(sankeyData.edges);\n link.enter().append(\"path\")\n .attr(\"class\", \"link\")\n .each(function () {\n d3Select(this)\n .append(\"title\")\n ;\n })\n .merge(link)\n .attr(\"d\", d3SankeyLinkHorizontal())\n .style(\"stroke-width\", function (d) {\n return Math.max(1, d.width);\n })\n .sort(function (a, b) { return b.width - a.width; })\n .select(\"title\")\n .text(function (d) {\n return d.source.name + \" → \" + d.target.name + \"\\n\" + d.value;\n })\n ;\n link.exit().remove();\n // Nodes ---\n const node = element.selectAll(\".node\").data(sankeyData.vertices);\n node.enter().append(\"g\")\n .attr(\"class\", \"node\")\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.origRow[0]), \"\", context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.origRow[0]), \"\", context._selection.selected(this));\n })\n .each(function () {\n const gElement = d3Select(this);\n gElement.append(\"rect\");\n gElement.append(\"text\");\n })\n /*\n .call(d3.behavior.drag()\n .origin(function (d) { return d; })\n .on(\"dragstart\", function () {\n this.parentNode.appendChild(this);\n })\n .on(\"drag\", dragmove)\n )\n */\n .merge(node)\n .attr(\"transform\", function (d) {\n let _x = 0;\n let _y = 0;\n if(d.x0)_x=d.x0;\n if(d.y0)_y=d.y0;\n return \"translate(\" + (_x+strokeWidth) + \",\" + (_y+strokeWidth) + \")\";\n })\n .each(function () {\n const n = d3Select(this);\n n.select(\"rect\")\n .attr(\"height\", function (d: any) { return d.y1 - d.y0; })\n .attr(\"width\", context._d3Sankey.nodeWidth())\n .style(\"fill\", function (d: any) { return context._palette(d.name); })\n .style(\"stroke\", function (d: any) { return context.vertexStrokeColor(); })\n .style(\"stroke-width\", function (d: any) { return strokeWidth; })\n .style(\"cursor\", (context.xAxisMovement() || context.yAxisMovement()) ? null : \"default\")\n ;\n n.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d: any) {\n return (d.y1 - d.y0)/2;\n })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d: any) { return d.name; })\n .filter(function (d: any) { return d.x0 < context.width() / 2; })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n });\n node.exit().remove();\n\n /*\n function dragmove(d) {\n var gElement = d3.select(this);\n if (context.xAxisMovement()) {\n d.x = Math.max(0, Math.min(context.width() - d.dx, d3.event.x));\n }\n if (context.yAxisMovement()) {\n d.y = Math.max(0, Math.min(context.height() - d.dy, d3.event.y));\n }\n gElement.attr(\"transform\", \"translate(\" + d.x + \",\" + d.y + \")\");\n context._d3Sankey.relayout();\n link.attr(\"d\", context._d3SankeyPath);\n\n gElement.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d) { return d.dy / 2; })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d) { return d.name; })\n .filter(function (d) { return d.x < context.width() / 2; })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n }\n */\n }\n\n paletteID: { (): string; (_: string): Sankey; };\n mappings: { (): SankeyColumn[]; (_: SankeyColumn[]): Sankey; };\n vertexStrokeWidth: { (): number; (_: number): Sankey; };\n vertexStrokeColor: { (): string; (_: string): Sankey; };\n vertexWidth: { (): number; (_: number): Sankey; };\n vertexPadding: { (): number; (_: number): Sankey; };\n xAxisMovement: { (): boolean; (_: boolean): Sankey; };\n yAxisMovement: { (): boolean; (_: boolean): Sankey; };\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n // Events ---\n click(row, column, selected) {\n console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n\n dblclick(row, column, selected) {\n console.log(\"Double Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n}\nSankey.prototype._class += \" graph_Sankey\";\nSankey.prototype.Column = SankeyColumn;\nSankey.prototype.mixin(Utility.SimpleSelectionMixin);\n\nSankey.prototype._palette = Palette.ordinal(\"default\");\n\nSankey.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Sankey.prototype._palette.switch());\nSankey.prototype.publish(\"mappings\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: SankeyColumn });\nSankey.prototype.publish(\"vertexStrokeWidth\", 1, \"number\", \"Vertex Stroke Width\");\nSankey.prototype.publish(\"vertexStrokeColor\", \"darkgray\", \"string\", \"Vertex Stroke Color\");\nSankey.prototype.publish(\"vertexWidth\", 36, \"number\", \"Vertex Width\");\nSankey.prototype.publish(\"vertexPadding\", 40, \"number\", \"Vertex Padding\");\nSankey.prototype.publish(\"xAxisMovement\", false, \"boolean\", \"Enable x-axis movement\");\nSankey.prototype.publish(\"yAxisMovement\", false, \"boolean\", \"Enable y-axis movement\");\n","import { Graph2 as GraphCollection } from \"@hpcc-js/util\";\nimport { curveBasis as d3CurveBasis, curveCardinal as d3CurveCardinal, line as d3Line } from \"d3-shape\";\nimport { EdgePlaceholder, SubgraphPlaceholder, VertexPlaceholder } from \"./placeholders\";\nimport { EdgeLayout } from \"./tree\";\n\nexport type Point = [number, number];\n\nconst lineBasis = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveBasis)\n ;\n\nconst lineCardinal = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveCardinal)\n ;\n\nexport interface ILayout {\n start(): Promise<this>;\n stop(): this;\n running(): boolean;\n\n edgePath(e: EdgePlaceholder, curveDepth: number): EdgeLayout;\n}\n\nexport type Size = { width: number, height: number };\nexport interface IGraph {\n size(): Size;\n graphData(): GraphCollection<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>;\n\n project(pos: number, clip: boolean);\n projectPlacholder(vp: VertexPlaceholder);\n\n moveSubgraphs(transition: boolean): this;\n\n moveVertexPlaceholder(vp: VertexPlaceholder, transition: boolean, moveEdges: boolean): this;\n moveVertices(transition: boolean): this;\n\n moveEdgePlaceholder(ep: EdgePlaceholder, transition: boolean): this;\n moveEdges(transition: boolean): this;\n\n progress(what: \"start\" | \"stop\" | \"layout-start\" | \"layout-tick\" | \"layout-stop\");\n}\n\nexport class Layout implements ILayout {\n\n protected _graph: IGraph;\n protected _running = false;\n\n constructor(graph: IGraph) {\n this._graph = graph;\n }\n\n start(): Promise<this> {\n this._running = true;\n this._graph.progress(\"layout-start\");\n return Promise.resolve(this);\n }\n\n stop() {\n this._running = false;\n this._graph.progress(\"layout-stop\");\n return this;\n }\n\n running(): boolean {\n return this._running;\n }\n\n protected center(points: Point[]): Point {\n if (points.length % 2 === 1) {\n return points[Math.floor(points.length / 2)];\n }\n const p1 = points[points.length / 2 - 1];\n const p2 = points[points.length / 2];\n return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2];\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } {\n const sPos = this._graph.projectPlacholder(ep.source);\n const tPos = this._graph.projectPlacholder(ep.target);\n const points: Point[] = [[sPos.x, sPos.y], [tPos.x, tPos.y]];\n\n if (curveDepth) {\n const dx = points[0][0] - points[1][0];\n const dy = points[0][1] - points[1][1];\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist) {\n const midX = (points[0][0] + points[1][0]) / 2 - dy * curveDepth / 100;\n const midY = (points[0][1] + points[1][1]) / 2 + dx * curveDepth / 100;\n return {\n path: lineCardinal([points[0], [midX, midY], points[1]]),\n labelPos: [midX, midY]\n };\n }\n }\n\n return {\n path: lineBasis(points),\n labelPos: this.center(points)\n };\n }\n}\n","import { Layout } from \"./layout\";\n\nconst rads = (degrees: number) => degrees * Math.PI / 180;\nconst radius = (vertexCount: number, sideLength: number) => sideLength / (2 * Math.sin(rads(180 / vertexCount)));\n\nexport class Circle extends Layout {\n\n constructor(graph, readonly sideLength = 60) {\n super(graph);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const size = this._graph.size();\n const data = this._graph.graphData();\n const vertices = data.allVertices();\n const edges = data.allEdges();\n edges.forEach(e => delete e.points);\n\n const r = radius(vertices.length, this.sideLength);\n const angle = 360 / vertices.length;\n vertices.forEach((v, i) => {\n delete v.fx;\n delete v.fy;\n v.x = size.width / 2 + Math.cos(rads(i * angle)) * r;\n v.y = size.height / 2 + Math.sin(rads(i * angle)) * r;\n });\n this._graph\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n this._running = false;\n return this;\n });\n }\n}\n","import { curveBasis as d3CurveBasis, line as d3Line } from \"d3-shape\";\nimport { dagre, Options } from \"./dagreWorker\";\nimport { Layout, Point } from \"./layout\";\nimport { EdgePlaceholder } from \"./placeholders\";\n\nconst lineBasis = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveBasis)\n ;\n\nconst clusterID = (id: string) => `cluster_${id}`;\nconst rClusterID = (id: string) => id.substring(8);\n\nfunction distance(x1, y1, x2, y2) {\n const a = x1 - x2;\n const b = y1 - y2;\n return Math.sqrt(a * a + b * b);\n}\n\nexport class Dagre extends Layout {\n\n constructor(graph, readonly _options: Options) {\n super(graph);\n }\n\n start() {\n super.start();\n const size = this._graph.size();\n const data = this._graph.graphData();\n\n return dagre({\n subgraphs: data.allSubgraphs().map(s => ({\n ...s.props,\n id: clusterID(s.id)\n })),\n nodes: data.allVertices().map(v => {\n delete v.fx;\n delete v.fy;\n const bbox = v.element.node().getBBox();\n return {\n width: bbox.width,\n height: bbox.height,\n ...v.props\n };\n }),\n links: data.allEdges().map(e => e.props),\n hierarchy: [\n ...data.allSubgraphs()\n .filter(s => !!data.subgraphParent(s.id))\n .map(s => ({\n parent: clusterID(data.subgraphParent(s.id).props.id),\n child: clusterID(s.id)\n })),\n ...data.allVertices()\n .filter(v => data.vertexParent(v.id) !== undefined)\n .map(v => ({\n parent: clusterID(data.vertexParent(v.id).props.id),\n child: v.id\n }))\n ]\n }, this._options).response.then((response: any) => {\n if (this.running()) {\n response.subgraphs.forEach(n => {\n const sg = data.subgraph(rClusterID(n.id));\n sg.x = n.x + size.width / 2;\n sg.y = n.y + size.height / 2;\n sg.props.width = n.width;\n sg.props.height = n.height;\n });\n response.nodes.forEach(n => {\n const v = data.vertex(n.id);\n v.x = n.x + size.width / 2;\n v.y = n.y + size.height / 2;\n });\n response.links.forEach(l => {\n const e = data.edge(l.id);\n const sourceDist = distance(e.source.x, e.source.y, l.points[0][0] + size.width / 2, l.points[0][1] + size.height / 2);\n const targetDist = distance(e.target.x, e.target.y, l.points[0][0] + size.width / 2, l.points[0][1] + size.height / 2);\n e.points = [\n sourceDist < targetDist ? [e.source.x, e.source.y] : [e.target.x, e.target.y],\n ...l.points.map(p => [p[0] + size.width / 2, p[1] + size.height / 2]),\n sourceDist < targetDist ? [e.target.x, e.target.y] : [e.source.x, e.source.y]\n ];\n });\n this._graph\n .moveVertices(true)\n .moveSubgraphs(true)\n .moveEdges(true)\n ;\n this.stop();\n }\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } {\n let points = [];\n let hasNaN = false;\n if (ep.points) {\n points = ep.points.map(p => {\n const x = this._graph.project(p[0], false);\n const y = this._graph.project(p[1], false);\n if (isNaN(x) || isNaN(y)) {\n hasNaN = true;\n }\n return [x, y];\n });\n }\n if (hasNaN || points.length < 2) {\n return super.edgePath(ep, curveDepth);\n }\n return {\n path: lineBasis(points),\n labelPos: this.center(points)\n };\n }\n\n}\n","export interface Subgraph {\n id: string;\n text: string;\n}\n\nexport interface Node {\n id: string;\n text: string;\n}\n\nexport interface Link {\n id: string;\n source: Node;\n target: Node;\n}\n\nexport interface Hierarchy {\n parent: string;\n child: string;\n}\n\nexport interface Data {\n subgraphs: Subgraph[];\n nodes: Node[];\n links: Link[];\n hierarchy: Hierarchy[];\n}\n\nexport interface Options {\n rankdir: \"TB\" | \"BT\" | \"LR\" | \"RL\";\n nodesep: number;\n edgesep: number;\n ranksep: number;\n digraph: boolean;\n}\n\nexport function dagre(data: Data, options: Options) {\n // eslint-disable-next-line quotes\n const workerCode = `!function(){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function t(e){throw new Error('Could not dynamically require \"'+e+'\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var n={exports:{}};n.exports=function(){function e(n,r,o){function i(s,u){if(!r[s]){if(!n[s]){if(!u&&t)return t(s);if(a)return a(s,!0);var c=new Error(\"Cannot find module '\"+s+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var f=r[s]={exports:{}};n[s][0].call(f.exports,(function(e){return i(n[s][1][e]||e)}),f,f.exports,e,n,r,o)}return r[s].exports}for(var a=t,s=0;s<o.length;s++)i(o[s]);return i}return e}()({1:[function(e,t,n){t.exports={graphlib:e(\"./lib/graphlib\"),layout:e(\"./lib/layout\"),debug:e(\"./lib/debug\"),util:{time:e(\"./lib/util\").time,notime:e(\"./lib/util\").notime},version:e(\"./lib/version\")}},{\"./lib/debug\":6,\"./lib/graphlib\":7,\"./lib/layout\":9,\"./lib/util\":29,\"./lib/version\":30}],2:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./greedy-fas\");function i(e){var t=\"greedy\"===e.graph().acyclicer?o(e,n(e)):a(e);function n(e){return function(t){return e.edge(t).weight}}r.forEach(t,(function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.uniqueId(\"rev\"))}))}function a(e){var t=[],n={},o={};function i(a){r.has(o,a)||(o[a]=!0,n[a]=!0,r.forEach(e.outEdges(a),(function(e){r.has(n,e.w)?t.push(e):i(e.w)})),delete n[a])}return r.forEach(e.nodes(),i),t}function s(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}}))}t.exports={run:i,undo:s}},{\"./greedy-fas\":8,\"./lodash\":10}],3:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\");function i(e){function t(n){var o=e.children(n),i=e.node(n);if(o.length&&r.forEach(o,t),r.has(i,\"minRank\")){i.borderLeft=[],i.borderRight=[];for(var s=i.minRank,u=i.maxRank+1;s<u;++s)a(e,\"borderLeft\",\"_bl\",n,i,s),a(e,\"borderRight\",\"_br\",n,i,s)}}r.forEach(e.children(),t)}function a(e,t,n,r,i,a){var s={width:0,height:0,rank:a,borderType:t},u=i[t][a-1],c=o.addDummyNode(e,\"border\",s,n);i[t][a]=c,e.setParent(c,r),u&&e.setEdge(u,c,{weight:1})}t.exports=i},{\"./lodash\":10,\"./util\":29}],4:[function(e,t,n){var r=e(\"./lodash\");function o(e){var t=e.graph().rankdir.toLowerCase();\"lr\"!==t&&\"rl\"!==t||a(e)}function i(e){var t=e.graph().rankdir.toLowerCase();\"bt\"!==t&&\"rl\"!==t||u(e),\"lr\"!==t&&\"rl\"!==t||(f(e),a(e))}function a(e){r.forEach(e.nodes(),(function(t){s(e.node(t))})),r.forEach(e.edges(),(function(t){s(e.edge(t))}))}function s(e){var t=e.width;e.width=e.height,e.height=t}function u(e){r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,c),r.has(n,\"y\")&&c(n)}))}function c(e){e.y=-e.y}function f(e){r.forEach(e.nodes(),(function(t){d(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.forEach(n.points,d),r.has(n,\"x\")&&d(n)}))}function d(e){var t=e.x;e.x=e.y,e.y=t}t.exports={adjust:o,undo:i}},{\"./lodash\":10}],5:[function(e,t,n){function r(){var e={};e._next=e._prev=e,this._sentinel=e}function o(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function i(e,t){if(\"_next\"!==e&&\"_prev\"!==e)return t}t.exports=r,r.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return o(t),t},r.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&o(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},r.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,i)),n=n._prev;return\"[\"+e.join(\", \")+\"]\"}},{}],6:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\"),i=e(\"./graphlib\").Graph;function a(e){var t=o.buildLayerMatrix(e),n=new i({compound:!0,multigraph:!0}).setGraph({});return r.forEach(e.nodes(),(function(t){n.setNode(t,{label:t}),n.setParent(t,\"layer\"+e.node(t).rank)})),r.forEach(e.edges(),(function(e){n.setEdge(e.v,e.w,{},e.name)})),r.forEach(t,(function(e,t){var o=\"layer\"+t;n.setNode(o,{rank:\"same\"}),r.reduce(e,(function(e,t){return n.setEdge(e,t,{style:\"invis\"}),t}))})),n}t.exports={debugOrdering:a}},{\"./graphlib\":7,\"./lodash\":10,\"./util\":29}],7:[function(e,t,n){var r;if(\"function\"==typeof e)try{r=e(\"graphlib\")}catch(e){}r||(r=window.graphlib),t.exports=r},{graphlib:31}],8:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./graphlib\").Graph,i=e(\"./data/list\");t.exports=s;var a=r.constant(1);function s(e,t){if(e.nodeCount()<=1)return[];var n=f(e,t||a),o=u(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(o,(function(t){return e.outEdges(t.v,t.w)})),!0)}function u(e,t,n){for(var r,o=[],i=t[t.length-1],a=t[0];e.nodeCount();){for(;r=a.dequeue();)c(e,t,n,r);for(;r=i.dequeue();)c(e,t,n,r);if(e.nodeCount())for(var s=t.length-2;s>0;--s)if(r=t[s].dequeue()){o=o.concat(c(e,t,n,r,!0));break}}return o}function c(e,t,n,o,i){var a=i?[]:void 0;return r.forEach(e.inEdges(o.v),(function(r){var o=e.edge(r),s=e.node(r.v);i&&a.push({v:r.v,w:r.w}),s.out-=o,d(t,n,s)})),r.forEach(e.outEdges(o.v),(function(r){var o=e.edge(r),i=r.w,a=e.node(i);a.in-=o,d(t,n,a)})),e.removeNode(o.v),a}function f(e,t){var n=new o,a=0,s=0;r.forEach(e.nodes(),(function(e){n.setNode(e,{v:e,in:0,out:0})})),r.forEach(e.edges(),(function(e){var r=n.edge(e.v,e.w)||0,o=t(e),i=r+o;n.setEdge(e.v,e.w,i),s=Math.max(s,n.node(e.v).out+=o),a=Math.max(a,n.node(e.w).in+=o)}));var u=r.range(s+a+3).map((function(){return new i})),c=a+1;return r.forEach(n.nodes(),(function(e){d(u,c,n.node(e))})),{graph:n,buckets:u,zeroIdx:c}}function d(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},{\"./data/list\":5,\"./graphlib\":7,\"./lodash\":10}],9:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./acyclic\"),i=e(\"./normalize\"),a=e(\"./rank\"),s=e(\"./util\").normalizeRanks,u=e(\"./parent-dummy-chains\"),c=e(\"./util\").removeEmptyRanks,f=e(\"./nesting-graph\"),d=e(\"./add-border-segments\"),h=e(\"./coordinate-system\"),l=e(\"./order\"),p=e(\"./position\"),v=e(\"./util\"),_=e(\"./graphlib\").Graph;function y(e,t){var n=t&&t.debugTiming?v.time:v.notime;n(\"layout\",(function(){var t=n(\" buildLayoutGraph\",(function(){return I(e)}));n(\" runLayout\",(function(){g(t,n)})),n(\" updateInputGraph\",(function(){b(e,t)}))}))}function g(e,t){t(\" makeSpaceForEdgeLabels\",(function(){S(e)})),t(\" removeSelfEdges\",(function(){B(e)})),t(\" acyclic\",(function(){o.run(e)})),t(\" nestingGraph.run\",(function(){f.run(e)})),t(\" rank\",(function(){a(v.asNonCompoundGraph(e))})),t(\" injectEdgeLabelProxies\",(function(){C(e)})),t(\" removeEmptyRanks\",(function(){c(e)})),t(\" nestingGraph.cleanup\",(function(){f.cleanup(e)})),t(\" normalizeRanks\",(function(){s(e)})),t(\" assignRankMinMax\",(function(){N(e)})),t(\" removeEdgeLabelProxies\",(function(){T(e)})),t(\" normalize.run\",(function(){i.run(e)})),t(\" parentDummyChains\",(function(){u(e)})),t(\" addBorderSegments\",(function(){d(e)})),t(\" order\",(function(){l(e)})),t(\" insertSelfEdges\",(function(){G(e)})),t(\" adjustCoordinateSystem\",(function(){h.adjust(e)})),t(\" position\",(function(){p(e)})),t(\" positionSelfEdges\",(function(){R(e)})),t(\" removeBorderNodes\",(function(){D(e)})),t(\" normalize.undo\",(function(){i.undo(e)})),t(\" fixupEdgeLabelCoords\",(function(){P(e)})),t(\" undoCoordinateSystem\",(function(){h.undo(e)})),t(\" translateGraph\",(function(){M(e)})),t(\" assignNodeIntersects\",(function(){L(e)})),t(\" reversePoints\",(function(){F(e)})),t(\" acyclic.undo\",(function(){o.undo(e)}))}function b(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),o=t.node(n);r&&(r.x=o.x,r.y=o.y,t.children(n).length&&(r.width=o.width,r.height=o.height))})),r.forEach(e.edges(),(function(n){var o=e.edge(n),i=t.edge(n);o.points=i.points,r.has(i,\"x\")&&(o.x=i.x,o.y=i.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}t.exports=y;var m=[\"nodesep\",\"edgesep\",\"ranksep\",\"marginx\",\"marginy\"],x={ranksep:50,edgesep:20,nodesep:50,rankdir:\"tb\"},w=[\"acyclicer\",\"ranker\",\"rankdir\",\"align\"],E=[\"width\",\"height\"],j={width:0,height:0},k=[\"minlen\",\"weight\",\"width\",\"height\",\"labeloffset\"],A={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:\"r\"},O=[\"labelpos\"];function I(e){var t=new _({multigraph:!0,compound:!0}),n=z(e.graph());return t.setGraph(r.merge({},x,U(n,m),r.pick(n,w))),r.forEach(e.nodes(),(function(n){var o=z(e.node(n));t.setNode(n,r.defaults(U(o,E),j)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var o=z(e.edge(n));t.setEdge(n,r.merge({},A,U(o,k),r.pick(o,O)))})),t}function S(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,\"c\"!==r.labelpos.toLowerCase()&&(\"TB\"===t.rankdir||\"BT\"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}function C(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),o={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};v.addDummyNode(e,\"edge-proxy\",o,\"_ep\")}}))}function N(e){var t=0;r.forEach(e.nodes(),(function(n){var o=e.node(n);o.borderTop&&(o.minRank=e.node(o.borderTop).rank,o.maxRank=e.node(o.borderBottom).rank,t=r.max(t,o.maxRank))})),e.graph().maxRank=t}function T(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);\"edge-proxy\"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}function M(e){var t=Number.POSITIVE_INFINITY,n=0,o=Number.POSITIVE_INFINITY,i=0,a=e.graph(),s=a.marginx||0,u=a.marginy||0;function c(e){var r=e.x,a=e.y,s=e.width,u=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),o=Math.min(o,a-u/2),i=Math.max(i,a+u/2)}r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,\"x\")&&c(n)})),t-=s,o-=u,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=o})),r.forEach(e.edges(),(function(n){var i=e.edge(n);r.forEach(i.points,(function(e){e.x-=t,e.y-=o})),r.has(i,\"x\")&&(i.x-=t),r.has(i,\"y\")&&(i.y-=o)})),a.width=n-t+s,a.height=i-o+u}function L(e){r.forEach(e.edges(),(function(t){var n,r,o=e.edge(t),i=e.node(t.v),a=e.node(t.w);o.points?(n=o.points[0],r=o.points[o.points.length-1]):(o.points=[],n=a,r=i),o.points.unshift(v.intersectRect(i,n)),o.points.push(v.intersectRect(a,r))}))}function P(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,\"x\"))switch(\"l\"!==n.labelpos&&\"r\"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case\"l\":n.x-=n.width/2+n.labeloffset;break;case\"r\":n.x+=n.width/2+n.labeloffset}}))}function F(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}function D(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),o=e.node(n.borderTop),i=e.node(n.borderBottom),a=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(i.y-o.y),n.x=a.x+n.width/2,n.y=o.y+n.height/2}})),r.forEach(e.nodes(),(function(t){\"border\"===e.node(t).dummy&&e.removeNode(t)}))}function B(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}function G(e){var t=v.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,o){var i=e.node(t);i.order=o+n,r.forEach(i.selfEdges,(function(t){v.addDummyNode(e,\"selfedge\",{width:t.label.width,height:t.label.height,rank:i.rank,order:o+ ++n,e:t.e,label:t.label},\"_se\")})),delete i.selfEdges}))}))}function R(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if(\"selfedge\"===n.dummy){var r=e.node(n.e.v),o=r.x+r.width/2,i=r.y,a=n.x-o,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:o+2*a/3,y:i-s},{x:o+5*a/6,y:i-s},{x:o+a,y:i},{x:o+5*a/6,y:i+s},{x:o+2*a/3,y:i+s}],n.label.x=n.x,n.label.y=n.y}}))}function U(e,t){return r.mapValues(r.pick(e,t),Number)}function z(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},{\"./acyclic\":2,\"./add-border-segments\":3,\"./coordinate-system\":4,\"./graphlib\":7,\"./lodash\":10,\"./nesting-graph\":11,\"./normalize\":12,\"./order\":17,\"./parent-dummy-chains\":22,\"./position\":24,\"./rank\":26,\"./util\":29}],10:[function(e,t,n){var r;if(\"function\"==typeof e)try{r={cloneDeep:e(\"lodash/cloneDeep\"),constant:e(\"lodash/constant\"),defaults:e(\"lodash/defaults\"),each:e(\"lodash/each\"),filter:e(\"lodash/filter\"),find:e(\"lodash/find\"),flatten:e(\"lodash/flatten\"),forEach:e(\"lodash/forEach\"),forIn:e(\"lodash/forIn\"),has:e(\"lodash/has\"),isUndefined:e(\"lodash/isUndefined\"),last:e(\"lodash/last\"),map:e(\"lodash/map\"),mapValues:e(\"lodash/mapValues\"),max:e(\"lodash/max\"),merge:e(\"lodash/merge\"),min:e(\"lodash/min\"),minBy:e(\"lodash/minBy\"),now:e(\"lodash/now\"),pick:e(\"lodash/pick\"),range:e(\"lodash/range\"),reduce:e(\"lodash/reduce\"),sortBy:e(\"lodash/sortBy\"),uniqueId:e(\"lodash/uniqueId\"),values:e(\"lodash/values\"),zipObject:e(\"lodash/zipObject\")}}catch(e){}r||(r=window._),t.exports=r},{\"lodash/cloneDeep\":227,\"lodash/constant\":228,\"lodash/defaults\":229,\"lodash/each\":230,\"lodash/filter\":232,\"lodash/find\":233,\"lodash/flatten\":235,\"lodash/forEach\":236,\"lodash/forIn\":237,\"lodash/has\":239,\"lodash/isUndefined\":258,\"lodash/last\":261,\"lodash/map\":262,\"lodash/mapValues\":263,\"lodash/max\":264,\"lodash/merge\":266,\"lodash/min\":267,\"lodash/minBy\":268,\"lodash/now\":270,\"lodash/pick\":271,\"lodash/range\":273,\"lodash/reduce\":274,\"lodash/sortBy\":276,\"lodash/uniqueId\":286,\"lodash/values\":287,\"lodash/zipObject\":288}],11:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\");function i(e){var t=o.addDummyNode(e,\"root\",{},\"_root\"),n=s(e),i=r.max(r.values(n))-1,c=2*i+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=c}));var f=u(e)+1;r.forEach(e.children(),(function(r){a(e,t,c,f,i,n,r)})),e.graph().nodeRankFactor=c}function a(e,t,n,i,s,u,c){var f=e.children(c);if(f.length){var d=o.addBorderNode(e,\"_bt\"),h=o.addBorderNode(e,\"_bb\"),l=e.node(c);e.setParent(d,c),l.borderTop=d,e.setParent(h,c),l.borderBottom=h,r.forEach(f,(function(r){a(e,t,n,i,s,u,r);var o=e.node(r),f=o.borderTop?o.borderTop:r,l=o.borderBottom?o.borderBottom:r,p=o.borderTop?i:2*i,v=f!==l?1:s-u[c]+1;e.setEdge(d,f,{weight:p,minlen:v,nestingEdge:!0}),e.setEdge(l,h,{weight:p,minlen:v,nestingEdge:!0})})),e.parent(c)||e.setEdge(t,d,{weight:0,minlen:s+u[c]})}else c!==t&&e.setEdge(t,c,{weight:0,minlen:n})}function s(e){var t={};function n(o,i){var a=e.children(o);a&&a.length&&r.forEach(a,(function(e){n(e,i+1)})),t[o]=i}return r.forEach(e.children(),(function(e){n(e,1)})),t}function u(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}function c(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}t.exports={run:i,cleanup:c}},{\"./lodash\":10,\"./util\":29}],12:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./util\");function i(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){a(e,t)}))}function a(e,t){var n=t.v,r=e.node(n).rank,i=t.w,a=e.node(i).rank,s=t.name,u=e.edge(t),c=u.labelRank;if(a!==r+1){var f,d,h;for(e.removeEdge(t),h=0,++r;r<a;++h,++r)u.points=[],d={width:0,height:0,edgeLabel:u,edgeObj:t,rank:r},f=o.addDummyNode(e,\"edge\",d,\"_d\"),r===c&&(d.width=u.width,d.height=u.height,d.dummy=\"edge-label\",d.labelpos=u.labelpos),e.setEdge(n,f,{weight:u.weight},s),0===h&&e.graph().dummyChains.push(f),n=f;e.setEdge(n,i,{weight:u.weight},s)}}function s(e){r.forEach(e.graph().dummyChains,(function(t){var n,r=e.node(t),o=r.edgeLabel;for(e.setEdge(r.edgeObj,o);r.dummy;)n=e.successors(t)[0],e.removeNode(t),o.points.push({x:r.x,y:r.y}),\"edge-label\"===r.dummy&&(o.x=r.x,o.y=r.y,o.width=r.width,o.height=r.height),t=n,r=e.node(t)}))}t.exports={run:i,undo:s}},{\"./lodash\":10,\"./util\":29}],13:[function(e,t,n){var r=e(\"../lodash\");function o(e,t,n){var o,i={};r.forEach(n,(function(n){for(var r,a,s=e.parent(n);s;){if((r=e.parent(s))?(a=i[r],i[r]=s):(a=o,o=s),a&&a!==s)return void t.setEdge(a,s);s=r}}))}t.exports=o},{\"../lodash\":10}],14:[function(e,t,n){var r=e(\"../lodash\");function o(e,t){return r.map(t,(function(t){var n=e.inEdges(t);if(n.length){var o=r.reduce(n,(function(t,n){var r=e.edge(n),o=e.node(n.v);return{sum:t.sum+r.weight*o.order,weight:t.weight+r.weight}}),{sum:0,weight:0});return{v:t,barycenter:o.sum/o.weight,weight:o.weight}}return{v:t}}))}t.exports=o},{\"../lodash\":10}],15:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graphlib\").Graph;function i(e,t,n){var i=a(e),s=new o({compound:!0}).setGraph({root:i}).setDefaultNodeLabel((function(t){return e.node(t)}));return r.forEach(e.nodes(),(function(o){var a=e.node(o),u=e.parent(o);(a.rank===t||a.minRank<=t&&t<=a.maxRank)&&(s.setNode(o),s.setParent(o,u||i),r.forEach(e[n](o),(function(t){var n=t.v===o?t.w:t.v,i=s.edge(n,o),a=r.isUndefined(i)?0:i.weight;s.setEdge(n,o,{weight:e.edge(t).weight+a})})),r.has(a,\"minRank\")&&s.setNode(o,{borderLeft:a.borderLeft[t],borderRight:a.borderRight[t]}))})),s}function a(e){for(var t;e.hasNode(t=r.uniqueId(\"_root\")););return t}t.exports=i},{\"../graphlib\":7,\"../lodash\":10}],16:[function(e,t,n){var r=e(\"../lodash\");function o(e,t){for(var n=0,r=1;r<t.length;++r)n+=i(e,t[r-1],t[r]);return n}function i(e,t,n){for(var o=r.zipObject(n,r.map(n,(function(e,t){return t}))),i=r.flatten(r.map(t,(function(t){return r.sortBy(r.map(e.outEdges(t),(function(t){return{pos:o[t.w],weight:e.edge(t).weight}})),\"pos\")})),!0),a=1;a<n.length;)a<<=1;var s=2*a-1;a-=1;var u=r.map(new Array(s),(function(){return 0})),c=0;return r.forEach(i.forEach((function(e){var t=e.pos+a;u[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=u[t+1]),u[t=t-1>>1]+=e.weight;c+=e.weight*n}))),c}t.exports=o},{\"../lodash\":10}],17:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./init-order\"),i=e(\"./cross-count\"),a=e(\"./sort-subgraph\"),s=e(\"./build-layer-graph\"),u=e(\"./add-subgraph-constraints\"),c=e(\"../graphlib\").Graph,f=e(\"../util\");function d(e){var t=f.maxRank(e),n=h(e,r.range(1,t+1),\"inEdges\"),a=h(e,r.range(t-1,-1,-1),\"outEdges\"),s=o(e);p(e,s);for(var u,c=Number.POSITIVE_INFINITY,d=0,v=0;v<4;++d,++v){l(d%2?n:a,d%4>=2),s=f.buildLayerMatrix(e);var _=i(e,s);_<c&&(v=0,u=r.cloneDeep(s),c=_)}p(e,u)}function h(e,t,n){return r.map(t,(function(t){return s(e,t,n)}))}function l(e,t){var n=new c;r.forEach(e,(function(e){var o=e.graph().root,i=a(e,o,n,t);r.forEach(i.vs,(function(t,n){e.node(t).order=n})),u(e,n,i.vs)}))}function p(e,t){r.forEach(t,(function(t){r.forEach(t,(function(t,n){e.node(t).order=n}))}))}t.exports=d},{\"../graphlib\":7,\"../lodash\":10,\"../util\":29,\"./add-subgraph-constraints\":13,\"./build-layer-graph\":15,\"./cross-count\":16,\"./init-order\":18,\"./sort-subgraph\":20}],18:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t={},n=r.filter(e.nodes(),(function(t){return!e.children(t).length})),o=r.max(r.map(n,(function(t){return e.node(t).rank}))),i=r.map(r.range(o+1),(function(){return[]}));function a(n){if(!r.has(t,n)){t[n]=!0;var o=e.node(n);i[o.rank].push(n),r.forEach(e.successors(n),a)}}var s=r.sortBy(n,(function(t){return e.node(t).rank}));return r.forEach(s,a),i}t.exports=o},{\"../lodash\":10}],19:[function(e,t,n){var r=e(\"../lodash\");function o(e,t){var n={};return r.forEach(e,(function(e,t){var o=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};r.isUndefined(e.barycenter)||(o.barycenter=e.barycenter,o.weight=e.weight)})),r.forEach(t.edges(),(function(e){var t=n[e.v],o=n[e.w];r.isUndefined(t)||r.isUndefined(o)||(o.indegree++,t.out.push(n[e.w]))})),i(r.filter(n,(function(e){return!e.indegree})))}function i(e){var t=[];function n(e){return function(t){t.merged||(r.isUndefined(t.barycenter)||r.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&a(e,t)}}function o(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var i=e.pop();t.push(i),r.forEach(i.in.reverse(),n(i)),r.forEach(i.out,o(i))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,[\"vs\",\"i\",\"barycenter\",\"weight\"])}))}function a(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}t.exports=o},{\"../lodash\":10}],20:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./barycenter\"),i=e(\"./resolve-conflicts\"),a=e(\"./sort\");function s(e,t,n,f){var d=e.children(t),h=e.node(t),l=h?h.borderLeft:void 0,p=h?h.borderRight:void 0,v={};l&&(d=r.filter(d,(function(e){return e!==l&&e!==p})));var _=o(e,d);r.forEach(_,(function(t){if(e.children(t.v).length){var o=s(e,t.v,n,f);v[t.v]=o,r.has(o,\"barycenter\")&&c(t,o)}}));var y=i(_,n);u(y,v);var g=a(y,f);if(l&&(g.vs=r.flatten([l,g.vs,p],!0),e.predecessors(l).length)){var b=e.node(e.predecessors(l)[0]),m=e.node(e.predecessors(p)[0]);r.has(g,\"barycenter\")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+b.order+m.order)/(g.weight+2),g.weight+=2}return g}function u(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}function c(e,t){r.isUndefined(e.barycenter)?(e.barycenter=t.barycenter,e.weight=t.weight):(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight)}t.exports=s},{\"../lodash\":10,\"./barycenter\":14,\"./resolve-conflicts\":19,\"./sort\":21}],21:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../util\");function i(e,t){var n=o.partition(e,(function(e){return r.has(e,\"barycenter\")})),i=n.lhs,u=r.sortBy(n.rhs,(function(e){return-e.i})),c=[],f=0,d=0,h=0;i.sort(s(!!t)),h=a(c,u,h),r.forEach(i,(function(e){h+=e.vs.length,c.push(e.vs),f+=e.barycenter*e.weight,d+=e.weight,h=a(c,u,h)}));var l={vs:r.flatten(c,!0)};return d&&(l.barycenter=f/d,l.weight=d),l}function a(e,t,n){for(var o;t.length&&(o=r.last(t)).i<=n;)t.pop(),e.push(o.vs),n++;return n}function s(e){return function(t,n){return t.barycenter<n.barycenter?-1:t.barycenter>n.barycenter?1:e?n.i-t.i:t.i-n.i}}t.exports=i},{\"../lodash\":10,\"../util\":29}],22:[function(e,t,n){var r=e(\"./lodash\");function o(e){var t=a(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),o=r.edgeObj,a=i(e,t,o.v,o.w),s=a.path,u=a.lca,c=0,f=s[c],d=!0;n!==o.w;){if(r=e.node(n),d){for(;(f=s[c])!==u&&e.node(f).maxRank<r.rank;)c++;f===u&&(d=!1)}if(!d){for(;c<s.length-1&&e.node(f=s[c+1]).minRank<=r.rank;)c++;f=s[c]}e.setParent(n,f),n=e.successors(n)[0]}}))}function i(e,t,n,r){var o,i,a=[],s=[],u=Math.min(t[n].low,t[r].low),c=Math.max(t[n].lim,t[r].lim);o=n;do{o=e.parent(o),a.push(o)}while(o&&(t[o].low>u||c>t[o].lim));for(i=o,o=r;(o=e.parent(o))!==i;)s.push(o);return{path:a.concat(s.reverse()),lca:i}}function a(e){var t={},n=0;function o(i){var a=n;r.forEach(e.children(i),o),t[i]={low:a,lim:n++}}return r.forEach(e.children(),o),t}t.exports=o},{\"./lodash\":10}],23:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graphlib\").Graph,i=e(\"../util\");function a(e,t){var n={};function o(t,o){var i=0,a=0,s=t.length,f=r.last(o);return r.forEach(o,(function(t,d){var h=u(e,t),l=h?e.node(h).order:s;(h||t===f)&&(r.forEach(o.slice(a,d+1),(function(t){r.forEach(e.predecessors(t),(function(r){var o=e.node(r),a=o.order;!(a<i||l<a)||o.dummy&&e.node(t).dummy||c(n,r,t)}))})),a=d+1,i=l)})),o}return r.reduce(t,o),n}function s(e,t){var n={};function o(t,o,i,a,s){var u;r.forEach(r.range(o,i),(function(o){u=t[o],e.node(u).dummy&&r.forEach(e.predecessors(u),(function(t){var r=e.node(t);r.dummy&&(r.order<a||r.order>s)&&c(n,t,u)}))}))}function i(t,n){var i,a=-1,s=0;return r.forEach(n,(function(r,u){if(\"border\"===e.node(r).dummy){var c=e.predecessors(r);c.length&&(i=e.node(c[0]).order,o(n,s,u,a,i),s=u,a=i)}o(n,s,n.length,i,t.length)})),n}return r.reduce(t,i),n}function u(e,t){if(e.node(t).dummy)return r.find(e.predecessors(t),(function(t){return e.node(t).dummy}))}function c(e,t,n){if(t>n){var r=t;t=n,n=r}var o=e[t];o||(e[t]=o={}),o[n]=!0}function f(e,t,n){if(t>n){var o=t;t=n,n=o}return r.has(e[t],n)}function d(e,t,n,o){var i={},a={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){i[e]=e,a[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var u=o(e);if(u.length){u=r.sortBy(u,(function(e){return s[e]}));for(var c=(u.length-1)/2,d=Math.floor(c),h=Math.ceil(c);d<=h;++d){var l=u[d];a[e]===e&&t<s[l]&&!f(n,e,l)&&(a[l]=e,a[e]=i[e]=i[l],t=s[l])}}}))})),{root:i,align:a}}function h(e,t,n,o,i){var a={},s=l(e,t,n,i),u=i?\"borderLeft\":\"borderRight\";function c(e,t){for(var n=s.nodes(),r=n.pop(),o={};r;)o[r]?e(r):(o[r]=!0,n.push(r),n=n.concat(t(r))),r=n.pop()}function f(e){a[e]=s.inEdges(e).reduce((function(e,t){return Math.max(e,a[t.v]+s.edge(t))}),0)}function d(t){var n=s.outEdges(t).reduce((function(e,t){return Math.min(e,a[t.w]-s.edge(t))}),Number.POSITIVE_INFINITY),r=e.node(t);n!==Number.POSITIVE_INFINITY&&r.borderType!==u&&(a[t]=Math.max(a[t],n))}return c(f,s.predecessors.bind(s)),c(d,s.successors.bind(s)),r.forEach(o,(function(e){a[e]=a[n[e]]})),a}function l(e,t,n,i){var a=new o,s=e.graph(),u=g(s.nodesep,s.edgesep,i);return r.forEach(t,(function(t){var o;r.forEach(t,(function(t){var r=n[t];if(a.setNode(r),o){var i=n[o],s=a.edge(i,r);a.setEdge(i,r,Math.max(u(e,t,o),s||0))}o=t}))})),a}function p(e,t){return r.minBy(r.values(t),(function(t){var n=Number.NEGATIVE_INFINITY,o=Number.POSITIVE_INFINITY;return r.forIn(t,(function(t,r){var i=b(e,r)/2;n=Math.max(t+i,n),o=Math.min(t-i,o)})),n-o}))}function v(e,t){var n=r.values(t),o=r.min(n),i=r.max(n);r.forEach([\"u\",\"d\"],(function(n){r.forEach([\"l\",\"r\"],(function(a){var s,u=n+a,c=e[u];if(c!==t){var f=r.values(c);(s=\"l\"===a?o-r.min(f):i-r.max(f))&&(e[u]=r.mapValues(c,(function(e){return e+s})))}}))}))}function _(e,t){return r.mapValues(e.ul,(function(n,o){if(t)return e[t.toLowerCase()][o];var i=r.sortBy(r.map(e,o));return(i[1]+i[2])/2}))}function y(e){var t,n=i.buildLayerMatrix(e),o=r.merge(a(e,n),s(e,n)),u={};r.forEach([\"u\",\"d\"],(function(i){t=\"u\"===i?n:r.values(n).reverse(),r.forEach([\"l\",\"r\"],(function(n){\"r\"===n&&(t=r.map(t,(function(e){return r.values(e).reverse()})));var a=(\"u\"===i?e.predecessors:e.successors).bind(e),s=d(e,t,o,a),c=h(e,t,s.root,s.align,\"r\"===n);\"r\"===n&&(c=r.mapValues(c,(function(e){return-e}))),u[i+n]=c}))}));var c=p(e,u);return v(u,c),_(u,e.graph().align)}function g(e,t,n){return function(o,i,a){var s,u=o.node(i),c=o.node(a),f=0;if(f+=u.width/2,r.has(u,\"labelpos\"))switch(u.labelpos.toLowerCase()){case\"l\":s=-u.width/2;break;case\"r\":s=u.width/2}if(s&&(f+=n?s:-s),s=0,f+=(u.dummy?t:e)/2,f+=(c.dummy?t:e)/2,f+=c.width/2,r.has(c,\"labelpos\"))switch(c.labelpos.toLowerCase()){case\"l\":s=c.width/2;break;case\"r\":s=-c.width/2}return s&&(f+=n?s:-s),s=0,f}}function b(e,t){return e.node(t).width}t.exports={positionX:y,findType1Conflicts:a,findType2Conflicts:s,addConflict:c,hasConflict:f,verticalAlignment:d,horizontalCompaction:h,alignCoordinates:v,findSmallestWidthAlignment:p,balance:_}},{\"../graphlib\":7,\"../lodash\":10,\"../util\":29}],24:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../util\"),i=e(\"./bk\").positionX;function a(e){s(e=o.asNonCompoundGraph(e)),r.forEach(i(e),(function(t,n){e.node(n).x=t}))}function s(e){var t=o.buildLayerMatrix(e),n=e.graph().ranksep,i=0;r.forEach(t,(function(t){var o=r.max(r.map(t,(function(t){return e.node(t).height})));r.forEach(t,(function(t){e.node(t).y=i+o/2})),i+=o+n}))}t.exports=a},{\"../lodash\":10,\"../util\":29,\"./bk\":23}],25:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graphlib\").Graph,i=e(\"./util\").slack;function a(e){var t,n,r=new o({directed:!1}),a=e.nodes()[0],f=e.nodeCount();for(r.setNode(a,{});s(r,e)<f;)t=u(r,e),n=r.hasNode(t.v)?i(e,t):-i(e,t),c(r,e,n);return r}function s(e,t){function n(o){r.forEach(t.nodeEdges(o),(function(r){var a=r.v,s=o===a?r.w:a;e.hasNode(s)||i(t,r)||(e.setNode(s,{}),e.setEdge(o,s,{}),n(s))}))}return r.forEach(e.nodes(),n),e.nodeCount()}function u(e,t){return r.minBy(t.edges(),(function(n){if(e.hasNode(n.v)!==e.hasNode(n.w))return i(t,n)}))}function c(e,t,n){r.forEach(e.nodes(),(function(e){t.node(e).rank+=n}))}t.exports=a},{\"../graphlib\":7,\"../lodash\":10,\"./util\":28}],26:[function(e,t,n){var r=e(\"./util\").longestPath,o=e(\"./feasible-tree\"),i=e(\"./network-simplex\");function a(e){switch(e.graph().ranker){case\"network-simplex\":default:c(e);break;case\"tight-tree\":u(e);break;case\"longest-path\":s(e)}}t.exports=a;var s=r;function u(e){r(e),o(e)}function c(e){i(e)}},{\"./feasible-tree\":25,\"./network-simplex\":27,\"./util\":28}],27:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./feasible-tree\"),i=e(\"./util\").slack,a=e(\"./util\").longestPath,s=e(\"../graphlib\").alg.preorder,u=e(\"../graphlib\").alg.postorder,c=e(\"../util\").simplify;function f(e){e=c(e),a(e);var t,n=o(e);for(p(n),d(n,e);t=_(n);)g(n,e,t,y(n,e,t))}function d(e,t){var n=u(e,e.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){h(e,t,n)}))}function h(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=l(e,t,n)}function l(e,t,n){var o=e.node(n).parent,i=!0,a=t.edge(n,o),s=0;return a||(i=!1,a=t.edge(o,n)),s=a.weight,r.forEach(t.nodeEdges(n),(function(r){var a=r.v===n,u=a?r.w:r.v;if(u!==o){var c=a===i,f=t.edge(r).weight;if(s+=c?f:-f,m(e,n,u)){var d=e.edge(n,u).cutvalue;s+=c?-d:d}}})),s}function p(e,t){arguments.length<2&&(t=e.nodes()[0]),v(e,{},1,t)}function v(e,t,n,o,i){var a=n,s=e.node(o);return t[o]=!0,r.forEach(e.neighbors(o),(function(i){r.has(t,i)||(n=v(e,t,n,i,o))})),s.low=a,s.lim=n++,i?s.parent=i:delete s.parent,n}function _(e){return r.find(e.edges(),(function(t){return e.edge(t).cutvalue<0}))}function y(e,t,n){var o=n.v,a=n.w;t.hasEdge(o,a)||(o=n.w,a=n.v);var s=e.node(o),u=e.node(a),c=s,f=!1;s.lim>u.lim&&(c=u,f=!0);var d=r.filter(t.edges(),(function(t){return f===x(e,e.node(t.v),c)&&f!==x(e,e.node(t.w),c)}));return r.minBy(d,(function(e){return i(t,e)}))}function g(e,t,n,r){var o=n.v,i=n.w;e.removeEdge(o,i),e.setEdge(r.v,r.w,{}),p(e),d(e,t),b(e,t)}function b(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),o=s(e,n);o=o.slice(1),r.forEach(o,(function(n){var r=e.node(n).parent,o=t.edge(n,r),i=!1;o||(o=t.edge(r,n),i=!0),t.node(n).rank=t.node(r).rank+(i?o.minlen:-o.minlen)}))}function m(e,t,n){return e.hasEdge(t,n)}function x(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}t.exports=f,f.initLowLimValues=p,f.initCutValues=d,f.calcCutValue=l,f.leaveEdge=_,f.enterEdge=y,f.exchangeEdges=g},{\"../graphlib\":7,\"../lodash\":10,\"../util\":29,\"./feasible-tree\":25,\"./util\":28}],28:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t={};function n(o){var i=e.node(o);if(r.has(t,o))return i.rank;t[o]=!0;var a=r.min(r.map(e.outEdges(o),(function(t){return n(t.w)-e.edge(t).minlen})));return a!==Number.POSITIVE_INFINITY&&null!=a||(a=0),i.rank=a}r.forEach(e.sources(),n)}function i(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}t.exports={longestPath:o,slack:i}},{\"../lodash\":10}],29:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./graphlib\").Graph;function i(e,t,n,o){var i;do{i=r.uniqueId(o)}while(e.hasNode(i));return n.dummy=t,e.setNode(i,n),i}function a(e){var t=(new o).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},o=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})})),t}function s(e){var t=new o({multigraph:e.isMultigraph()}).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){e.children(n).length||t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){t.setEdge(n,e.edge(n))})),t}function u(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.outEdges(t),(function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)}function c(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.inEdges(t),(function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)}function f(e,t){var n,r,o=e.x,i=e.y,a=t.x-o,s=t.y-i,u=e.width/2,c=e.height/2;if(!a&&!s)throw new Error(\"Not possible to find intersection inside of the rectangle\");return Math.abs(s)*u>Math.abs(a)*c?(s<0&&(c=-c),n=c*a/s,r=c):(a<0&&(u=-u),n=u,r=u*s/a),{x:o+n,y:i+r}}function d(e){var t=r.map(r.range(v(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var o=e.node(n),i=o.rank;r.isUndefined(i)||(t[i][o.order]=n)})),t}function h(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var o=e.node(n);r.has(o,\"rank\")&&(o.rank-=t)}))}function l(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var o=e.node(r).rank-t;n[o]||(n[o]=[]),n[o].push(r)}));var o=0,i=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%i!=0?--o:o&&r.forEach(t,(function(t){e.node(t).rank+=o}))}))}function p(e,t,n,r){var o={width:0,height:0};return arguments.length>=4&&(o.rank=n,o.order=r),i(e,\"border\",o,t)}function v(e){return r.max(r.map(e.nodes(),(function(t){var n=e.node(t).rank;if(!r.isUndefined(n))return n})))}function _(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n}function y(e,t){var n=r.now();try{return t()}finally{console.log(e+\" time: \"+(r.now()-n)+\"ms\")}}function g(e,t){return t()}t.exports={addDummyNode:i,simplify:a,asNonCompoundGraph:s,successorWeights:u,predecessorWeights:c,intersectRect:f,buildLayerMatrix:d,normalizeRanks:h,removeEmptyRanks:l,addBorderNode:p,maxRank:v,partition:_,time:y,notime:g}},{\"./graphlib\":7,\"./lodash\":10}],30:[function(e,t,n){t.exports=\"0.8.5\"},{}],31:[function(e,t,n){var r=e(\"./lib\");t.exports={Graph:r.Graph,json:e(\"./lib/json\"),alg:e(\"./lib/alg\"),version:r.version}},{\"./lib\":47,\"./lib/alg\":38,\"./lib/json\":48}],32:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t,n={},o=[];function i(o){r.has(n,o)||(n[o]=!0,t.push(o),r.each(e.successors(o),i),r.each(e.predecessors(o),i))}return r.each(e.nodes(),(function(e){t=[],i(e),t.length&&o.push(t)})),o}t.exports=o},{\"../lodash\":49}],33:[function(e,t,n){var r=e(\"../lodash\");function o(e,t,n){r.isArray(t)||(t=[t]);var o=(e.isDirected()?e.successors:e.neighbors).bind(e),a=[],s={};return r.each(t,(function(t){if(!e.hasNode(t))throw new Error(\"Graph does not have node: \"+t);i(e,t,\"post\"===n,s,o,a)})),a}function i(e,t,n,o,a,s){r.has(o,t)||(o[t]=!0,n||s.push(t),r.each(a(t),(function(t){i(e,t,n,o,a,s)})),n&&s.push(t))}t.exports=o},{\"../lodash\":49}],34:[function(e,t,n){var r=e(\"./dijkstra\"),o=e(\"../lodash\");function i(e,t,n){return o.transform(e.nodes(),(function(o,i){o[i]=r(e,i,t,n)}),{})}t.exports=i},{\"../lodash\":49,\"./dijkstra\":35}],35:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../data/priority-queue\");t.exports=a;var i=r.constant(1);function a(e,t,n,r){return s(e,String(t),n||i,r||function(t){return e.outEdges(t)})}function s(e,t,n,r){var i,a,s={},u=new o,c=function(e){var t=e.v!==i?e.v:e.w,r=s[t],o=n(e),c=a.distance+o;if(o<0)throw new Error(\"dijkstra does not allow negative edge weights. Bad edge: \"+e+\" Weight: \"+o);c<r.distance&&(r.distance=c,r.predecessor=i,u.decrease(t,c))};for(e.nodes().forEach((function(e){var n=e===t?0:Number.POSITIVE_INFINITY;s[e]={distance:n},u.add(e,n)}));u.size()>0&&(i=u.removeMin(),(a=s[i]).distance!==Number.POSITIVE_INFINITY);)r(i).forEach(c);return s}},{\"../data/priority-queue\":45,\"../lodash\":49}],36:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"./tarjan\");function i(e){return r.filter(o(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}t.exports=i},{\"../lodash\":49,\"./tarjan\":43}],37:[function(e,t,n){var r=e(\"../lodash\");t.exports=i;var o=r.constant(1);function i(e,t,n){return a(e,t||o,n||function(t){return e.outEdges(t)})}function a(e,t,n){var r={},o=e.nodes();return o.forEach((function(e){r[e]={},r[e][e]={distance:0},o.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var o=n.v===e?n.w:n.v,i=t(n);r[e][o]={distance:i,predecessor:e}}))})),o.forEach((function(e){var t=r[e];o.forEach((function(n){var i=r[n];o.forEach((function(n){var r=i[e],o=t[n],a=i[n],s=r.distance+o.distance;s<a.distance&&(a.distance=s,a.predecessor=o.predecessor)}))}))})),r}},{\"../lodash\":49}],38:[function(e,t,n){t.exports={components:e(\"./components\"),dijkstra:e(\"./dijkstra\"),dijkstraAll:e(\"./dijkstra-all\"),findCycles:e(\"./find-cycles\"),floydWarshall:e(\"./floyd-warshall\"),isAcyclic:e(\"./is-acyclic\"),postorder:e(\"./postorder\"),preorder:e(\"./preorder\"),prim:e(\"./prim\"),tarjan:e(\"./tarjan\"),topsort:e(\"./topsort\")}},{\"./components\":32,\"./dijkstra\":35,\"./dijkstra-all\":34,\"./find-cycles\":36,\"./floyd-warshall\":37,\"./is-acyclic\":39,\"./postorder\":40,\"./preorder\":41,\"./prim\":42,\"./tarjan\":43,\"./topsort\":44}],39:[function(e,t,n){var r=e(\"./topsort\");function o(e){try{r(e)}catch(e){if(e instanceof r.CycleException)return!1;throw e}return!0}t.exports=o},{\"./topsort\":44}],40:[function(e,t,n){var r=e(\"./dfs\");function o(e,t){return r(e,t,\"post\")}t.exports=o},{\"./dfs\":33}],41:[function(e,t,n){var r=e(\"./dfs\");function o(e,t){return r(e,t,\"pre\")}t.exports=o},{\"./dfs\":33}],42:[function(e,t,n){var r=e(\"../lodash\"),o=e(\"../graph\"),i=e(\"../data/priority-queue\");function a(e,t){var n,a=new o,s={},u=new i;function c(e){var r=e.v===n?e.w:e.v,o=u.priority(r);if(void 0!==o){var i=t(e);i<o&&(s[r]=n,u.decrease(r,i))}}if(0===e.nodeCount())return a;r.each(e.nodes(),(function(e){u.add(e,Number.POSITIVE_INFINITY),a.setNode(e)})),u.decrease(e.nodes()[0],0);for(var f=!1;u.size()>0;){if(n=u.removeMin(),r.has(s,n))a.setEdge(n,s[n]);else{if(f)throw new Error(\"Input graph is not connected: \"+e);f=!0}e.nodeEdges(n).forEach(c)}return a}t.exports=a},{\"../data/priority-queue\":45,\"../graph\":46,\"../lodash\":49}],43:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t=0,n=[],o={},i=[];function a(s){var u=o[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach((function(e){r.has(o,e)?o[e].onStack&&(u.lowlink=Math.min(u.lowlink,o[e].index)):(a(e),u.lowlink=Math.min(u.lowlink,o[e].lowlink))})),u.lowlink===u.index){var c,f=[];do{c=n.pop(),o[c].onStack=!1,f.push(c)}while(s!==c);i.push(f)}}return e.nodes().forEach((function(e){r.has(o,e)||a(e)})),i}t.exports=o},{\"../lodash\":49}],44:[function(e,t,n){var r=e(\"../lodash\");function o(e){var t={},n={},o=[];function a(s){if(r.has(n,s))throw new i;r.has(t,s)||(n[s]=!0,t[s]=!0,r.each(e.predecessors(s),a),delete n[s],o.push(s))}if(r.each(e.sinks(),a),r.size(t)!==e.nodeCount())throw new i;return o}function i(){}t.exports=o,o.CycleException=i,i.prototype=new Error},{\"../lodash\":49}],45:[function(e,t,n){var r=e(\"../lodash\");function o(){this._arr=[],this._keyIndices={}}t.exports=o,o.prototype.size=function(){return this._arr.length},o.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},o.prototype.has=function(e){return r.has(this._keyIndices,e)},o.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},o.prototype.min=function(){if(0===this.size())throw new Error(\"Queue underflow\");return this._arr[0].key},o.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var o=this._arr,i=o.length;return n[e]=i,o.push({key:e,priority:t}),this._decrease(i),!0}return!1},o.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},o.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error(\"New priority is greater than current priority. Key: \"+e+\" Old: \"+this._arr[n].priority+\" New: \"+t);this._arr[n].priority=t,this._decrease(n)},o.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,o=e;n<t.length&&(o=t[n].priority<t[o].priority?n:o,r<t.length&&(o=t[r].priority<t[o].priority?r:o),o!==e&&(this._swap(e,o),this._heapify(o)))},o.prototype._decrease=function(e){for(var t,n=this._arr,r=n[e].priority;0!==e&&!(n[t=e>>1].priority<r);)this._swap(e,t),e=t},o.prototype._swap=function(e,t){var n=this._arr,r=this._keyIndices,o=n[e],i=n[t];n[e]=i,n[t]=o,r[i.key]=e,r[o.key]=t}},{\"../lodash\":49}],46:[function(e,t,n){var r=e(\"./lodash\");t.exports=s;var o=\"\\\\0\",i=\"\\\\0\",a=\"\u0001\";function s(e){this._isDirected=!r.has(e,\"directed\")||e.directed,this._isMultigraph=!!r.has(e,\"multigraph\")&&e.multigraph,this._isCompound=!!r.has(e,\"compound\")&&e.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[i]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function u(e,t){e[t]?e[t]++:e[t]=1}function c(e,t){--e[t]||delete e[t]}function f(e,t,n,i){var s=\"\"+t,u=\"\"+n;if(!e&&s>u){var c=s;s=u,u=c}return s+a+u+a+(r.isUndefined(i)?o:i)}function d(e,t,n,r){var o=\"\"+t,i=\"\"+n;if(!e&&o>i){var a=o;o=i,i=a}var s={v:o,w:i};return r&&(s.name=r),s}function h(e,t){return f(e,t.v,t.w,t.name)}s.prototype._nodeCount=0,s.prototype._edgeCount=0,s.prototype.isDirected=function(){return this._isDirected},s.prototype.isMultigraph=function(){return this._isMultigraph},s.prototype.isCompound=function(){return this._isCompound},s.prototype.setGraph=function(e){return this._label=e,this},s.prototype.graph=function(){return this._label},s.prototype.setDefaultNodeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultNodeLabelFn=e,this},s.prototype.nodeCount=function(){return this._nodeCount},s.prototype.nodes=function(){return r.keys(this._nodes)},s.prototype.sources=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._in[t])}))},s.prototype.sinks=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._out[t])}))},s.prototype.setNodes=function(e,t){var n=arguments,o=this;return r.each(e,(function(e){n.length>1?o.setNode(e,t):o.setNode(e)})),this},s.prototype.setNode=function(e,t){return r.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=i,this._children[e]={},this._children[i][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},s.prototype.node=function(e){return this._nodes[e]},s.prototype.hasNode=function(e){return r.has(this._nodes,e)},s.prototype.removeNode=function(e){var t=this;if(r.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],r.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),r.each(r.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],r.each(r.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},s.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error(\"Cannot set parent in a non-compound graph\");if(r.isUndefined(t))t=i;else{for(var n=t+=\"\";!r.isUndefined(n);n=this.parent(n))if(n===e)throw new Error(\"Setting \"+t+\" as parent of \"+e+\" would create a cycle\");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},s.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},s.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==i)return t}},s.prototype.children=function(e){if(r.isUndefined(e)&&(e=i),this._isCompound){var t=this._children[e];if(t)return r.keys(t)}else{if(e===i)return this.nodes();if(this.hasNode(e))return[]}},s.prototype.predecessors=function(e){var t=this._preds[e];if(t)return r.keys(t)},s.prototype.successors=function(e){var t=this._sucs[e];if(t)return r.keys(t)},s.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return r.union(t,this.successors(e))},s.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},s.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),r.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var o={};function i(e){var r=n.parent(e);return void 0===r||t.hasNode(r)?(o[e]=r,r):r in o?o[r]:i(r)}return this._isCompound&&r.each(t.nodes(),(function(e){t.setParent(e,i(e))})),t},s.prototype.setDefaultEdgeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultEdgeLabelFn=e,this},s.prototype.edgeCount=function(){return this._edgeCount},s.prototype.edges=function(){return r.values(this._edgeObjs)},s.prototype.setPath=function(e,t){var n=this,o=arguments;return r.reduce(e,(function(e,r){return o.length>1?n.setEdge(e,r,t):n.setEdge(e,r),r})),this},s.prototype.setEdge=function(){var e,t,n,o,i=!1,a=arguments[0];\"object\"==typeof a&&null!==a&&\"v\"in a?(e=a.v,t=a.w,n=a.name,2===arguments.length&&(o=arguments[1],i=!0)):(e=a,t=arguments[1],n=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),e=\"\"+e,t=\"\"+t,r.isUndefined(n)||(n=\"\"+n);var s=f(this._isDirected,e,t,n);if(r.has(this._edgeLabels,s))return i&&(this._edgeLabels[s]=o),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error(\"Cannot set a named edge when isMultigraph = false\");this.setNode(e),this.setNode(t),this._edgeLabels[s]=i?o:this._defaultEdgeLabelFn(e,t,n);var c=d(this._isDirected,e,t,n);return e=c.v,t=c.w,Object.freeze(c),this._edgeObjs[s]=c,u(this._preds[t],e),u(this._sucs[e],t),this._in[t][s]=c,this._out[e][s]=c,this._edgeCount++,this},s.prototype.edge=function(e,t,n){var r=1===arguments.length?h(this._isDirected,arguments[0]):f(this._isDirected,e,t,n);return this._edgeLabels[r]},s.prototype.hasEdge=function(e,t,n){var o=1===arguments.length?h(this._isDirected,arguments[0]):f(this._isDirected,e,t,n);return r.has(this._edgeLabels,o)},s.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?h(this._isDirected,arguments[0]):f(this._isDirected,e,t,n),o=this._edgeObjs[r];return o&&(e=o.v,t=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],c(this._preds[t],e),c(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},s.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var o=r.values(n);return t?r.filter(o,(function(e){return e.v===t})):o}},s.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var o=r.values(n);return t?r.filter(o,(function(e){return e.w===t})):o}},s.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},{\"./lodash\":49}],47:[function(e,t,n){t.exports={Graph:e(\"./graph\"),version:e(\"./version\")}},{\"./graph\":46,\"./version\":50}],48:[function(e,t,n){var r=e(\"./lodash\"),o=e(\"./graph\");function i(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:a(e),edges:s(e)};return r.isUndefined(e.graph())||(t.value=r.clone(e.graph())),t}function a(e){return r.map(e.nodes(),(function(t){var n=e.node(t),o=e.parent(t),i={v:t};return r.isUndefined(n)||(i.value=n),r.isUndefined(o)||(i.parent=o),i}))}function s(e){return r.map(e.edges(),(function(t){var n=e.edge(t),o={v:t.v,w:t.w};return r.isUndefined(t.name)||(o.name=t.name),r.isUndefined(n)||(o.value=n),o}))}function u(e){var t=new o(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}t.exports={write:i,read:u}},{\"./graph\":46,\"./lodash\":49}],49:[function(e,t,n){var r;if(\"function\"==typeof e)try{r={clone:e(\"lodash/clone\"),constant:e(\"lodash/constant\"),each:e(\"lodash/each\"),filter:e(\"lodash/filter\"),has:e(\"lodash/has\"),isArray:e(\"lodash/isArray\"),isEmpty:e(\"lodash/isEmpty\"),isFunction:e(\"lodash/isFunction\"),isUndefined:e(\"lodash/isUndefined\"),keys:e(\"lodash/keys\"),map:e(\"lodash/map\"),reduce:e(\"lodash/reduce\"),size:e(\"lodash/size\"),transform:e(\"lodash/transform\"),union:e(\"lodash/union\"),values:e(\"lodash/values\")}}catch(e){}r||(r=window._),t.exports=r},{\"lodash/clone\":226,\"lodash/constant\":228,\"lodash/each\":230,\"lodash/filter\":232,\"lodash/has\":239,\"lodash/isArray\":243,\"lodash/isEmpty\":247,\"lodash/isFunction\":248,\"lodash/isUndefined\":258,\"lodash/keys\":259,\"lodash/map\":262,\"lodash/reduce\":274,\"lodash/size\":275,\"lodash/transform\":284,\"lodash/union\":285,\"lodash/values\":287}],50:[function(e,t,n){t.exports=\"2.1.8\"},{}],51:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"DataView\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],52:[function(e,t,n){var r=e(\"./_hashClear\"),o=e(\"./_hashDelete\"),i=e(\"./_hashGet\"),a=e(\"./_hashHas\"),s=e(\"./_hashSet\");function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},{\"./_hashClear\":172,\"./_hashDelete\":173,\"./_hashGet\":174,\"./_hashHas\":175,\"./_hashSet\":176}],53:[function(e,t,n){var r=e(\"./_listCacheClear\"),o=e(\"./_listCacheDelete\"),i=e(\"./_listCacheGet\"),a=e(\"./_listCacheHas\"),s=e(\"./_listCacheSet\");function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},{\"./_listCacheClear\":188,\"./_listCacheDelete\":189,\"./_listCacheGet\":190,\"./_listCacheHas\":191,\"./_listCacheSet\":192}],54:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"Map\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],55:[function(e,t,n){var r=e(\"./_mapCacheClear\"),o=e(\"./_mapCacheDelete\"),i=e(\"./_mapCacheGet\"),a=e(\"./_mapCacheHas\"),s=e(\"./_mapCacheSet\");function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=i,u.prototype.has=a,u.prototype.set=s,t.exports=u},{\"./_mapCacheClear\":193,\"./_mapCacheDelete\":194,\"./_mapCacheGet\":195,\"./_mapCacheHas\":196,\"./_mapCacheSet\":197}],56:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"Promise\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],57:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"Set\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],58:[function(e,t,n){var r=e(\"./_MapCache\"),o=e(\"./_setCacheAdd\"),i=e(\"./_setCacheHas\");function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}a.prototype.add=a.prototype.push=o,a.prototype.has=i,t.exports=a},{\"./_MapCache\":55,\"./_setCacheAdd\":210,\"./_setCacheHas\":211}],59:[function(e,t,n){var r=e(\"./_ListCache\"),o=e(\"./_stackClear\"),i=e(\"./_stackDelete\"),a=e(\"./_stackGet\"),s=e(\"./_stackHas\"),u=e(\"./_stackSet\");function c(e){var t=this.__data__=new r(e);this.size=t.size}c.prototype.clear=o,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=s,c.prototype.set=u,t.exports=c},{\"./_ListCache\":53,\"./_stackClear\":215,\"./_stackDelete\":216,\"./_stackGet\":217,\"./_stackHas\":218,\"./_stackSet\":219}],60:[function(e,t,n){var r=e(\"./_root\").Symbol;t.exports=r},{\"./_root\":208}],61:[function(e,t,n){var r=e(\"./_root\").Uint8Array;t.exports=r},{\"./_root\":208}],62:[function(e,t,n){var r=e(\"./_getNative\")(e(\"./_root\"),\"WeakMap\");t.exports=r},{\"./_getNative\":163,\"./_root\":208}],63:[function(e,t,n){function r(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}t.exports=r},{}],64:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}t.exports=r},{}],65:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var a=e[n];t(a,n,e)&&(i[o++]=a)}return i}t.exports=r},{}],66:[function(e,t,n){var r=e(\"./_baseIndexOf\");function o(e,t){return!(null==e||!e.length)&&r(e,t,0)>-1}t.exports=o},{\"./_baseIndexOf\":95}],67:[function(e,t,n){function r(e,t,n){for(var r=-1,o=null==e?0:e.length;++r<o;)if(n(t,e[r]))return!0;return!1}t.exports=r},{}],68:[function(e,t,n){var r=e(\"./_baseTimes\"),o=e(\"./isArguments\"),i=e(\"./isArray\"),a=e(\"./isBuffer\"),s=e(\"./_isIndex\"),u=e(\"./isTypedArray\"),c=Object.prototype.hasOwnProperty;function f(e,t){var n=i(e),f=!n&&o(e),d=!n&&!f&&a(e),h=!n&&!f&&!d&&u(e),l=n||f||d||h,p=l?r(e.length,String):[],v=p.length;for(var _ in e)!t&&!c.call(e,_)||l&&(\"length\"==_||d&&(\"offset\"==_||\"parent\"==_)||h&&(\"buffer\"==_||\"byteLength\"==_||\"byteOffset\"==_)||s(_,v))||p.push(_);return p}t.exports=f},{\"./_baseTimes\":125,\"./_isIndex\":181,\"./isArguments\":242,\"./isArray\":243,\"./isBuffer\":246,\"./isTypedArray\":257}],69:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}t.exports=r},{}],70:[function(e,t,n){function r(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}t.exports=r},{}],71:[function(e,t,n){function r(e,t,n,r){var o=-1,i=null==e?0:e.length;for(r&&i&&(n=e[++o]);++o<i;)n=t(n,e[o],o,e);return n}t.exports=r},{}],72:[function(e,t,n){function r(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}t.exports=r},{}],73:[function(e,t,n){var r=e(\"./_baseProperty\")(\"length\");t.exports=r},{\"./_baseProperty\":117}],74:[function(e,t,n){var r=e(\"./_baseAssignValue\"),o=e(\"./eq\");function i(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}t.exports=i},{\"./_baseAssignValue\":79,\"./eq\":231}],75:[function(e,t,n){var r=e(\"./_baseAssignValue\"),o=e(\"./eq\"),i=Object.prototype.hasOwnProperty;function a(e,t,n){var a=e[t];i.call(e,t)&&o(a,n)&&(void 0!==n||t in e)||r(e,t,n)}t.exports=a},{\"./_baseAssignValue\":79,\"./eq\":231}],76:[function(e,t,n){var r=e(\"./eq\");function o(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}t.exports=o},{\"./eq\":231}],77:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./keys\");function i(e,t){return e&&r(t,o(t),e)}t.exports=i},{\"./_copyObject\":143,\"./keys\":259}],78:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./keysIn\");function i(e,t){return e&&r(t,o(t),e)}t.exports=i},{\"./_copyObject\":143,\"./keysIn\":260}],79:[function(e,t,n){var r=e(\"./_defineProperty\");function o(e,t,n){\"__proto__\"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}t.exports=o},{\"./_defineProperty\":153}],80:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_arrayEach\"),i=e(\"./_assignValue\"),a=e(\"./_baseAssign\"),s=e(\"./_baseAssignIn\"),u=e(\"./_cloneBuffer\"),c=e(\"./_copyArray\"),f=e(\"./_copySymbols\"),d=e(\"./_copySymbolsIn\"),h=e(\"./_getAllKeys\"),l=e(\"./_getAllKeysIn\"),p=e(\"./_getTag\"),v=e(\"./_initCloneArray\"),_=e(\"./_initCloneByTag\"),y=e(\"./_initCloneObject\"),g=e(\"./isArray\"),b=e(\"./isBuffer\"),m=e(\"./isMap\"),x=e(\"./isObject\"),w=e(\"./isSet\"),E=e(\"./keys\"),j=1,k=2,A=4,O=\"[object Arguments]\",I=\"[object Array]\",S=\"[object Boolean]\",C=\"[object Date]\",N=\"[object Error]\",T=\"[object Function]\",M=\"[object GeneratorFunction]\",L=\"[object Map]\",P=\"[object Number]\",F=\"[object Object]\",D=\"[object RegExp]\",B=\"[object Set]\",G=\"[object String]\",R=\"[object Symbol]\",U=\"[object WeakMap]\",z=\"[object ArrayBuffer]\",V=\"[object DataView]\",q=\"[object Float32Array]\",K=\"[object Float64Array]\",H=\"[object Int8Array]\",Y=\"[object Int16Array]\",$=\"[object Int32Array]\",W=\"[object Uint8Array]\",J=\"[object Uint8ClampedArray]\",X=\"[object Uint16Array]\",Z=\"[object Uint32Array]\",Q={};function ee(e,t,n,I,S,C){var N,L=t&j,P=t&k,D=t&A;if(n&&(N=S?n(e,I,S,C):n(e)),void 0!==N)return N;if(!x(e))return e;var B=g(e);if(B){if(N=v(e),!L)return c(e,N)}else{var G=p(e),R=G==T||G==M;if(b(e))return u(e,L);if(G==F||G==O||R&&!S){if(N=P||R?{}:y(e),!L)return P?d(e,s(N,e)):f(e,a(N,e))}else{if(!Q[G])return S?e:{};N=_(e,G,L)}}C||(C=new r);var U=C.get(e);if(U)return U;C.set(e,N),w(e)?e.forEach((function(r){N.add(ee(r,t,n,r,e,C))})):m(e)&&e.forEach((function(r,o){N.set(o,ee(r,t,n,o,e,C))}));var z=D?P?l:h:P?keysIn:E,V=B?void 0:z(e);return o(V||e,(function(r,o){V&&(r=e[o=r]),i(N,o,ee(r,t,n,o,e,C))})),N}Q[O]=Q[I]=Q[z]=Q[V]=Q[S]=Q[C]=Q[q]=Q[K]=Q[H]=Q[Y]=Q[$]=Q[L]=Q[P]=Q[F]=Q[D]=Q[B]=Q[G]=Q[R]=Q[W]=Q[J]=Q[X]=Q[Z]=!0,Q[N]=Q[T]=Q[U]=!1,t.exports=ee},{\"./_Stack\":59,\"./_arrayEach\":64,\"./_assignValue\":75,\"./_baseAssign\":77,\"./_baseAssignIn\":78,\"./_cloneBuffer\":135,\"./_copyArray\":142,\"./_copySymbols\":144,\"./_copySymbolsIn\":145,\"./_getAllKeys\":159,\"./_getAllKeysIn\":160,\"./_getTag\":168,\"./_initCloneArray\":177,\"./_initCloneByTag\":178,\"./_initCloneObject\":179,\"./isArray\":243,\"./isBuffer\":246,\"./isMap\":250,\"./isObject\":251,\"./isSet\":254,\"./keys\":259}],81:[function(e,t,n){var r=e(\"./isObject\"),o=Object.create,i=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();t.exports=i},{\"./isObject\":251}],82:[function(e,t,n){var r=e(\"./_baseForOwn\"),o=e(\"./_createBaseEach\")(r);t.exports=o},{\"./_baseForOwn\":88,\"./_createBaseEach\":148}],83:[function(e,t,n){var r=e(\"./isSymbol\");function o(e,t,n){for(var o=-1,i=e.length;++o<i;){var a=e[o],s=t(a);if(null!=s&&(void 0===u?s==s&&!r(s):n(s,u)))var u=s,c=a}return c}t.exports=o},{\"./isSymbol\":256}],84:[function(e,t,n){var r=e(\"./_baseEach\");function o(e,t){var n=[];return r(e,(function(e,r,o){t(e,r,o)&&n.push(e)})),n}t.exports=o},{\"./_baseEach\":82}],85:[function(e,t,n){function r(e,t,n,r){for(var o=e.length,i=n+(r?1:-1);r?i--:++i<o;)if(t(e[i],i,e))return i;return-1}t.exports=r},{}],86:[function(e,t,n){var r=e(\"./_arrayPush\"),o=e(\"./_isFlattenable\");function i(e,t,n,a,s){var u=-1,c=e.length;for(n||(n=o),s||(s=[]);++u<c;){var f=e[u];t>0&&n(f)?t>1?i(f,t-1,n,a,s):r(s,f):a||(s[s.length]=f)}return s}t.exports=i},{\"./_arrayPush\":70,\"./_isFlattenable\":180}],87:[function(e,t,n){var r=e(\"./_createBaseFor\")();t.exports=r},{\"./_createBaseFor\":149}],88:[function(e,t,n){var r=e(\"./_baseFor\"),o=e(\"./keys\");function i(e,t){return e&&r(e,t,o)}t.exports=i},{\"./_baseFor\":87,\"./keys\":259}],89:[function(e,t,n){var r=e(\"./_castPath\"),o=e(\"./_toKey\");function i(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&n<i;)e=e[o(t[n++])];return n&&n==i?e:void 0}t.exports=i},{\"./_castPath\":133,\"./_toKey\":223}],90:[function(e,t,n){var r=e(\"./_arrayPush\"),o=e(\"./isArray\");function i(e,t,n){var i=t(e);return o(e)?i:r(i,n(e))}t.exports=i},{\"./_arrayPush\":70,\"./isArray\":243}],91:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./_getRawTag\"),i=e(\"./_objectToString\"),a=\"[object Null]\",s=\"[object Undefined]\",u=r?r.toStringTag:void 0;function c(e){return null==e?void 0===e?s:a:u&&u in Object(e)?o(e):i(e)}t.exports=c},{\"./_Symbol\":60,\"./_getRawTag\":165,\"./_objectToString\":205}],92:[function(e,t,n){function r(e,t){return e>t}t.exports=r},{}],93:[function(e,t,n){var r=Object.prototype.hasOwnProperty;function o(e,t){return null!=e&&r.call(e,t)}t.exports=o},{}],94:[function(e,t,n){function r(e,t){return null!=e&&t in Object(e)}t.exports=r},{}],95:[function(e,t,n){var r=e(\"./_baseFindIndex\"),o=e(\"./_baseIsNaN\"),i=e(\"./_strictIndexOf\");function a(e,t,n){return t==t?i(e,t,n):r(e,o,n)}t.exports=a},{\"./_baseFindIndex\":85,\"./_baseIsNaN\":101,\"./_strictIndexOf\":220}],96:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isObjectLike\"),i=\"[object Arguments]\";function a(e){return o(e)&&r(e)==i}t.exports=a},{\"./_baseGetTag\":91,\"./isObjectLike\":252}],97:[function(e,t,n){var r=e(\"./_baseIsEqualDeep\"),o=e(\"./isObjectLike\");function i(e,t,n,a,s){return e===t||(null==e||null==t||!o(e)&&!o(t)?e!=e&&t!=t:r(e,t,n,a,i,s))}t.exports=i},{\"./_baseIsEqualDeep\":98,\"./isObjectLike\":252}],98:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_equalArrays\"),i=e(\"./_equalByTag\"),a=e(\"./_equalObjects\"),s=e(\"./_getTag\"),u=e(\"./isArray\"),c=e(\"./isBuffer\"),f=e(\"./isTypedArray\"),d=1,h=\"[object Arguments]\",l=\"[object Array]\",p=\"[object Object]\",v=Object.prototype.hasOwnProperty;function _(e,t,n,_,y,g){var b=u(e),m=u(t),x=b?l:s(e),w=m?l:s(t),E=(x=x==h?p:x)==p,j=(w=w==h?p:w)==p,k=x==w;if(k&&c(e)){if(!c(t))return!1;b=!0,E=!1}if(k&&!E)return g||(g=new r),b||f(e)?o(e,t,n,_,y,g):i(e,t,x,n,_,y,g);if(!(n&d)){var A=E&&v.call(e,\"__wrapped__\"),O=j&&v.call(t,\"__wrapped__\");if(A||O){var I=A?e.value():e,S=O?t.value():t;return g||(g=new r),y(I,S,n,_,g)}}return!!k&&(g||(g=new r),a(e,t,n,_,y,g))}t.exports=_},{\"./_Stack\":59,\"./_equalArrays\":154,\"./_equalByTag\":155,\"./_equalObjects\":156,\"./_getTag\":168,\"./isArray\":243,\"./isBuffer\":246,\"./isTypedArray\":257}],99:[function(e,t,n){var r=e(\"./_getTag\"),o=e(\"./isObjectLike\"),i=\"[object Map]\";function a(e){return o(e)&&r(e)==i}t.exports=a},{\"./_getTag\":168,\"./isObjectLike\":252}],100:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_baseIsEqual\"),i=1,a=2;function s(e,t,n,s){var u=n.length,c=u,f=!s;if(null==e)return!c;for(e=Object(e);u--;){var d=n[u];if(f&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++u<c;){var h=(d=n[u])[0],l=e[h],p=d[1];if(f&&d[2]){if(void 0===l&&!(h in e))return!1}else{var v=new r;if(s)var _=s(l,p,h,e,t,v);if(!(void 0===_?o(p,l,i|a,s,v):_))return!1}}return!0}t.exports=s},{\"./_Stack\":59,\"./_baseIsEqual\":97}],101:[function(e,t,n){function r(e){return e!=e}t.exports=r},{}],102:[function(e,t,n){var r=e(\"./isFunction\"),o=e(\"./_isMasked\"),i=e(\"./isObject\"),a=e(\"./_toSource\"),s=/[\\\\\\\\^$.*+?()[\\\\]{}|]/g,u=/^\\\\[object .+?Constructor\\\\]$/,c=Function.prototype,f=Object.prototype,d=c.toString,h=f.hasOwnProperty,l=RegExp(\"^\"+d.call(h).replace(s,\"\\\\\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g,\"$1.*?\")+\"$\");function p(e){return!(!i(e)||o(e))&&(r(e)?l:u).test(a(e))}t.exports=p},{\"./_isMasked\":185,\"./_toSource\":224,\"./isFunction\":248,\"./isObject\":251}],103:[function(e,t,n){var r=e(\"./_getTag\"),o=e(\"./isObjectLike\"),i=\"[object Set]\";function a(e){return o(e)&&r(e)==i}t.exports=a},{\"./_getTag\":168,\"./isObjectLike\":252}],104:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isLength\"),i=e(\"./isObjectLike\"),a=\"[object Arguments]\",s=\"[object Array]\",u=\"[object Boolean]\",c=\"[object Date]\",f=\"[object Error]\",d=\"[object Function]\",h=\"[object Map]\",l=\"[object Number]\",p=\"[object Object]\",v=\"[object RegExp]\",_=\"[object Set]\",y=\"[object String]\",g=\"[object WeakMap]\",b=\"[object ArrayBuffer]\",m=\"[object DataView]\",x=\"[object Float64Array]\",w=\"[object Int8Array]\",E=\"[object Int16Array]\",j=\"[object Int32Array]\",k=\"[object Uint8Array]\",A=\"[object Uint8ClampedArray]\",O=\"[object Uint16Array]\",I=\"[object Uint32Array]\",S={};function C(e){return i(e)&&o(e.length)&&!!S[r(e)]}S[\"[object Float32Array]\"]=S[x]=S[w]=S[E]=S[j]=S[k]=S[A]=S[O]=S[I]=!0,S[a]=S[s]=S[b]=S[u]=S[m]=S[c]=S[f]=S[d]=S[h]=S[l]=S[p]=S[v]=S[_]=S[y]=S[g]=!1,t.exports=C},{\"./_baseGetTag\":91,\"./isLength\":249,\"./isObjectLike\":252}],105:[function(e,t,n){var r=e(\"./_baseMatches\"),o=e(\"./_baseMatchesProperty\"),i=e(\"./identity\"),a=e(\"./isArray\"),s=e(\"./property\");function u(e){return\"function\"==typeof e?e:null==e?i:\"object\"==typeof e?a(e)?o(e[0],e[1]):r(e):s(e)}t.exports=u},{\"./_baseMatches\":110,\"./_baseMatchesProperty\":111,\"./identity\":241,\"./isArray\":243,\"./property\":272}],106:[function(e,t,n){var r=e(\"./_isPrototype\"),o=e(\"./_nativeKeys\"),i=Object.prototype.hasOwnProperty;function a(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))i.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}t.exports=a},{\"./_isPrototype\":186,\"./_nativeKeys\":202}],107:[function(e,t,n){var r=e(\"./isObject\"),o=e(\"./_isPrototype\"),i=e(\"./_nativeKeysIn\"),a=Object.prototype.hasOwnProperty;function s(e){if(!r(e))return i(e);var t=o(e),n=[];for(var s in e)(\"constructor\"!=s||!t&&a.call(e,s))&&n.push(s);return n}t.exports=s},{\"./_isPrototype\":186,\"./_nativeKeysIn\":203,\"./isObject\":251}],108:[function(e,t,n){function r(e,t){return e<t}t.exports=r},{}],109:[function(e,t,n){var r=e(\"./_baseEach\"),o=e(\"./isArrayLike\");function i(e,t){var n=-1,i=o(e)?Array(e.length):[];return r(e,(function(e,r,o){i[++n]=t(e,r,o)})),i}t.exports=i},{\"./_baseEach\":82,\"./isArrayLike\":244}],110:[function(e,t,n){var r=e(\"./_baseIsMatch\"),o=e(\"./_getMatchData\"),i=e(\"./_matchesStrictComparable\");function a(e){var t=o(e);return 1==t.length&&t[0][2]?i(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}t.exports=a},{\"./_baseIsMatch\":100,\"./_getMatchData\":162,\"./_matchesStrictComparable\":199}],111:[function(e,t,n){var r=e(\"./_baseIsEqual\"),o=e(\"./get\"),i=e(\"./hasIn\"),a=e(\"./_isKey\"),s=e(\"./_isStrictComparable\"),u=e(\"./_matchesStrictComparable\"),c=e(\"./_toKey\"),f=1,d=2;function h(e,t){return a(e)&&s(t)?u(c(e),t):function(n){var a=o(n,e);return void 0===a&&a===t?i(n,e):r(t,a,f|d)}}t.exports=h},{\"./_baseIsEqual\":97,\"./_isKey\":183,\"./_isStrictComparable\":187,\"./_matchesStrictComparable\":199,\"./_toKey\":223,\"./get\":238,\"./hasIn\":240}],112:[function(e,t,n){var r=e(\"./_Stack\"),o=e(\"./_assignMergeValue\"),i=e(\"./_baseFor\"),a=e(\"./_baseMergeDeep\"),s=e(\"./isObject\"),u=e(\"./keysIn\"),c=e(\"./_safeGet\");function f(e,t,n,d,h){e!==t&&i(t,(function(i,u){if(h||(h=new r),s(i))a(e,t,u,n,f,d,h);else{var l=d?d(c(e,u),i,u+\"\",e,t,h):void 0;void 0===l&&(l=i),o(e,u,l)}}),u)}t.exports=f},{\"./_Stack\":59,\"./_assignMergeValue\":74,\"./_baseFor\":87,\"./_baseMergeDeep\":113,\"./_safeGet\":209,\"./isObject\":251,\"./keysIn\":260}],113:[function(e,t,n){var r=e(\"./_assignMergeValue\"),o=e(\"./_cloneBuffer\"),i=e(\"./_cloneTypedArray\"),a=e(\"./_copyArray\"),s=e(\"./_initCloneObject\"),u=e(\"./isArguments\"),c=e(\"./isArray\"),f=e(\"./isArrayLikeObject\"),d=e(\"./isBuffer\"),h=e(\"./isFunction\"),l=e(\"./isObject\"),p=e(\"./isPlainObject\"),v=e(\"./isTypedArray\"),_=e(\"./_safeGet\"),y=e(\"./toPlainObject\");function g(e,t,n,g,b,m,x){var w=_(e,n),E=_(t,n),j=x.get(E);if(j)r(e,n,j);else{var k=m?m(w,E,n+\"\",e,t,x):void 0,A=void 0===k;if(A){var O=c(E),I=!O&&d(E),S=!O&&!I&&v(E);k=E,O||I||S?c(w)?k=w:f(w)?k=a(w):I?(A=!1,k=o(E,!0)):S?(A=!1,k=i(E,!0)):k=[]:p(E)||u(E)?(k=w,u(w)?k=y(w):l(w)&&!h(w)||(k=s(E))):A=!1}A&&(x.set(E,k),b(k,E,g,m,x),x.delete(E)),r(e,n,k)}}t.exports=g},{\"./_assignMergeValue\":74,\"./_cloneBuffer\":135,\"./_cloneTypedArray\":139,\"./_copyArray\":142,\"./_initCloneObject\":179,\"./_safeGet\":209,\"./isArguments\":242,\"./isArray\":243,\"./isArrayLikeObject\":245,\"./isBuffer\":246,\"./isFunction\":248,\"./isObject\":251,\"./isPlainObject\":253,\"./isTypedArray\":257,\"./toPlainObject\":282}],114:[function(e,t,n){var r=e(\"./_arrayMap\"),o=e(\"./_baseIteratee\"),i=e(\"./_baseMap\"),a=e(\"./_baseSortBy\"),s=e(\"./_baseUnary\"),u=e(\"./_compareMultiple\"),c=e(\"./identity\");function f(e,t,n){var f=-1;t=r(t.length?t:[c],s(o));var d=i(e,(function(e,n,o){return{criteria:r(t,(function(t){return t(e)})),index:++f,value:e}}));return a(d,(function(e,t){return u(e,t,n)}))}t.exports=f},{\"./_arrayMap\":69,\"./_baseIteratee\":105,\"./_baseMap\":109,\"./_baseSortBy\":124,\"./_baseUnary\":127,\"./_compareMultiple\":141,\"./identity\":241}],115:[function(e,t,n){var r=e(\"./_basePickBy\"),o=e(\"./hasIn\");function i(e,t){return r(e,t,(function(t,n){return o(e,n)}))}t.exports=i},{\"./_basePickBy\":116,\"./hasIn\":240}],116:[function(e,t,n){var r=e(\"./_baseGet\"),o=e(\"./_baseSet\"),i=e(\"./_castPath\");function a(e,t,n){for(var a=-1,s=t.length,u={};++a<s;){var c=t[a],f=r(e,c);n(f,c)&&o(u,i(c,e),f)}return u}t.exports=a},{\"./_baseGet\":89,\"./_baseSet\":122,\"./_castPath\":133}],117:[function(e,t,n){function r(e){return function(t){return null==t?void 0:t[e]}}t.exports=r},{}],118:[function(e,t,n){var r=e(\"./_baseGet\");function o(e){return function(t){return r(t,e)}}t.exports=o},{\"./_baseGet\":89}],119:[function(e,t,n){var r=Math.ceil,o=Math.max;function i(e,t,n,i){for(var a=-1,s=o(r((t-e)/(n||1)),0),u=Array(s);s--;)u[i?s:++a]=e,e+=n;return u}t.exports=i},{}],120:[function(e,t,n){function r(e,t,n,r,o){return o(e,(function(e,o,i){n=r?(r=!1,e):t(n,e,o,i)})),n}t.exports=r},{}],121:[function(e,t,n){var r=e(\"./identity\"),o=e(\"./_overRest\"),i=e(\"./_setToString\");function a(e,t){return i(o(e,t,r),e+\"\")}t.exports=a},{\"./_overRest\":207,\"./_setToString\":213,\"./identity\":241}],122:[function(e,t,n){var r=e(\"./_assignValue\"),o=e(\"./_castPath\"),i=e(\"./_isIndex\"),a=e(\"./isObject\"),s=e(\"./_toKey\");function u(e,t,n,u){if(!a(e))return e;for(var c=-1,f=(t=o(t,e)).length,d=f-1,h=e;null!=h&&++c<f;){var l=s(t[c]),p=n;if(c!=d){var v=h[l];void 0===(p=u?u(v,l,h):void 0)&&(p=a(v)?v:i(t[c+1])?[]:{})}r(h,l,p),h=h[l]}return e}t.exports=u},{\"./_assignValue\":75,\"./_castPath\":133,\"./_isIndex\":181,\"./_toKey\":223,\"./isObject\":251}],123:[function(e,t,n){var r=e(\"./constant\"),o=e(\"./_defineProperty\"),i=e(\"./identity\"),a=o?function(e,t){return o(e,\"toString\",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:i;t.exports=a},{\"./_defineProperty\":153,\"./constant\":228,\"./identity\":241}],124:[function(e,t,n){function r(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}t.exports=r},{}],125:[function(e,t,n){function r(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}t.exports=r},{}],126:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./_arrayMap\"),i=e(\"./isArray\"),a=e(\"./isSymbol\"),s=1/0,u=r?r.prototype:void 0,c=u?u.toString:void 0;function f(e){if(\"string\"==typeof e)return e;if(i(e))return o(e,f)+\"\";if(a(e))return c?c.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-s?\"-0\":t}t.exports=f},{\"./_Symbol\":60,\"./_arrayMap\":69,\"./isArray\":243,\"./isSymbol\":256}],127:[function(e,t,n){function r(e){return function(t){return e(t)}}t.exports=r},{}],128:[function(e,t,n){var r=e(\"./_SetCache\"),o=e(\"./_arrayIncludes\"),i=e(\"./_arrayIncludesWith\"),a=e(\"./_cacheHas\"),s=e(\"./_createSet\"),u=e(\"./_setToArray\"),c=200;function f(e,t,n){var f=-1,d=o,h=e.length,l=!0,p=[],v=p;if(n)l=!1,d=i;else if(h>=c){var _=t?null:s(e);if(_)return u(_);l=!1,d=a,v=new r}else v=t?[]:p;e:for(;++f<h;){var y=e[f],g=t?t(y):y;if(y=n||0!==y?y:0,l&&g==g){for(var b=v.length;b--;)if(v[b]===g)continue e;t&&v.push(g),p.push(y)}else d(v,g,n)||(v!==p&&v.push(g),p.push(y))}return p}t.exports=f},{\"./_SetCache\":58,\"./_arrayIncludes\":66,\"./_arrayIncludesWith\":67,\"./_cacheHas\":131,\"./_createSet\":152,\"./_setToArray\":212}],129:[function(e,t,n){var r=e(\"./_arrayMap\");function o(e,t){return r(t,(function(t){return e[t]}))}t.exports=o},{\"./_arrayMap\":69}],130:[function(e,t,n){function r(e,t,n){for(var r=-1,o=e.length,i=t.length,a={};++r<o;){var s=r<i?t[r]:void 0;n(a,e[r],s)}return a}t.exports=r},{}],131:[function(e,t,n){function r(e,t){return e.has(t)}t.exports=r},{}],132:[function(e,t,n){var r=e(\"./identity\");function o(e){return\"function\"==typeof e?e:r}t.exports=o},{\"./identity\":241}],133:[function(e,t,n){var r=e(\"./isArray\"),o=e(\"./_isKey\"),i=e(\"./_stringToPath\"),a=e(\"./toString\");function s(e,t){return r(e)?e:o(e,t)?[e]:i(a(e))}t.exports=s},{\"./_isKey\":183,\"./_stringToPath\":222,\"./isArray\":243,\"./toString\":283}],134:[function(e,t,n){var r=e(\"./_Uint8Array\");function o(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}t.exports=o},{\"./_Uint8Array\":61}],135:[function(e,t,n){var r=e(\"./_root\"),o=\"object\"==typeof n&&n&&!n.nodeType&&n,i=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o?r.Buffer:void 0,s=a?a.allocUnsafe:void 0;function u(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}t.exports=u},{\"./_root\":208}],136:[function(e,t,n){var r=e(\"./_cloneArrayBuffer\");function o(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}t.exports=o},{\"./_cloneArrayBuffer\":134}],137:[function(e,t,n){var r=/\\\\w*$/;function o(e){var t=new e.constructor(e.source,r.exec(e));return t.lastIndex=e.lastIndex,t}t.exports=o},{}],138:[function(e,t,n){var r=e(\"./_Symbol\"),o=r?r.prototype:void 0,i=o?o.valueOf:void 0;function a(e){return i?Object(i.call(e)):{}}t.exports=a},{\"./_Symbol\":60}],139:[function(e,t,n){var r=e(\"./_cloneArrayBuffer\");function o(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}t.exports=o},{\"./_cloneArrayBuffer\":134}],140:[function(e,t,n){var r=e(\"./isSymbol\");function o(e,t){if(e!==t){var n=void 0!==e,o=null===e,i=e==e,a=r(e),s=void 0!==t,u=null===t,c=t==t,f=r(t);if(!u&&!f&&!a&&e>t||a&&s&&c&&!u&&!f||o&&s&&c||!n&&c||!i)return 1;if(!o&&!a&&!f&&e<t||f&&n&&i&&!o&&!a||u&&n&&i||!s&&i||!c)return-1}return 0}t.exports=o},{\"./isSymbol\":256}],141:[function(e,t,n){var r=e(\"./_compareAscending\");function o(e,t,n){for(var o=-1,i=e.criteria,a=t.criteria,s=i.length,u=n.length;++o<s;){var c=r(i[o],a[o]);if(c)return o>=u?c:c*(\"desc\"==n[o]?-1:1)}return e.index-t.index}t.exports=o},{\"./_compareAscending\":140}],142:[function(e,t,n){function r(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}t.exports=r},{}],143:[function(e,t,n){var r=e(\"./_assignValue\"),o=e(\"./_baseAssignValue\");function i(e,t,n,i){var a=!n;n||(n={});for(var s=-1,u=t.length;++s<u;){var c=t[s],f=i?i(n[c],e[c],c,n,e):void 0;void 0===f&&(f=e[c]),a?o(n,c,f):r(n,c,f)}return n}t.exports=i},{\"./_assignValue\":75,\"./_baseAssignValue\":79}],144:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./_getSymbols\");function i(e,t){return r(e,o(e),t)}t.exports=i},{\"./_copyObject\":143,\"./_getSymbols\":166}],145:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./_getSymbolsIn\");function i(e,t){return r(e,o(e),t)}t.exports=i},{\"./_copyObject\":143,\"./_getSymbolsIn\":167}],146:[function(e,t,n){var r=e(\"./_root\")[\"__core-js_shared__\"];t.exports=r},{\"./_root\":208}],147:[function(e,t,n){var r=e(\"./_baseRest\"),o=e(\"./_isIterateeCall\");function i(e){return r((function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(a=e.length>3&&\"function\"==typeof a?(i--,a):void 0,s&&o(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),t=Object(t);++r<i;){var u=n[r];u&&e(t,u,r,a)}return t}))}t.exports=i},{\"./_baseRest\":121,\"./_isIterateeCall\":182}],148:[function(e,t,n){var r=e(\"./isArrayLike\");function o(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var i=n.length,a=t?i:-1,s=Object(n);(t?a--:++a<i)&&!1!==o(s[a],a,s););return n}}t.exports=o},{\"./isArrayLike\":244}],149:[function(e,t,n){function r(e){return function(t,n,r){for(var o=-1,i=Object(t),a=r(t),s=a.length;s--;){var u=a[e?s:++o];if(!1===n(i[u],u,i))break}return t}}t.exports=r},{}],150:[function(e,t,n){var r=e(\"./_baseIteratee\"),o=e(\"./isArrayLike\"),i=e(\"./keys\");function a(e){return function(t,n,a){var s=Object(t);if(!o(t)){var u=r(n,3);t=i(t),n=function(e){return u(s[e],e,s)}}var c=e(t,n,a);return c>-1?s[u?t[c]:c]:void 0}}t.exports=a},{\"./_baseIteratee\":105,\"./isArrayLike\":244,\"./keys\":259}],151:[function(e,t,n){var r=e(\"./_baseRange\"),o=e(\"./_isIterateeCall\"),i=e(\"./toFinite\");function a(e){return function(t,n,a){return a&&\"number\"!=typeof a&&o(t,n,a)&&(n=a=void 0),t=i(t),void 0===n?(n=t,t=0):n=i(n),a=void 0===a?t<n?1:-1:i(a),r(t,n,a,e)}}t.exports=a},{\"./_baseRange\":119,\"./_isIterateeCall\":182,\"./toFinite\":279}],152:[function(e,t,n){var r=e(\"./_Set\"),o=e(\"./noop\"),i=e(\"./_setToArray\"),a=1/0,s=r&&1/i(new r([,-0]))[1]==a?function(e){return new r(e)}:o;t.exports=s},{\"./_Set\":57,\"./_setToArray\":212,\"./noop\":269}],153:[function(e,t,n){var r=e(\"./_getNative\"),o=function(){try{var e=r(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}();t.exports=o},{\"./_getNative\":163}],154:[function(e,t,n){var r=e(\"./_SetCache\"),o=e(\"./_arraySome\"),i=e(\"./_cacheHas\"),a=1,s=2;function u(e,t,n,u,c,f){var d=n&a,h=e.length,l=t.length;if(h!=l&&!(d&&l>h))return!1;var p=f.get(e);if(p&&f.get(t))return p==t;var v=-1,_=!0,y=n&s?new r:void 0;for(f.set(e,t),f.set(t,e);++v<h;){var g=e[v],b=t[v];if(u)var m=d?u(b,g,v,t,e,f):u(g,b,v,e,t,f);if(void 0!==m){if(m)continue;_=!1;break}if(y){if(!o(t,(function(e,t){if(!i(y,t)&&(g===e||c(g,e,n,u,f)))return y.push(t)}))){_=!1;break}}else if(g!==b&&!c(g,b,n,u,f)){_=!1;break}}return f.delete(e),f.delete(t),_}t.exports=u},{\"./_SetCache\":58,\"./_arraySome\":72,\"./_cacheHas\":131}],155:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./_Uint8Array\"),i=e(\"./eq\"),a=e(\"./_equalArrays\"),s=e(\"./_mapToArray\"),u=e(\"./_setToArray\"),c=1,f=2,d=\"[object Boolean]\",h=\"[object Date]\",l=\"[object Error]\",p=\"[object Map]\",v=\"[object Number]\",_=\"[object RegExp]\",y=\"[object Set]\",g=\"[object String]\",b=\"[object Symbol]\",m=\"[object ArrayBuffer]\",x=\"[object DataView]\",w=r?r.prototype:void 0,E=w?w.valueOf:void 0;function j(e,t,n,r,w,j,k){switch(n){case x:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case m:return!(e.byteLength!=t.byteLength||!j(new o(e),new o(t)));case d:case h:case v:return i(+e,+t);case l:return e.name==t.name&&e.message==t.message;case _:case g:return e==t+\"\";case p:var A=s;case y:var O=r&c;if(A||(A=u),e.size!=t.size&&!O)return!1;var I=k.get(e);if(I)return I==t;r|=f,k.set(e,t);var S=a(A(e),A(t),r,w,j,k);return k.delete(e),S;case b:if(E)return E.call(e)==E.call(t)}return!1}t.exports=j},{\"./_Symbol\":60,\"./_Uint8Array\":61,\"./_equalArrays\":154,\"./_mapToArray\":198,\"./_setToArray\":212,\"./eq\":231}],156:[function(e,t,n){var r=e(\"./_getAllKeys\"),o=1,i=Object.prototype.hasOwnProperty;function a(e,t,n,a,s,u){var c=n&o,f=r(e),d=f.length;if(d!=r(t).length&&!c)return!1;for(var h=d;h--;){var l=f[h];if(!(c?l in t:i.call(t,l)))return!1}var p=u.get(e);if(p&&u.get(t))return p==t;var v=!0;u.set(e,t),u.set(t,e);for(var _=c;++h<d;){var y=e[l=f[h]],g=t[l];if(a)var b=c?a(g,y,l,t,e,u):a(y,g,l,e,t,u);if(!(void 0===b?y===g||s(y,g,n,a,u):b)){v=!1;break}_||(_=\"constructor\"==l)}if(v&&!_){var m=e.constructor,x=t.constructor;m==x||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof x&&x instanceof x||(v=!1)}return u.delete(e),u.delete(t),v}t.exports=a},{\"./_getAllKeys\":159}],157:[function(e,t,n){var r=e(\"./flatten\"),o=e(\"./_overRest\"),i=e(\"./_setToString\");function a(e){return i(o(e,void 0,r),e+\"\")}t.exports=a},{\"./_overRest\":207,\"./_setToString\":213,\"./flatten\":235}],158:[function(t,n,r){(function(e){var t=\"object\"==typeof e&&e&&e.Object===Object&&e;n.exports=t}).call(this,void 0!==e?e:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],159:[function(e,t,n){var r=e(\"./_baseGetAllKeys\"),o=e(\"./_getSymbols\"),i=e(\"./keys\");function a(e){return r(e,i,o)}t.exports=a},{\"./_baseGetAllKeys\":90,\"./_getSymbols\":166,\"./keys\":259}],160:[function(e,t,n){var r=e(\"./_baseGetAllKeys\"),o=e(\"./_getSymbolsIn\"),i=e(\"./keysIn\");function a(e){return r(e,i,o)}t.exports=a},{\"./_baseGetAllKeys\":90,\"./_getSymbolsIn\":167,\"./keysIn\":260}],161:[function(e,t,n){var r=e(\"./_isKeyable\");function o(e,t){var n=e.__data__;return r(t)?n[\"string\"==typeof t?\"string\":\"hash\"]:n.map}t.exports=o},{\"./_isKeyable\":184}],162:[function(e,t,n){var r=e(\"./_isStrictComparable\"),o=e(\"./keys\");function i(e){for(var t=o(e),n=t.length;n--;){var i=t[n],a=e[i];t[n]=[i,a,r(a)]}return t}t.exports=i},{\"./_isStrictComparable\":187,\"./keys\":259}],163:[function(e,t,n){var r=e(\"./_baseIsNative\"),o=e(\"./_getValue\");function i(e,t){var n=o(e,t);return r(n)?n:void 0}t.exports=i},{\"./_baseIsNative\":102,\"./_getValue\":169}],164:[function(e,t,n){var r=e(\"./_overArg\")(Object.getPrototypeOf,Object);t.exports=r},{\"./_overArg\":206}],165:[function(e,t,n){var r=e(\"./_Symbol\"),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=r?r.toStringTag:void 0;function u(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var o=a.call(e);return r&&(t?e[s]=n:delete e[s]),o}t.exports=u},{\"./_Symbol\":60}],166:[function(e,t,n){var r=e(\"./_arrayFilter\"),o=e(\"./stubArray\"),i=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(e){return null==e?[]:(e=Object(e),r(a(e),(function(t){return i.call(e,t)})))}:o;t.exports=s},{\"./_arrayFilter\":65,\"./stubArray\":277}],167:[function(e,t,n){var r=e(\"./_arrayPush\"),o=e(\"./_getPrototype\"),i=e(\"./_getSymbols\"),a=e(\"./stubArray\"),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,i(e)),e=o(e);return t}:a;t.exports=s},{\"./_arrayPush\":70,\"./_getPrototype\":164,\"./_getSymbols\":166,\"./stubArray\":277}],168:[function(e,t,n){var r=e(\"./_DataView\"),o=e(\"./_Map\"),i=e(\"./_Promise\"),a=e(\"./_Set\"),s=e(\"./_WeakMap\"),u=e(\"./_baseGetTag\"),c=e(\"./_toSource\"),f=\"[object Map]\",d=\"[object Object]\",h=\"[object Promise]\",l=\"[object Set]\",p=\"[object WeakMap]\",v=\"[object DataView]\",_=c(r),y=c(o),g=c(i),b=c(a),m=c(s),x=u;(r&&x(new r(new ArrayBuffer(1)))!=v||o&&x(new o)!=f||i&&x(i.resolve())!=h||a&&x(new a)!=l||s&&x(new s)!=p)&&(x=function(e){var t=u(e),n=t==d?e.constructor:void 0,r=n?c(n):\"\";if(r)switch(r){case _:return v;case y:return f;case g:return h;case b:return l;case m:return p}return t}),t.exports=x},{\"./_DataView\":51,\"./_Map\":54,\"./_Promise\":56,\"./_Set\":57,\"./_WeakMap\":62,\"./_baseGetTag\":91,\"./_toSource\":224}],169:[function(e,t,n){function r(e,t){return null==e?void 0:e[t]}t.exports=r},{}],170:[function(e,t,n){var r=e(\"./_castPath\"),o=e(\"./isArguments\"),i=e(\"./isArray\"),a=e(\"./_isIndex\"),s=e(\"./isLength\"),u=e(\"./_toKey\");function c(e,t,n){for(var c=-1,f=(t=r(t,e)).length,d=!1;++c<f;){var h=u(t[c]);if(!(d=null!=e&&n(e,h)))break;e=e[h]}return d||++c!=f?d:!!(f=null==e?0:e.length)&&s(f)&&a(h,f)&&(i(e)||o(e))}t.exports=c},{\"./_castPath\":133,\"./_isIndex\":181,\"./_toKey\":223,\"./isArguments\":242,\"./isArray\":243,\"./isLength\":249}],171:[function(e,t,n){var r=RegExp(\"[\\\\\\\\u200d\\\\\\\\ud800-\\\\\\\\udfff\\\\\\\\u0300-\\\\\\\\u036f\\\\\\\\ufe20-\\\\\\\\ufe2f\\\\\\\\u20d0-\\\\\\\\u20ff\\\\\\\\ufe0e\\\\\\\\ufe0f]\");function o(e){return r.test(e)}t.exports=o},{}],172:[function(e,t,n){var r=e(\"./_nativeCreate\");function o(){this.__data__=r?r(null):{},this.size=0}t.exports=o},{\"./_nativeCreate\":201}],173:[function(e,t,n){function r(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}t.exports=r},{}],174:[function(e,t,n){var r=e(\"./_nativeCreate\"),o=\"__lodash_hash_undefined__\",i=Object.prototype.hasOwnProperty;function a(e){var t=this.__data__;if(r){var n=t[e];return n===o?void 0:n}return i.call(t,e)?t[e]:void 0}t.exports=a},{\"./_nativeCreate\":201}],175:[function(e,t,n){var r=e(\"./_nativeCreate\"),o=Object.prototype.hasOwnProperty;function i(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}t.exports=i},{\"./_nativeCreate\":201}],176:[function(e,t,n){var r=e(\"./_nativeCreate\"),o=\"__lodash_hash_undefined__\";function i(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?o:t,this}t.exports=i},{\"./_nativeCreate\":201}],177:[function(e,t,n){var r=Object.prototype.hasOwnProperty;function o(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&r.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}t.exports=o},{}],178:[function(e,t,n){var r=e(\"./_cloneArrayBuffer\"),o=e(\"./_cloneDataView\"),i=e(\"./_cloneRegExp\"),a=e(\"./_cloneSymbol\"),s=e(\"./_cloneTypedArray\"),u=\"[object Boolean]\",c=\"[object Date]\",f=\"[object Map]\",d=\"[object Number]\",h=\"[object RegExp]\",l=\"[object Set]\",p=\"[object String]\",v=\"[object Symbol]\",_=\"[object ArrayBuffer]\",y=\"[object DataView]\",g=\"[object Float32Array]\",b=\"[object Float64Array]\",m=\"[object Int8Array]\",x=\"[object Int16Array]\",w=\"[object Int32Array]\",E=\"[object Uint8Array]\",j=\"[object Uint8ClampedArray]\",k=\"[object Uint16Array]\",A=\"[object Uint32Array]\";function O(e,t,n){var O=e.constructor;switch(t){case _:return r(e);case u:case c:return new O(+e);case y:return o(e,n);case g:case b:case m:case x:case w:case E:case j:case k:case A:return s(e,n);case f:return new O;case d:case p:return new O(e);case h:return i(e);case l:return new O;case v:return a(e)}}t.exports=O},{\"./_cloneArrayBuffer\":134,\"./_cloneDataView\":136,\"./_cloneRegExp\":137,\"./_cloneSymbol\":138,\"./_cloneTypedArray\":139}],179:[function(e,t,n){var r=e(\"./_baseCreate\"),o=e(\"./_getPrototype\"),i=e(\"./_isPrototype\");function a(e){return\"function\"!=typeof e.constructor||i(e)?{}:r(o(e))}t.exports=a},{\"./_baseCreate\":81,\"./_getPrototype\":164,\"./_isPrototype\":186}],180:[function(e,t,n){var r=e(\"./_Symbol\"),o=e(\"./isArguments\"),i=e(\"./isArray\"),a=r?r.isConcatSpreadable:void 0;function s(e){return i(e)||o(e)||!!(a&&e&&e[a])}t.exports=s},{\"./_Symbol\":60,\"./isArguments\":242,\"./isArray\":243}],181:[function(e,t,n){var r=9007199254740991,o=/^(?:0|[1-9]\\\\d*)$/;function i(e,t){var n=typeof e;return!!(t=null==t?r:t)&&(\"number\"==n||\"symbol\"!=n&&o.test(e))&&e>-1&&e%1==0&&e<t}t.exports=i},{}],182:[function(e,t,n){var r=e(\"./eq\"),o=e(\"./isArrayLike\"),i=e(\"./_isIndex\"),a=e(\"./isObject\");function s(e,t,n){if(!a(n))return!1;var s=typeof t;return!!(\"number\"==s?o(n)&&i(t,n.length):\"string\"==s&&t in n)&&r(n[t],e)}t.exports=s},{\"./_isIndex\":181,\"./eq\":231,\"./isArrayLike\":244,\"./isObject\":251}],183:[function(e,t,n){var r=e(\"./isArray\"),o=e(\"./isSymbol\"),i=/\\\\.|\\\\[(?:[^[\\\\]]*|([\"'])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\.)*?\\\\1)\\\\]/,a=/^\\\\w*$/;function s(e,t){if(r(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!o(e))||a.test(e)||!i.test(e)||null!=t&&e in Object(t)}t.exports=s},{\"./isArray\":243,\"./isSymbol\":256}],184:[function(e,t,n){function r(e){var t=typeof e;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==e:null===e}t.exports=r},{}],185:[function(e,t,n){var r,o=e(\"./_coreJsData\"),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\";function a(e){return!!i&&i in e}t.exports=a},{\"./_coreJsData\":146}],186:[function(e,t,n){var r=Object.prototype;function o(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||r)}t.exports=o},{}],187:[function(e,t,n){var r=e(\"./isObject\");function o(e){return e==e&&!r(e)}t.exports=o},{\"./isObject\":251}],188:[function(e,t,n){function r(){this.__data__=[],this.size=0}t.exports=r},{}],189:[function(e,t,n){var r=e(\"./_assocIndexOf\"),o=Array.prototype.splice;function i(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():o.call(t,n,1),--this.size,0))}t.exports=i},{\"./_assocIndexOf\":76}],190:[function(e,t,n){var r=e(\"./_assocIndexOf\");function o(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}t.exports=o},{\"./_assocIndexOf\":76}],191:[function(e,t,n){var r=e(\"./_assocIndexOf\");function o(e){return r(this.__data__,e)>-1}t.exports=o},{\"./_assocIndexOf\":76}],192:[function(e,t,n){var r=e(\"./_assocIndexOf\");function o(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}t.exports=o},{\"./_assocIndexOf\":76}],193:[function(e,t,n){var r=e(\"./_Hash\"),o=e(\"./_ListCache\"),i=e(\"./_Map\");function a(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}t.exports=a},{\"./_Hash\":52,\"./_ListCache\":53,\"./_Map\":54}],194:[function(e,t,n){var r=e(\"./_getMapData\");function o(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}t.exports=o},{\"./_getMapData\":161}],195:[function(e,t,n){var r=e(\"./_getMapData\");function o(e){return r(this,e).get(e)}t.exports=o},{\"./_getMapData\":161}],196:[function(e,t,n){var r=e(\"./_getMapData\");function o(e){return r(this,e).has(e)}t.exports=o},{\"./_getMapData\":161}],197:[function(e,t,n){var r=e(\"./_getMapData\");function o(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}t.exports=o},{\"./_getMapData\":161}],198:[function(e,t,n){function r(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}t.exports=r},{}],199:[function(e,t,n){function r(e,t){return function(n){return null!=n&&n[e]===t&&(void 0!==t||e in Object(n))}}t.exports=r},{}],200:[function(e,t,n){var r=e(\"./memoize\"),o=500;function i(e){var t=r(e,(function(e){return n.size===o&&n.clear(),e})),n=t.cache;return t}t.exports=i},{\"./memoize\":265}],201:[function(e,t,n){var r=e(\"./_getNative\")(Object,\"create\");t.exports=r},{\"./_getNative\":163}],202:[function(e,t,n){var r=e(\"./_overArg\")(Object.keys,Object);t.exports=r},{\"./_overArg\":206}],203:[function(e,t,n){function r(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}t.exports=r},{}],204:[function(e,t,n){var r=e(\"./_freeGlobal\"),o=\"object\"==typeof n&&n&&!n.nodeType&&n,i=o&&\"object\"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o&&r.process,s=function(){try{var e=i&&i.require&&i.require(\"util\").types;return e||a&&a.binding&&a.binding(\"util\")}catch(e){}}();t.exports=s},{\"./_freeGlobal\":158}],205:[function(e,t,n){var r=Object.prototype.toString;function o(e){return r.call(e)}t.exports=o},{}],206:[function(e,t,n){function r(e,t){return function(n){return e(t(n))}}t.exports=r},{}],207:[function(e,t,n){var r=e(\"./_apply\"),o=Math.max;function i(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,a=-1,s=o(i.length-t,0),u=Array(s);++a<s;)u[a]=i[t+a];a=-1;for(var c=Array(t+1);++a<t;)c[a]=i[a];return c[t]=n(u),r(e,this,c)}}t.exports=i},{\"./_apply\":63}],208:[function(e,t,n){var r=e(\"./_freeGlobal\"),o=\"object\"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function(\"return this\")();t.exports=i},{\"./_freeGlobal\":158}],209:[function(e,t,n){function r(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}t.exports=r},{}],210:[function(e,t,n){var r=\"__lodash_hash_undefined__\";function o(e){return this.__data__.set(e,r),this}t.exports=o},{}],211:[function(e,t,n){function r(e){return this.__data__.has(e)}t.exports=r},{}],212:[function(e,t,n){function r(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}t.exports=r},{}],213:[function(e,t,n){var r=e(\"./_baseSetToString\"),o=e(\"./_shortOut\")(r);t.exports=o},{\"./_baseSetToString\":123,\"./_shortOut\":214}],214:[function(e,t,n){var r=800,o=16,i=Date.now;function a(e){var t=0,n=0;return function(){var a=i(),s=o-(a-n);if(n=a,s>0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}t.exports=a},{}],215:[function(e,t,n){var r=e(\"./_ListCache\");function o(){this.__data__=new r,this.size=0}t.exports=o},{\"./_ListCache\":53}],216:[function(e,t,n){function r(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}t.exports=r},{}],217:[function(e,t,n){function r(e){return this.__data__.get(e)}t.exports=r},{}],218:[function(e,t,n){function r(e){return this.__data__.has(e)}t.exports=r},{}],219:[function(e,t,n){var r=e(\"./_ListCache\"),o=e(\"./_Map\"),i=e(\"./_MapCache\"),a=200;function s(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length<a-1)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(e,t),this.size=n.size,this}t.exports=s},{\"./_ListCache\":53,\"./_Map\":54,\"./_MapCache\":55}],220:[function(e,t,n){function r(e,t,n){for(var r=n-1,o=e.length;++r<o;)if(e[r]===t)return r;return-1}t.exports=r},{}],221:[function(e,t,n){var r=e(\"./_asciiSize\"),o=e(\"./_hasUnicode\"),i=e(\"./_unicodeSize\");function a(e){return o(e)?i(e):r(e)}t.exports=a},{\"./_asciiSize\":73,\"./_hasUnicode\":171,\"./_unicodeSize\":225}],222:[function(e,t,n){var r=e(\"./_memoizeCapped\"),o=/[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))/g,i=/\\\\\\\\(\\\\\\\\)?/g,a=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(i,\"$1\"):n||e)})),t}));t.exports=a},{\"./_memoizeCapped\":200}],223:[function(e,t,n){var r=e(\"./isSymbol\"),o=1/0;function i(e){if(\"string\"==typeof e||r(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-o?\"-0\":t}t.exports=i},{\"./isSymbol\":256}],224:[function(e,t,n){var r=Function.prototype.toString;function o(e){if(null!=e){try{return r.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}t.exports=o},{}],225:[function(e,t,n){var r=\"\\\\\\\\ud800-\\\\\\\\udfff\",o=\"[\"+r+\"]\",i=\"[\\\\\\\\u0300-\\\\\\\\u036f\\\\\\\\ufe20-\\\\\\\\ufe2f\\\\\\\\u20d0-\\\\\\\\u20ff]\",a=\"\\\\\\\\ud83c[\\\\\\\\udffb-\\\\\\\\udfff]\",s=\"[^\"+r+\"]\",u=\"(?:\\\\\\\\ud83c[\\\\\\\\udde6-\\\\\\\\uddff]){2}\",c=\"[\\\\\\\\ud800-\\\\\\\\udbff][\\\\\\\\udc00-\\\\\\\\udfff]\",f=\"(?:\"+i+\"|\"+a+\")?\",d=\"[\\\\\\\\ufe0e\\\\\\\\ufe0f]?\",h=d+f+\"(?:\\\\\\\\u200d(?:\"+[s,u,c].join(\"|\")+\")\"+d+f+\")*\",l=\"(?:\"+[s+i+\"?\",i,u,c,o].join(\"|\")+\")\",p=RegExp(a+\"(?=\"+a+\")|\"+l+h,\"g\");function v(e){for(var t=p.lastIndex=0;p.test(e);)++t;return t}t.exports=v},{}],226:[function(e,t,n){var r=e(\"./_baseClone\"),o=4;function i(e){return r(e,o)}t.exports=i},{\"./_baseClone\":80}],227:[function(e,t,n){var r=e(\"./_baseClone\"),o=1,i=4;function a(e){return r(e,o|i)}t.exports=a},{\"./_baseClone\":80}],228:[function(e,t,n){function r(e){return function(){return e}}t.exports=r},{}],229:[function(e,t,n){var r=e(\"./_baseRest\"),o=e(\"./eq\"),i=e(\"./_isIterateeCall\"),a=e(\"./keysIn\"),s=Object.prototype,u=s.hasOwnProperty,c=r((function(e,t){e=Object(e);var n=-1,r=t.length,c=r>2?t[2]:void 0;for(c&&i(t[0],t[1],c)&&(r=1);++n<r;)for(var f=t[n],d=a(f),h=-1,l=d.length;++h<l;){var p=d[h],v=e[p];(void 0===v||o(v,s[p])&&!u.call(e,p))&&(e[p]=f[p])}return e}));t.exports=c},{\"./_baseRest\":121,\"./_isIterateeCall\":182,\"./eq\":231,\"./keysIn\":260}],230:[function(e,t,n){t.exports=e(\"./forEach\")},{\"./forEach\":236}],231:[function(e,t,n){function r(e,t){return e===t||e!=e&&t!=t}t.exports=r},{}],232:[function(e,t,n){var r=e(\"./_arrayFilter\"),o=e(\"./_baseFilter\"),i=e(\"./_baseIteratee\"),a=e(\"./isArray\");function s(e,t){return(a(e)?r:o)(e,i(t,3))}t.exports=s},{\"./_arrayFilter\":65,\"./_baseFilter\":84,\"./_baseIteratee\":105,\"./isArray\":243}],233:[function(e,t,n){var r=e(\"./_createFind\")(e(\"./findIndex\"));t.exports=r},{\"./_createFind\":150,\"./findIndex\":234}],234:[function(e,t,n){var r=e(\"./_baseFindIndex\"),o=e(\"./_baseIteratee\"),i=e(\"./toInteger\"),a=Math.max;function s(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var u=null==n?0:i(n);return u<0&&(u=a(s+u,0)),r(e,o(t,3),u)}t.exports=s},{\"./_baseFindIndex\":85,\"./_baseIteratee\":105,\"./toInteger\":280}],235:[function(e,t,n){var r=e(\"./_baseFlatten\");function o(e){return null!=e&&e.length?r(e,1):[]}t.exports=o},{\"./_baseFlatten\":86}],236:[function(e,t,n){var r=e(\"./_arrayEach\"),o=e(\"./_baseEach\"),i=e(\"./_castFunction\"),a=e(\"./isArray\");function s(e,t){return(a(e)?r:o)(e,i(t))}t.exports=s},{\"./_arrayEach\":64,\"./_baseEach\":82,\"./_castFunction\":132,\"./isArray\":243}],237:[function(e,t,n){var r=e(\"./_baseFor\"),o=e(\"./_castFunction\"),i=e(\"./keysIn\");function a(e,t){return null==e?e:r(e,o(t),i)}t.exports=a},{\"./_baseFor\":87,\"./_castFunction\":132,\"./keysIn\":260}],238:[function(e,t,n){var r=e(\"./_baseGet\");function o(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}t.exports=o},{\"./_baseGet\":89}],239:[function(e,t,n){var r=e(\"./_baseHas\"),o=e(\"./_hasPath\");function i(e,t){return null!=e&&o(e,t,r)}t.exports=i},{\"./_baseHas\":93,\"./_hasPath\":170}],240:[function(e,t,n){var r=e(\"./_baseHasIn\"),o=e(\"./_hasPath\");function i(e,t){return null!=e&&o(e,t,r)}t.exports=i},{\"./_baseHasIn\":94,\"./_hasPath\":170}],241:[function(e,t,n){function r(e){return e}t.exports=r},{}],242:[function(e,t,n){var r=e(\"./_baseIsArguments\"),o=e(\"./isObjectLike\"),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,\"callee\")&&!s.call(e,\"callee\")};t.exports=u},{\"./_baseIsArguments\":96,\"./isObjectLike\":252}],243:[function(e,t,n){var r=Array.isArray;t.exports=r},{}],244:[function(e,t,n){var r=e(\"./isFunction\"),o=e(\"./isLength\");function i(e){return null!=e&&o(e.length)&&!r(e)}t.exports=i},{\"./isFunction\":248,\"./isLength\":249}],245:[function(e,t,n){var r=e(\"./isArrayLike\"),o=e(\"./isObjectLike\");function i(e){return o(e)&&r(e)}t.exports=i},{\"./isArrayLike\":244,\"./isObjectLike\":252}],246:[function(e,t,n){var r=e(\"./_root\"),o=e(\"./stubFalse\"),i=\"object\"==typeof n&&n&&!n.nodeType&&n,a=i&&\"object\"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===i?r.Buffer:void 0,u=(s?s.isBuffer:void 0)||o;t.exports=u},{\"./_root\":208,\"./stubFalse\":278}],247:[function(e,t,n){var r=e(\"./_baseKeys\"),o=e(\"./_getTag\"),i=e(\"./isArguments\"),a=e(\"./isArray\"),s=e(\"./isArrayLike\"),u=e(\"./isBuffer\"),c=e(\"./_isPrototype\"),f=e(\"./isTypedArray\"),d=\"[object Map]\",h=\"[object Set]\",l=Object.prototype.hasOwnProperty;function p(e){if(null==e)return!0;if(s(e)&&(a(e)||\"string\"==typeof e||\"function\"==typeof e.splice||u(e)||f(e)||i(e)))return!e.length;var t=o(e);if(t==d||t==h)return!e.size;if(c(e))return!r(e).length;for(var n in e)if(l.call(e,n))return!1;return!0}t.exports=p},{\"./_baseKeys\":106,\"./_getTag\":168,\"./_isPrototype\":186,\"./isArguments\":242,\"./isArray\":243,\"./isArrayLike\":244,\"./isBuffer\":246,\"./isTypedArray\":257}],248:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isObject\"),i=\"[object AsyncFunction]\",a=\"[object Function]\",s=\"[object GeneratorFunction]\",u=\"[object Proxy]\";function c(e){if(!o(e))return!1;var t=r(e);return t==a||t==s||t==i||t==u}t.exports=c},{\"./_baseGetTag\":91,\"./isObject\":251}],249:[function(e,t,n){var r=9007199254740991;function o(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=r}t.exports=o},{}],250:[function(e,t,n){var r=e(\"./_baseIsMap\"),o=e(\"./_baseUnary\"),i=e(\"./_nodeUtil\"),a=i&&i.isMap,s=a?o(a):r;t.exports=s},{\"./_baseIsMap\":99,\"./_baseUnary\":127,\"./_nodeUtil\":204}],251:[function(e,t,n){function r(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}t.exports=r},{}],252:[function(e,t,n){function r(e){return null!=e&&\"object\"==typeof e}t.exports=r},{}],253:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./_getPrototype\"),i=e(\"./isObjectLike\"),a=\"[object Object]\",s=Function.prototype,u=Object.prototype,c=s.toString,f=u.hasOwnProperty,d=c.call(Object);function h(e){if(!i(e)||r(e)!=a)return!1;var t=o(e);if(null===t)return!0;var n=f.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&c.call(n)==d}t.exports=h},{\"./_baseGetTag\":91,\"./_getPrototype\":164,\"./isObjectLike\":252}],254:[function(e,t,n){var r=e(\"./_baseIsSet\"),o=e(\"./_baseUnary\"),i=e(\"./_nodeUtil\"),a=i&&i.isSet,s=a?o(a):r;t.exports=s},{\"./_baseIsSet\":103,\"./_baseUnary\":127,\"./_nodeUtil\":204}],255:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isArray\"),i=e(\"./isObjectLike\"),a=\"[object String]\";function s(e){return\"string\"==typeof e||!o(e)&&i(e)&&r(e)==a}t.exports=s},{\"./_baseGetTag\":91,\"./isArray\":243,\"./isObjectLike\":252}],256:[function(e,t,n){var r=e(\"./_baseGetTag\"),o=e(\"./isObjectLike\"),i=\"[object Symbol]\";function a(e){return\"symbol\"==typeof e||o(e)&&r(e)==i}t.exports=a},{\"./_baseGetTag\":91,\"./isObjectLike\":252}],257:[function(e,t,n){var r=e(\"./_baseIsTypedArray\"),o=e(\"./_baseUnary\"),i=e(\"./_nodeUtil\"),a=i&&i.isTypedArray,s=a?o(a):r;t.exports=s},{\"./_baseIsTypedArray\":104,\"./_baseUnary\":127,\"./_nodeUtil\":204}],258:[function(e,t,n){function r(e){return void 0===e}t.exports=r},{}],259:[function(e,t,n){var r=e(\"./_arrayLikeKeys\"),o=e(\"./_baseKeys\"),i=e(\"./isArrayLike\");function a(e){return i(e)?r(e):o(e)}t.exports=a},{\"./_arrayLikeKeys\":68,\"./_baseKeys\":106,\"./isArrayLike\":244}],260:[function(e,t,n){var r=e(\"./_arrayLikeKeys\"),o=e(\"./_baseKeysIn\"),i=e(\"./isArrayLike\");function a(e){return i(e)?r(e,!0):o(e)}t.exports=a},{\"./_arrayLikeKeys\":68,\"./_baseKeysIn\":107,\"./isArrayLike\":244}],261:[function(e,t,n){function r(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}t.exports=r},{}],262:[function(e,t,n){var r=e(\"./_arrayMap\"),o=e(\"./_baseIteratee\"),i=e(\"./_baseMap\"),a=e(\"./isArray\");function s(e,t){return(a(e)?r:i)(e,o(t,3))}t.exports=s},{\"./_arrayMap\":69,\"./_baseIteratee\":105,\"./_baseMap\":109,\"./isArray\":243}],263:[function(e,t,n){var r=e(\"./_baseAssignValue\"),o=e(\"./_baseForOwn\"),i=e(\"./_baseIteratee\");function a(e,t){var n={};return t=i(t,3),o(e,(function(e,o,i){r(n,o,t(e,o,i))})),n}t.exports=a},{\"./_baseAssignValue\":79,\"./_baseForOwn\":88,\"./_baseIteratee\":105}],264:[function(e,t,n){var r=e(\"./_baseExtremum\"),o=e(\"./_baseGt\"),i=e(\"./identity\");function a(e){return e&&e.length?r(e,i,o):void 0}t.exports=a},{\"./_baseExtremum\":83,\"./_baseGt\":92,\"./identity\":241}],265:[function(e,t,n){var r=e(\"./_MapCache\"),o=\"Expected a function\";function i(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new TypeError(o);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},{\"./_MapCache\":55}],266:[function(e,t,n){var r=e(\"./_baseMerge\"),o=e(\"./_createAssigner\")((function(e,t,n){r(e,t,n)}));t.exports=o},{\"./_baseMerge\":112,\"./_createAssigner\":147}],267:[function(e,t,n){var r=e(\"./_baseExtremum\"),o=e(\"./_baseLt\"),i=e(\"./identity\");function a(e){return e&&e.length?r(e,i,o):void 0}t.exports=a},{\"./_baseExtremum\":83,\"./_baseLt\":108,\"./identity\":241}],268:[function(e,t,n){var r=e(\"./_baseExtremum\"),o=e(\"./_baseIteratee\"),i=e(\"./_baseLt\");function a(e,t){return e&&e.length?r(e,o(t,2),i):void 0}t.exports=a},{\"./_baseExtremum\":83,\"./_baseIteratee\":105,\"./_baseLt\":108}],269:[function(e,t,n){function r(){}t.exports=r},{}],270:[function(e,t,n){var r=e(\"./_root\"),o=function(){return r.Date.now()};t.exports=o},{\"./_root\":208}],271:[function(e,t,n){var r=e(\"./_basePick\"),o=e(\"./_flatRest\")((function(e,t){return null==e?{}:r(e,t)}));t.exports=o},{\"./_basePick\":115,\"./_flatRest\":157}],272:[function(e,t,n){var r=e(\"./_baseProperty\"),o=e(\"./_basePropertyDeep\"),i=e(\"./_isKey\"),a=e(\"./_toKey\");function s(e){return i(e)?r(a(e)):o(e)}t.exports=s},{\"./_baseProperty\":117,\"./_basePropertyDeep\":118,\"./_isKey\":183,\"./_toKey\":223}],273:[function(e,t,n){var r=e(\"./_createRange\")();t.exports=r},{\"./_createRange\":151}],274:[function(e,t,n){var r=e(\"./_arrayReduce\"),o=e(\"./_baseEach\"),i=e(\"./_baseIteratee\"),a=e(\"./_baseReduce\"),s=e(\"./isArray\");function u(e,t,n){var u=s(e)?r:a,c=arguments.length<3;return u(e,i(t,4),n,c,o)}t.exports=u},{\"./_arrayReduce\":71,\"./_baseEach\":82,\"./_baseIteratee\":105,\"./_baseReduce\":120,\"./isArray\":243}],275:[function(e,t,n){var r=e(\"./_baseKeys\"),o=e(\"./_getTag\"),i=e(\"./isArrayLike\"),a=e(\"./isString\"),s=e(\"./_stringSize\"),u=\"[object Map]\",c=\"[object Set]\";function f(e){if(null==e)return 0;if(i(e))return a(e)?s(e):e.length;var t=o(e);return t==u||t==c?e.size:r(e).length}t.exports=f},{\"./_baseKeys\":106,\"./_getTag\":168,\"./_stringSize\":221,\"./isArrayLike\":244,\"./isString\":255}],276:[function(e,t,n){var r=e(\"./_baseFlatten\"),o=e(\"./_baseOrderBy\"),i=e(\"./_baseRest\"),a=e(\"./_isIterateeCall\"),s=i((function(e,t){if(null==e)return[];var n=t.length;return n>1&&a(e,t[0],t[1])?t=[]:n>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),o(e,r(t,1),[])}));t.exports=s},{\"./_baseFlatten\":86,\"./_baseOrderBy\":114,\"./_baseRest\":121,\"./_isIterateeCall\":182}],277:[function(e,t,n){function r(){return[]}t.exports=r},{}],278:[function(e,t,n){function r(){return!1}t.exports=r},{}],279:[function(e,t,n){var r=e(\"./toNumber\"),o=1/0,i=17976931348623157e292;function a(e){return e?(e=r(e))===o||e===-o?(e<0?-1:1)*i:e==e?e:0:0===e?e:0}t.exports=a},{\"./toNumber\":281}],280:[function(e,t,n){var r=e(\"./toFinite\");function o(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}t.exports=o},{\"./toFinite\":279}],281:[function(e,t,n){var r=e(\"./isObject\"),o=e(\"./isSymbol\"),i=NaN,a=/^\\\\s+|\\\\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,c=/^0o[0-7]+$/i,f=parseInt;function d(e){if(\"number\"==typeof e)return e;if(o(e))return i;if(r(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(a,\"\");var n=u.test(e);return n||c.test(e)?f(e.slice(2),n?2:8):s.test(e)?i:+e}t.exports=d},{\"./isObject\":251,\"./isSymbol\":256}],282:[function(e,t,n){var r=e(\"./_copyObject\"),o=e(\"./keysIn\");function i(e){return r(e,o(e))}t.exports=i},{\"./_copyObject\":143,\"./keysIn\":260}],283:[function(e,t,n){var r=e(\"./_baseToString\");function o(e){return null==e?\"\":r(e)}t.exports=o},{\"./_baseToString\":126}],284:[function(e,t,n){var r=e(\"./_arrayEach\"),o=e(\"./_baseCreate\"),i=e(\"./_baseForOwn\"),a=e(\"./_baseIteratee\"),s=e(\"./_getPrototype\"),u=e(\"./isArray\"),c=e(\"./isBuffer\"),f=e(\"./isFunction\"),d=e(\"./isObject\"),h=e(\"./isTypedArray\");function l(e,t,n){var l=u(e),p=l||c(e)||h(e);if(t=a(t,4),null==n){var v=e&&e.constructor;n=p?l?new v:[]:d(e)&&f(v)?o(s(e)):{}}return(p?r:i)(e,(function(e,r,o){return t(n,e,r,o)})),n}t.exports=l},{\"./_arrayEach\":64,\"./_baseCreate\":81,\"./_baseForOwn\":88,\"./_baseIteratee\":105,\"./_getPrototype\":164,\"./isArray\":243,\"./isBuffer\":246,\"./isFunction\":248,\"./isObject\":251,\"./isTypedArray\":257}],285:[function(e,t,n){var r=e(\"./_baseFlatten\"),o=e(\"./_baseRest\"),i=e(\"./_baseUniq\"),a=e(\"./isArrayLikeObject\"),s=o((function(e){return i(r(e,1,a,!0))}));t.exports=s},{\"./_baseFlatten\":86,\"./_baseRest\":121,\"./_baseUniq\":128,\"./isArrayLikeObject\":245}],286:[function(e,t,n){var r=e(\"./toString\"),o=0;function i(e){var t=++o;return r(e)+t}t.exports=i},{\"./toString\":283}],287:[function(e,t,n){var r=e(\"./_baseValues\"),o=e(\"./keys\");function i(e){return null==e?[]:r(e,o(e))}t.exports=i},{\"./_baseValues\":129,\"./keys\":259}],288:[function(e,t,n){var r=e(\"./_assignValue\"),o=e(\"./_baseZipObject\");function i(e,t){return o(e||[],t||[],r)}t.exports=i},{\"./_assignValue\":75,\"./_baseZipObject\":130}]},{},[1])(1);var r={exports:{}};\n/*!\n\t * @overview es6-promise - a tiny implementation of Promises/A+.\n\t * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n\t * @license Licensed under MIT license\n\t * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n\t * @version v4.2.8+1e68dce6\n\t */function o(e,t){var r=e.subgraphs,o=e.nodes,i=e.links,a=e.hierarchy,s=new n.exports.graphlib.Graph({multigraph:!0,compound:!0,directed:!1!==t.digraph}).setGraph(t).setDefaultNodeLabel((function(){return{}})).setDefaultEdgeLabel((function(){return{}}));r.forEach((function(e){s.setNode(e.id,e)})),o.forEach((function(e){s.setNode(e.id,e)})),i.forEach((function(e){s.setEdge(e.source.id,e.target.id,e,e.id)})),a.forEach((function(e){s.setParent(e.child,e.parent)})),n.exports.layout(s,{debugTiming:!1});var u=-s.graph().width/2||0,c=-s.graph().height/2;return s.nodes().forEach((function(e){var t=s.node(e);t.x+=u,t.y+=c})),s.edges().forEach((function(e){var t=s.edge(e);t.points=t.points.map((function(e){return[e.x+u,e.y+c]}))})),{subgraphs:r,nodes:o,links:i}}!function(t,n){t.exports=function(){function t(e){var t=typeof e;return null!==e&&(\"object\"===t||\"function\"===t)}function n(e){return\"function\"==typeof e}var r=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},o=0,i=void 0,a=void 0,s=function(e,t){m[o]=e,m[o+1]=t,2===(o+=2)&&(a?a(x):E())};function u(e){a=e}function c(e){s=e}var f=\"undefined\"!=typeof window?window:void 0,d=f||{},h=d.MutationObserver||d.WebKitMutationObserver,l=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),p=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function v(){return function(){return process.nextTick(x)}}function _(){return void 0!==i?function(){i(x)}:b()}function y(){var e=0,t=new h(x),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function g(){var e=new MessageChannel;return e.port1.onmessage=x,function(){return e.port2.postMessage(0)}}function b(){var e=setTimeout;return function(){return e(x,1)}}var m=new Array(1e3);function x(){for(var e=0;e<o;e+=2)(0,m[e])(m[e+1]),m[e]=void 0,m[e+1]=void 0;o=0}function w(){try{var e=Function(\"return this\")().require(\"vertx\");return i=e.runOnLoop||e.runOnContext,_()}catch(e){return b()}}var E=void 0;function j(e,t){var n=this,r=new this.constructor(O);void 0===r[A]&&Y(r);var o=n._state;if(o){var i=arguments[o-1];s((function(){return V(o,r,i,n._result)}))}else U(n,r,e,t);return r}function k(e){var t=this;if(e&&\"object\"==typeof e&&e.constructor===t)return e;var n=new t(O);return D(n,e),n}E=l?v():h?y():p?g():void 0===f?w():b();var A=Math.random().toString(36).substring(2);function O(){}var I=void 0,S=1,C=2;function N(){return new TypeError(\"You cannot resolve a promise with itself\")}function T(){return new TypeError(\"A promises callback cannot return that same promise.\")}function M(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}function L(e,t,n){s((function(e){var r=!1,o=M(n,t,(function(n){r||(r=!0,t!==n?D(e,n):G(e,n))}),(function(t){r||(r=!0,R(e,t))}),\"Settle: \"+(e._label||\" unknown promise\"));!r&&o&&(r=!0,R(e,o))}),e)}function P(e,t){t._state===S?G(e,t._result):t._state===C?R(e,t._result):U(t,void 0,(function(t){return D(e,t)}),(function(t){return R(e,t)}))}function F(e,t,r){t.constructor===e.constructor&&r===j&&t.constructor.resolve===k?P(e,t):void 0===r?G(e,t):n(r)?L(e,t,r):G(e,t)}function D(e,n){if(e===n)R(e,N());else if(t(n)){var r=void 0;try{r=n.then}catch(t){return void R(e,t)}F(e,n,r)}else G(e,n)}function B(e){e._onerror&&e._onerror(e._result),z(e)}function G(e,t){e._state===I&&(e._result=t,e._state=S,0!==e._subscribers.length&&s(z,e))}function R(e,t){e._state===I&&(e._state=C,e._result=t,s(B,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+S]=n,o[i+C]=r,0===i&&e._state&&s(z,e)}function z(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,o=void 0,i=e._result,a=0;a<t.length;a+=3)r=t[a],o=t[a+n],r?V(n,r,o,i):o(i);e._subscribers.length=0}}function V(e,t,r,o){var i=n(r),a=void 0,s=void 0,u=!0;if(i){try{a=r(o)}catch(e){u=!1,s=e}if(t===a)return void R(t,T())}else a=o;t._state!==I||(i&&u?D(t,a):!1===u?R(t,s):e===S?G(t,a):e===C&&R(t,a))}function q(e,t){try{t((function(t){D(e,t)}),(function(t){R(e,t)}))}catch(t){R(e,t)}}var K=0;function H(){return K++}function Y(e){e[A]=K++,e._state=void 0,e._result=void 0,e._subscribers=[]}function $(){return new Error(\"Array Methods must be provided an Array\")}var W=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(O),this.promise[A]||Y(this.promise),r(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?G(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&G(this.promise,this._result))):R(this.promise,$())}return e.prototype._enumerate=function(e){for(var t=0;this._state===I&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===k){var o=void 0,i=void 0,a=!1;try{o=e.then}catch(e){a=!0,i=e}if(o===j&&e._state!==I)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===te){var s=new n(O);a?R(s,i):F(s,e,o),this._willSettleAt(s,t)}else this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(r(e),t)},e.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===I&&(this._remaining--,e===C?R(r,n):this._result[t]=n),0===this._remaining&&G(r,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,(function(e){return n._settledAt(S,t,e)}),(function(e){return n._settledAt(C,t,e)}))},e}();function J(e){return new W(this,e).promise}function X(e){var t=this;return r(e)?new t((function(n,r){for(var o=e.length,i=0;i<o;i++)t.resolve(e[i]).then(n,r)})):new t((function(e,t){return t(new TypeError(\"You must pass an array to race.\"))}))}function Z(e){var t=new this(O);return R(t,e),t}function Q(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function ee(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}var te=function(){function e(t){this[A]=H(),this._result=this._state=void 0,this._subscribers=[],O!==t&&(\"function\"!=typeof t&&Q(),this instanceof e?q(this,t):ee())}return e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){var t=this,r=t.constructor;return n(e)?t.then((function(t){return r.resolve(e()).then((function(){return t}))}),(function(t){return r.resolve(e()).then((function(){throw t}))})):t.then(e,e)},e}();function ne(){var t=void 0;if(void 0!==e)t=e;else if(\"undefined\"!=typeof self)t=self;else try{t=Function(\"return this\")()}catch(e){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if(\"[object Promise]\"===r&&!n.cast)return}t.Promise=te}return te.prototype.then=j,te.all=J,te.race=X,te.resolve=k,te.reject=Z,te._setScheduler=u,te._setAsap=c,te._asap=s,te.polyfill=ne,te.Promise=te,te}()}(r),r.exports.polyfill(),self.onmessage=function(e){var t=o.apply(void 0,e.data);self.postMessage(t)}}();`;\n\n const workerBlob = new Blob([workerCode], { type: \"application/javascript\" });\n const workerUrl = URL.createObjectURL(workerBlob);\n const worker = new Worker(workerUrl);\n const response = new Promise<string>(resolve => {\n worker.onmessage = event => {\n resolve(event.data);\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n };\n worker.postMessage([data, options]);\n });\n return {\n terminate: () => worker.terminate(),\n response\n };\n}\n","import { forceCenter as d3ForceCenter, forceLink as d3ForceLink, forceManyBody as d3ForceManyBody, forceSimulation as d3ForceSimulation, forceX as d3ForceX, forceY as d3ForceY } from \"d3-force\";\n\nimport { Layout } from \"./layout\";\n\nimport { Options } from \"./forceDirectedWorker\";\n\n// Non worker ---\n\nexport class ForceDirectedBase extends Layout {\n\n protected _links;\n protected _charge;\n protected _center;\n protected _simulation;\n\n constructor(graph, readonly _options: Options) {\n super(graph);\n }\n\n start() {\n return super.start().then(() => {\n\n const size = this._graph.size();\n const data = this._graph.graphData();\n const vertices = data.allVertices();\n const edges = data.allEdges();\n edges.forEach(e => delete e.points);\n\n this._links = d3ForceLink(edges)\n .id(d => d.id)\n .distance(this._options.linkDistance)\n .strength(this._options.linkStrength)\n ;\n\n this._charge = d3ForceManyBody()\n .strength(this._options.repulsionStrength)\n .distanceMin(this._options.distanceMin)\n .distanceMax(this._options.distanceMax)\n ;\n\n this._center = d3ForceCenter(size.width / 2, size.height / 2);\n\n const fx = d3ForceX()\n .strength(this._options.forceStrength)\n ;\n const fy = d3ForceY()\n .strength(this._options.forceStrength)\n ;\n\n this._simulation = d3ForceSimulation(vertices.map(v => {\n const { width, height } = v.element.node().getBBox();\n v.fx = (this._options.pinCentroid && v.centroid) ? size.width / 2 : undefined;\n v.fy = (this._options.pinCentroid && v.centroid) ? size.height / 2 : undefined;\n v[\"width\"] = width;\n v[\"height\"] = height;\n return v;\n }))\n .force(\"link\", this._links)\n .force(\"charge\", this._charge)\n .force(\"center\", this._center)\n .force(\"x\", fx)\n .force(\"y\", fy)\n .alpha(this._options.alpha / 2)\n .alphaMin(this._options.alphaMin)\n .alphaDecay(this._options.alphaDecay)\n .velocityDecay(this._options.velocityDecay)\n .stop()\n ;\n\n return this;\n });\n }\n\n stop() {\n this._simulation.stop();\n return super.stop();\n }\n}\n\nexport class ForceDirected extends ForceDirectedBase {\n\n start() {\n return super.start().then(() => {\n this._simulation.tick(this._options.iterations);\n this.stop();\n this._graph\n .moveVertices(false)\n .moveEdges(false)\n ;\n return this;\n });\n }\n}\n\nexport class ForceDirectedAnimated extends ForceDirectedBase {\n\n start() {\n return super.start().then(() => {\n return new Promise<this>(resolve => {\n this._simulation\n .on(\"tick\", () => {\n this._graph\n .moveVertices(false)\n .moveEdges(false)\n ;\n this._graph.progress(\"layout-tick\");\n })\n .on(\"end\", () => {\n this._running = false;\n resolve(this);\n })\n .restart()\n ;\n });\n });\n }\n}\n","import constant from \"./constant\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","export type Engine = \"circo\" | \"dot\" | \"fdp\" | \"neato\" | \"osage\" | \"patchwork\" | \"twopi\";\n\nexport interface Cluster {\n id: string;\n text: string;\n children: Array<Cluster | Node>;\n\n // result ---\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n}\n\nexport interface Node {\n id: string;\n text: string;\n width: number;\n height: number;\n\n // result ---\n x?: number;\n y?: number;\n}\n\nexport function isCluster(item: Cluster | Node): item is Cluster {\n return (item as Cluster).children !== undefined;\n}\n\nexport interface Link {\n id: string;\n source: Node;\n target: Node;\n text: string;\n\n // result ---\n points?: Array<[number, number]>;\n}\n\nexport interface Data {\n items: Array<Cluster | Node>;\n links: Link[];\n raw: string;\n}\n\nexport interface Options {\n engine: Engine;\n wasmFolder: string;\n}\n\nexport function graphviz(data: Data, options: Options) {\n // eslint-disable-next-line quotes\n const workerCode = `!function(){\"use strict\";\n/*! *****************************************************************************\n Copyright (c) Microsoft Corporation.\n\n Permission to use, copy, modify, and/or distribute this software for any\n purpose with or without fee is hereby granted.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n PERFORMANCE OF THIS SOFTWARE.\n ***************************************************************************** */function r(r,e,t){if(t||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return r.concat(n||Array.prototype.slice.call(e))}function e(r,e){return e.forEach((function(e){e&&\"string\"!=typeof e&&!Array.isArray(e)&&Object.keys(e).forEach((function(t){if(\"default\"!==t&&!(t in r)){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}}))})),Object.freeze(r)}var t,n,o,i={exports:{}};t=i,n=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0,o=function(r){var e,t,o=void 0!==(r=r||{})?r:{};o.ready=new Promise((function(r,n){e=r,t=n}));var i,a,s=Object.assign({},o),u=\"./this.program\",c=\"\";\"undefined\"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf(\"blob:\")?c.substr(0,c.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",i=r=>{var e=new XMLHttpRequest;return e.open(\"GET\",r,!1),e.send(null),e.responseText},a=(r,e,t)=>{var n=new XMLHttpRequest;n.open(\"GET\",r,!0),n.responseType=\"arraybuffer\",n.onload=()=>{200==n.status||0==n.status&&n.response?e(n.response):t()},n.onerror=t,n.send(null)};var l,d,f=o.print||console.log.bind(console),p=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments,o.thisProgram&&(u=o.thisProgram),o.quit,o.wasmBinary&&(l=o.wasmBinary),o.noExitRuntime,\"object\"!=typeof WebAssembly&&L(\"no native wasm support detected\");var h=!1;function m(r,e){r||L(e)}var v,w,_,y,E,g,b=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function k(r,e,t){for(var n=e+t,o=e;r[o]&&!(o>=n);)++o;if(o-e>16&&r.subarray&&b)return b.decode(r.subarray(e,o));for(var i=\"\";e<o;){var a=r[e++];if(128&a){var s=63&r[e++];if(192!=(224&a)){var u=63&r[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&r[e++])<65536)i+=String.fromCharCode(a);else{var c=a-65536;i+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function D(r,e){return r?k(_,r,e):\"\"}function S(r,e,t,n){if(!(n>0))return 0;for(var o=t,i=t+n-1,a=0;a<r.length;++a){var s=r.charCodeAt(a);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&r.charCodeAt(++a)),s<=127){if(t>=i)break;e[t++]=s}else if(s<=2047){if(t+1>=i)break;e[t++]=192|s>>6,e[t++]=128|63&s}else if(s<=65535){if(t+2>=i)break;e[t++]=224|s>>12,e[t++]=128|s>>6&63,e[t++]=128|63&s}else{if(t+3>=i)break;e[t++]=240|s>>18,e[t++]=128|s>>12&63,e[t++]=128|s>>6&63,e[t++]=128|63&s}}return e[t]=0,t-o}function A(r){for(var e=0,t=0;t<r.length;++t){var n=r.charCodeAt(t);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&r.charCodeAt(++t)),n<=127?++e:e+=n<=2047?2:n<=65535?3:4}return e}function P(r){v=r,o.HEAP8=w=new Int8Array(r),o.HEAP16=new Int16Array(r),o.HEAP32=y=new Int32Array(r),o.HEAPU8=_=new Uint8Array(r),o.HEAPU16=new Uint16Array(r),o.HEAPU32=new Uint32Array(r),o.HEAPF32=new Float32Array(r),o.HEAPF64=E=new Float64Array(r)}o.INITIAL_MEMORY;var x,F,M,R,C=[],j=[],z=[],T=0,B=null;function N(r){T++,o.monitorRunDependencies&&o.monitorRunDependencies(T)}function O(r){if(T--,o.monitorRunDependencies&&o.monitorRunDependencies(T),0==T&&B){var e=B;B=null,e()}}function L(r){o.onAbort&&o.onAbort(r),p(r=\"Aborted(\"+r+\")\"),h=!0,r+=\". Build with -s ASSERTIONS=1 for more info.\";var e=new WebAssembly.RuntimeError(r);throw t(e),e}function I(r){return r.startsWith(\"data:application/octet-stream;base64,\")}function U(r){try{if(r==x&&l)return new Uint8Array(l);throw\"both async and sync fetching of the wasm failed\"}catch(r){L(r)}}o.preloadedImages={},o.preloadedAudios={},I(x=\"expatlib.wasm\")||(F=x,x=o.locateFile?o.locateFile(F,c):c+F);var H={11678:function(r){var e=o.getCache(o.CExpatJS)[r];if(!e.hasOwnProperty(\"startElement\"))throw\"a JSImplementation must implement all functions, you forgot CExpatJS::startElement.\";e.startElement()},11896:function(r){var e=o.getCache(o.CExpatJS)[r];if(!e.hasOwnProperty(\"endElement\"))throw\"a JSImplementation must implement all functions, you forgot CExpatJS::endElement.\";e.endElement()},12108:function(r){var e=o.getCache(o.CExpatJS)[r];if(!e.hasOwnProperty(\"characterData\"))throw\"a JSImplementation must implement all functions, you forgot CExpatJS::characterData.\";e.characterData()}};function G(r){for(;r.length>0;){var e=r.shift();if(\"function\"!=typeof e){var t=e.func;\"number\"==typeof t?void 0===e.arg?q(t)():q(t)(e.arg):t(void 0===e.arg?null:e.arg)}else e(o)}}function q(r){return g.get(r)}var W={splitPath:function(r){return/^(\\\\/?|)([\\\\s\\\\S]*?)((?:\\\\.{1,2}|[^\\\\/]+?|)(\\\\.[^.\\\\/]*|))(?:[\\\\/]*)$/.exec(r).slice(1)},normalizeArray:function(r,e){for(var t=0,n=r.length-1;n>=0;n--){var o=r[n];\".\"===o?r.splice(n,1):\"..\"===o?(r.splice(n,1),t++):t&&(r.splice(n,1),t--)}if(e)for(;t;t--)r.unshift(\"..\");return r},normalize:function(r){var e=\"/\"===r.charAt(0),t=\"/\"===r.substr(-1);return(r=W.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||e||(r=\".\"),r&&t&&(r+=\"/\"),(e?\"/\":\"\")+r},dirname:function(r){var e=W.splitPath(r),t=e[0],n=e[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):\".\"},basename:function(r){if(\"/\"===r)return\"/\";var e=(r=(r=W.normalize(r)).replace(/\\\\/$/,\"\")).lastIndexOf(\"/\");return-1===e?r:r.substr(e+1)},extname:function(r){return W.splitPath(r)[3]},join:function(){var r=Array.prototype.slice.call(arguments,0);return W.normalize(r.join(\"/\"))},join2:function(r,e){return W.normalize(r+\"/\"+e)}},V={resolve:function(){for(var r=\"\",e=!1,t=arguments.length-1;t>=-1&&!e;t--){var n=t>=0?arguments[t]:Y.cwd();if(\"string\"!=typeof n)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!n)return\"\";r=n+\"/\"+r,e=\"/\"===n.charAt(0)}return(e?\"/\":\"\")+(r=W.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||\".\"},relative:function(r,e){function t(r){for(var e=0;e<r.length&&\"\"===r[e];e++);for(var t=r.length-1;t>=0&&\"\"===r[t];t--);return e>t?[]:r.slice(e,t-e+1)}r=V.resolve(r).substr(1),e=V.resolve(e).substr(1);for(var n=t(r.split(\"/\")),o=t(e.split(\"/\")),i=Math.min(n.length,o.length),a=i,s=0;s<i;s++)if(n[s]!==o[s]){a=s;break}var u=[];for(s=a;s<n.length;s++)u.push(\"..\");return(u=u.concat(o.slice(a))).join(\"/\")}},J={ttys:[],init:function(){},shutdown:function(){},register:function(r,e){J.ttys[r]={input:[],output:[],ops:e},Y.registerDevice(r,J.stream_ops)},stream_ops:{open:function(r){var e=J.ttys[r.node.rdev];if(!e)throw new Y.ErrnoError(43);r.tty=e,r.seekable=!1},close:function(r){r.tty.ops.flush(r.tty)},flush:function(r){r.tty.ops.flush(r.tty)},read:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.get_char)throw new Y.ErrnoError(60);for(var i=0,a=0;a<n;a++){var s;try{s=r.tty.ops.get_char(r.tty)}catch(r){throw new Y.ErrnoError(29)}if(void 0===s&&0===i)throw new Y.ErrnoError(6);if(null==s)break;i++,e[t+a]=s}return i&&(r.node.timestamp=Date.now()),i},write:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.put_char)throw new Y.ErrnoError(60);try{for(var i=0;i<n;i++)r.tty.ops.put_char(r.tty,e[t+i])}catch(r){throw new Y.ErrnoError(29)}return n&&(r.node.timestamp=Date.now()),i}},default_tty_ops:{get_char:function(r){if(!r.input.length){var e=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt?null!==(e=window.prompt(\"Input: \"))&&(e+=\"\\\\n\"):\"function\"==typeof readline&&null!==(e=readline())&&(e+=\"\\\\n\"),!e)return null;r.input=or(e,!0)}return r.input.shift()},put_char:function(r,e){null===e||10===e?(f(k(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(f(k(r.output,0)),r.output=[])}},default_tty1_ops:{put_char:function(r,e){null===e||10===e?(p(k(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(p(k(r.output,0)),r.output=[])}}},X={ops_table:null,mount:function(r){return X.createNode(null,\"/\",16895,0)},createNode:function(r,e,t,n){if(Y.isBlkdev(t)||Y.isFIFO(t))throw new Y.ErrnoError(63);X.ops_table||(X.ops_table={dir:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr,lookup:X.node_ops.lookup,mknod:X.node_ops.mknod,rename:X.node_ops.rename,unlink:X.node_ops.unlink,rmdir:X.node_ops.rmdir,readdir:X.node_ops.readdir,symlink:X.node_ops.symlink},stream:{llseek:X.stream_ops.llseek}},file:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr},stream:{llseek:X.stream_ops.llseek,read:X.stream_ops.read,write:X.stream_ops.write,allocate:X.stream_ops.allocate,mmap:X.stream_ops.mmap,msync:X.stream_ops.msync}},link:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr,readlink:X.node_ops.readlink},stream:{}},chrdev:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr},stream:Y.chrdev_stream_ops}});var o=Y.createNode(r,e,t,n);return Y.isDir(o.mode)?(o.node_ops=X.ops_table.dir.node,o.stream_ops=X.ops_table.dir.stream,o.contents={}):Y.isFile(o.mode)?(o.node_ops=X.ops_table.file.node,o.stream_ops=X.ops_table.file.stream,o.usedBytes=0,o.contents=null):Y.isLink(o.mode)?(o.node_ops=X.ops_table.link.node,o.stream_ops=X.ops_table.link.stream):Y.isChrdev(o.mode)&&(o.node_ops=X.ops_table.chrdev.node,o.stream_ops=X.ops_table.chrdev.stream),o.timestamp=Date.now(),r&&(r.contents[e]=o,r.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(r){return r.contents?r.contents.subarray?r.contents.subarray(0,r.usedBytes):new Uint8Array(r.contents):new Uint8Array(0)},expandFileStorage:function(r,e){var t=r.contents?r.contents.length:0;if(!(t>=e)){e=Math.max(e,t*(t<1048576?2:1.125)>>>0),0!=t&&(e=Math.max(e,256));var n=r.contents;r.contents=new Uint8Array(e),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage:function(r,e){if(r.usedBytes!=e)if(0==e)r.contents=null,r.usedBytes=0;else{var t=r.contents;r.contents=new Uint8Array(e),t&&r.contents.set(t.subarray(0,Math.min(e,r.usedBytes))),r.usedBytes=e}},node_ops:{getattr:function(r){var e={};return e.dev=Y.isChrdev(r.mode)?r.id:1,e.ino=r.id,e.mode=r.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=r.rdev,Y.isDir(r.mode)?e.size=4096:Y.isFile(r.mode)?e.size=r.usedBytes:Y.isLink(r.mode)?e.size=r.link.length:e.size=0,e.atime=new Date(r.timestamp),e.mtime=new Date(r.timestamp),e.ctime=new Date(r.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(r,e){void 0!==e.mode&&(r.mode=e.mode),void 0!==e.timestamp&&(r.timestamp=e.timestamp),void 0!==e.size&&X.resizeFileStorage(r,e.size)},lookup:function(r,e){throw Y.genericErrors[44]},mknod:function(r,e,t,n){return X.createNode(r,e,t,n)},rename:function(r,e,t){if(Y.isDir(r.mode)){var n;try{n=Y.lookupNode(e,t)}catch(r){}if(n)for(var o in n.contents)throw new Y.ErrnoError(55)}delete r.parent.contents[r.name],r.parent.timestamp=Date.now(),r.name=t,e.contents[t]=r,e.timestamp=r.parent.timestamp,r.parent=e},unlink:function(r,e){delete r.contents[e],r.timestamp=Date.now()},rmdir:function(r,e){var t=Y.lookupNode(r,e);for(var n in t.contents)throw new Y.ErrnoError(55);delete r.contents[e],r.timestamp=Date.now()},readdir:function(r){var e=[\".\",\"..\"];for(var t in r.contents)r.contents.hasOwnProperty(t)&&e.push(t);return e},symlink:function(r,e,t){var n=X.createNode(r,e,41471,0);return n.link=t,n},readlink:function(r){if(!Y.isLink(r.mode))throw new Y.ErrnoError(28);return r.link}},stream_ops:{read:function(r,e,t,n,o){var i=r.node.contents;if(o>=r.node.usedBytes)return 0;var a=Math.min(r.node.usedBytes-o,n);if(a>8&&i.subarray)e.set(i.subarray(o,o+a),t);else for(var s=0;s<a;s++)e[t+s]=i[o+s];return a},write:function(r,e,t,n,o,i){if(e.buffer===w.buffer&&(i=!1),!n)return 0;var a=r.node;if(a.timestamp=Date.now(),e.subarray&&(!a.contents||a.contents.subarray)){if(i)return a.contents=e.subarray(t,t+n),a.usedBytes=n,n;if(0===a.usedBytes&&0===o)return a.contents=e.slice(t,t+n),a.usedBytes=n,n;if(o+n<=a.usedBytes)return a.contents.set(e.subarray(t,t+n),o),n}if(X.expandFileStorage(a,o+n),a.contents.subarray&&e.subarray)a.contents.set(e.subarray(t,t+n),o);else for(var s=0;s<n;s++)a.contents[o+s]=e[t+s];return a.usedBytes=Math.max(a.usedBytes,o+n),n},llseek:function(r,e,t){var n=e;if(1===t?n+=r.position:2===t&&Y.isFile(r.node.mode)&&(n+=r.node.usedBytes),n<0)throw new Y.ErrnoError(28);return n},allocate:function(r,e,t){X.expandFileStorage(r.node,e+t),r.node.usedBytes=Math.max(r.node.usedBytes,e+t)},mmap:function(r,e,t,n,o,i){if(0!==e)throw new Y.ErrnoError(28);if(!Y.isFile(r.node.mode))throw new Y.ErrnoError(43);var a,s,u=r.node.contents;if(2&i||u.buffer!==v){if((n>0||n+t<u.length)&&(u=u.subarray?u.subarray(n,n+t):Array.prototype.slice.call(u,n,n+t)),s=!0,!(a=void L()))throw new Y.ErrnoError(48);w.set(u,a)}else s=!1,a=u.byteOffset;return{ptr:a,allocated:s}},msync:function(r,e,t,n,o){if(!Y.isFile(r.node.mode))throw new Y.ErrnoError(43);return 2&o||X.stream_ops.write(r,e,0,n,t,!1),0}}},Y={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(r,e={})=>{if(!(r=V.resolve(Y.cwd(),r)))return{path:\"\",node:null};var t={follow_mount:!0,recurse_count:0};for(var n in t)void 0===e[n]&&(e[n]=t[n]);if(e.recurse_count>8)throw new Y.ErrnoError(32);for(var o=W.normalizeArray(r.split(\"/\").filter((r=>!!r)),!1),i=Y.root,a=\"/\",s=0;s<o.length;s++){var u=s===o.length-1;if(u&&e.parent)break;if(i=Y.lookupNode(i,o[s]),a=W.join2(a,o[s]),Y.isMountpoint(i)&&(!u||u&&e.follow_mount)&&(i=i.mounted.root),!u||e.follow)for(var c=0;Y.isLink(i.mode);){var l=Y.readlink(a);if(a=V.resolve(W.dirname(a),l),i=Y.lookupPath(a,{recurse_count:e.recurse_count}).node,c++>40)throw new Y.ErrnoError(32)}}return{path:a,node:i}},getPath:r=>{for(var e;;){if(Y.isRoot(r)){var t=r.mount.mountpoint;return e?\"/\"!==t[t.length-1]?t+\"/\"+e:t+e:t}e=e?r.name+\"/\"+e:r.name,r=r.parent}},hashName:(r,e)=>{for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(r+t>>>0)%Y.nameTable.length},hashAddNode:r=>{var e=Y.hashName(r.parent.id,r.name);r.name_next=Y.nameTable[e],Y.nameTable[e]=r},hashRemoveNode:r=>{var e=Y.hashName(r.parent.id,r.name);if(Y.nameTable[e]===r)Y.nameTable[e]=r.name_next;else for(var t=Y.nameTable[e];t;){if(t.name_next===r){t.name_next=r.name_next;break}t=t.name_next}},lookupNode:(r,e)=>{var t=Y.mayLookup(r);if(t)throw new Y.ErrnoError(t,r);for(var n=Y.hashName(r.id,e),o=Y.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===r.id&&i===e)return o}return Y.lookup(r,e)},createNode:(r,e,t,n)=>{var o=new Y.FSNode(r,e,t,n);return Y.hashAddNode(o),o},destroyNode:r=>{Y.hashRemoveNode(r)},isRoot:r=>r===r.parent,isMountpoint:r=>!!r.mounted,isFile:r=>32768==(61440&r),isDir:r=>16384==(61440&r),isLink:r=>40960==(61440&r),isChrdev:r=>8192==(61440&r),isBlkdev:r=>24576==(61440&r),isFIFO:r=>4096==(61440&r),isSocket:r=>49152==(49152&r),flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:r=>{var e=Y.flagModes[r];if(void 0===e)throw new Error(\"Unknown file open mode: \"+r);return e},flagsToPermissionString:r=>{var e=[\"r\",\"w\",\"rw\"][3&r];return 512&r&&(e+=\"w\"),e},nodePermissions:(r,e)=>Y.ignorePermissions||(!e.includes(\"r\")||292&r.mode)&&(!e.includes(\"w\")||146&r.mode)&&(!e.includes(\"x\")||73&r.mode)?0:2,mayLookup:r=>{var e=Y.nodePermissions(r,\"x\");return e||(r.node_ops.lookup?0:2)},mayCreate:(r,e)=>{try{return Y.lookupNode(r,e),20}catch(r){}return Y.nodePermissions(r,\"wx\")},mayDelete:(r,e,t)=>{var n;try{n=Y.lookupNode(r,e)}catch(r){return r.errno}var o=Y.nodePermissions(r,\"wx\");if(o)return o;if(t){if(!Y.isDir(n.mode))return 54;if(Y.isRoot(n)||Y.getPath(n)===Y.cwd())return 10}else if(Y.isDir(n.mode))return 31;return 0},mayOpen:(r,e)=>r?Y.isLink(r.mode)?32:Y.isDir(r.mode)&&(\"r\"!==Y.flagsToPermissionString(e)||512&e)?31:Y.nodePermissions(r,Y.flagsToPermissionString(e)):44,MAX_OPEN_FDS:4096,nextfd:(r=0,e=Y.MAX_OPEN_FDS)=>{for(var t=r;t<=e;t++)if(!Y.streams[t])return t;throw new Y.ErrnoError(33)},getStream:r=>Y.streams[r],createStream:(r,e,t)=>{Y.FSStream||(Y.FSStream=function(){},Y.FSStream.prototype={object:{get:function(){return this.node},set:function(r){this.node=r}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}),r=Object.assign(new Y.FSStream,r);var n=Y.nextfd(e,t);return r.fd=n,Y.streams[n]=r,r},closeStream:r=>{Y.streams[r]=null},chrdev_stream_ops:{open:r=>{var e=Y.getDevice(r.node.rdev);r.stream_ops=e.stream_ops,r.stream_ops.open&&r.stream_ops.open(r)},llseek:()=>{throw new Y.ErrnoError(70)}},major:r=>r>>8,minor:r=>255&r,makedev:(r,e)=>r<<8|e,registerDevice:(r,e)=>{Y.devices[r]={stream_ops:e}},getDevice:r=>Y.devices[r],getMounts:r=>{for(var e=[],t=[r];t.length;){var n=t.pop();e.push(n),t.push.apply(t,n.mounts)}return e},syncfs:(r,e)=>{\"function\"==typeof r&&(e=r,r=!1),Y.syncFSRequests++,Y.syncFSRequests>1&&p(\"warning: \"+Y.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var t=Y.getMounts(Y.root.mount),n=0;function o(r){return Y.syncFSRequests--,e(r)}function i(r){if(r)return i.errored?void 0:(i.errored=!0,o(r));++n>=t.length&&o(null)}t.forEach((e=>{if(!e.type.syncfs)return i(null);e.type.syncfs(e,r,i)}))},mount:(r,e,t)=>{var n,o=\"/\"===t,i=!t;if(o&&Y.root)throw new Y.ErrnoError(10);if(!o&&!i){var a=Y.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,Y.isMountpoint(n))throw new Y.ErrnoError(10);if(!Y.isDir(n.mode))throw new Y.ErrnoError(54)}var s={type:r,opts:e,mountpoint:t,mounts:[]},u=r.mount(s);return u.mount=s,s.root=u,o?Y.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:r=>{var e=Y.lookupPath(r,{follow_mount:!1});if(!Y.isMountpoint(e.node))throw new Y.ErrnoError(28);var t=e.node,n=t.mounted,o=Y.getMounts(n);Object.keys(Y.nameTable).forEach((r=>{for(var e=Y.nameTable[r];e;){var t=e.name_next;o.includes(e.mount)&&Y.destroyNode(e),e=t}})),t.mounted=null;var i=t.mount.mounts.indexOf(n);t.mount.mounts.splice(i,1)},lookup:(r,e)=>r.node_ops.lookup(r,e),mknod:(r,e,t)=>{var n=Y.lookupPath(r,{parent:!0}).node,o=W.basename(r);if(!o||\".\"===o||\"..\"===o)throw new Y.ErrnoError(28);var i=Y.mayCreate(n,o);if(i)throw new Y.ErrnoError(i);if(!n.node_ops.mknod)throw new Y.ErrnoError(63);return n.node_ops.mknod(n,o,e,t)},create:(r,e)=>(e=void 0!==e?e:438,e&=4095,e|=32768,Y.mknod(r,e,0)),mkdir:(r,e)=>(e=void 0!==e?e:511,e&=1023,e|=16384,Y.mknod(r,e,0)),mkdirTree:(r,e)=>{for(var t=r.split(\"/\"),n=\"\",o=0;o<t.length;++o)if(t[o]){n+=\"/\"+t[o];try{Y.mkdir(n,e)}catch(r){if(20!=r.errno)throw r}}},mkdev:(r,e,t)=>(void 0===t&&(t=e,e=438),e|=8192,Y.mknod(r,e,t)),symlink:(r,e)=>{if(!V.resolve(r))throw new Y.ErrnoError(44);var t=Y.lookupPath(e,{parent:!0}).node;if(!t)throw new Y.ErrnoError(44);var n=W.basename(e),o=Y.mayCreate(t,n);if(o)throw new Y.ErrnoError(o);if(!t.node_ops.symlink)throw new Y.ErrnoError(63);return t.node_ops.symlink(t,n,r)},rename:(r,e)=>{var t,n,o=W.dirname(r),i=W.dirname(e),a=W.basename(r),s=W.basename(e);if(t=Y.lookupPath(r,{parent:!0}).node,n=Y.lookupPath(e,{parent:!0}).node,!t||!n)throw new Y.ErrnoError(44);if(t.mount!==n.mount)throw new Y.ErrnoError(75);var u,c=Y.lookupNode(t,a),l=V.relative(r,i);if(\".\"!==l.charAt(0))throw new Y.ErrnoError(28);if(\".\"!==(l=V.relative(e,o)).charAt(0))throw new Y.ErrnoError(55);try{u=Y.lookupNode(n,s)}catch(r){}if(c!==u){var d=Y.isDir(c.mode),f=Y.mayDelete(t,a,d);if(f)throw new Y.ErrnoError(f);if(f=u?Y.mayDelete(n,s,d):Y.mayCreate(n,s))throw new Y.ErrnoError(f);if(!t.node_ops.rename)throw new Y.ErrnoError(63);if(Y.isMountpoint(c)||u&&Y.isMountpoint(u))throw new Y.ErrnoError(10);if(n!==t&&(f=Y.nodePermissions(t,\"w\")))throw new Y.ErrnoError(f);Y.hashRemoveNode(c);try{t.node_ops.rename(c,n,s)}catch(r){throw r}finally{Y.hashAddNode(c)}}},rmdir:r=>{var e=Y.lookupPath(r,{parent:!0}).node,t=W.basename(r),n=Y.lookupNode(e,t),o=Y.mayDelete(e,t,!0);if(o)throw new Y.ErrnoError(o);if(!e.node_ops.rmdir)throw new Y.ErrnoError(63);if(Y.isMountpoint(n))throw new Y.ErrnoError(10);e.node_ops.rmdir(e,t),Y.destroyNode(n)},readdir:r=>{var e=Y.lookupPath(r,{follow:!0}).node;if(!e.node_ops.readdir)throw new Y.ErrnoError(54);return e.node_ops.readdir(e)},unlink:r=>{var e=Y.lookupPath(r,{parent:!0}).node;if(!e)throw new Y.ErrnoError(44);var t=W.basename(r),n=Y.lookupNode(e,t),o=Y.mayDelete(e,t,!1);if(o)throw new Y.ErrnoError(o);if(!e.node_ops.unlink)throw new Y.ErrnoError(63);if(Y.isMountpoint(n))throw new Y.ErrnoError(10);e.node_ops.unlink(e,t),Y.destroyNode(n)},readlink:r=>{var e=Y.lookupPath(r).node;if(!e)throw new Y.ErrnoError(44);if(!e.node_ops.readlink)throw new Y.ErrnoError(28);return V.resolve(Y.getPath(e.parent),e.node_ops.readlink(e))},stat:(r,e)=>{var t=Y.lookupPath(r,{follow:!e}).node;if(!t)throw new Y.ErrnoError(44);if(!t.node_ops.getattr)throw new Y.ErrnoError(63);return t.node_ops.getattr(t)},lstat:r=>Y.stat(r,!0),chmod:(r,e,t)=>{var n;if(!(n=\"string\"==typeof r?Y.lookupPath(r,{follow:!t}).node:r).node_ops.setattr)throw new Y.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&e|-4096&n.mode,timestamp:Date.now()})},lchmod:(r,e)=>{Y.chmod(r,e,!0)},fchmod:(r,e)=>{var t=Y.getStream(r);if(!t)throw new Y.ErrnoError(8);Y.chmod(t.node,e)},chown:(r,e,t,n)=>{var o;if(!(o=\"string\"==typeof r?Y.lookupPath(r,{follow:!n}).node:r).node_ops.setattr)throw new Y.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(r,e,t)=>{Y.chown(r,e,t,!0)},fchown:(r,e,t)=>{var n=Y.getStream(r);if(!n)throw new Y.ErrnoError(8);Y.chown(n.node,e,t)},truncate:(r,e)=>{if(e<0)throw new Y.ErrnoError(28);var t;if(!(t=\"string\"==typeof r?Y.lookupPath(r,{follow:!0}).node:r).node_ops.setattr)throw new Y.ErrnoError(63);if(Y.isDir(t.mode))throw new Y.ErrnoError(31);if(!Y.isFile(t.mode))throw new Y.ErrnoError(28);var n=Y.nodePermissions(t,\"w\");if(n)throw new Y.ErrnoError(n);t.node_ops.setattr(t,{size:e,timestamp:Date.now()})},ftruncate:(r,e)=>{var t=Y.getStream(r);if(!t)throw new Y.ErrnoError(8);if(0==(2097155&t.flags))throw new Y.ErrnoError(28);Y.truncate(t.node,e)},utime:(r,e,t)=>{var n=Y.lookupPath(r,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(e,t)})},open:(r,e,t,n,i)=>{if(\"\"===r)throw new Y.ErrnoError(44);var a;if(t=void 0===t?438:t,t=64&(e=\"string\"==typeof e?Y.modeStringToFlags(e):e)?4095&t|32768:0,\"object\"==typeof r)a=r;else{r=W.normalize(r);try{a=Y.lookupPath(r,{follow:!(131072&e)}).node}catch(r){}}var s=!1;if(64&e)if(a){if(128&e)throw new Y.ErrnoError(20)}else a=Y.mknod(r,t,0),s=!0;if(!a)throw new Y.ErrnoError(44);if(Y.isChrdev(a.mode)&&(e&=-513),65536&e&&!Y.isDir(a.mode))throw new Y.ErrnoError(54);if(!s){var u=Y.mayOpen(a,e);if(u)throw new Y.ErrnoError(u)}512&e&&Y.truncate(a,0),e&=-131713;var c=Y.createStream({node:a,path:Y.getPath(a),flags:e,seekable:!0,position:0,stream_ops:a.stream_ops,ungotten:[],error:!1},n,i);return c.stream_ops.open&&c.stream_ops.open(c),!o.logReadFiles||1&e||(Y.readFiles||(Y.readFiles={}),r in Y.readFiles||(Y.readFiles[r]=1)),c},close:r=>{if(Y.isClosed(r))throw new Y.ErrnoError(8);r.getdents&&(r.getdents=null);try{r.stream_ops.close&&r.stream_ops.close(r)}catch(r){throw r}finally{Y.closeStream(r.fd)}r.fd=null},isClosed:r=>null===r.fd,llseek:(r,e,t)=>{if(Y.isClosed(r))throw new Y.ErrnoError(8);if(!r.seekable||!r.stream_ops.llseek)throw new Y.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Y.ErrnoError(28);return r.position=r.stream_ops.llseek(r,e,t),r.ungotten=[],r.position},read:(r,e,t,n,o)=>{if(n<0||o<0)throw new Y.ErrnoError(28);if(Y.isClosed(r))throw new Y.ErrnoError(8);if(1==(2097155&r.flags))throw new Y.ErrnoError(8);if(Y.isDir(r.node.mode))throw new Y.ErrnoError(31);if(!r.stream_ops.read)throw new Y.ErrnoError(28);var i=void 0!==o;if(i){if(!r.seekable)throw new Y.ErrnoError(70)}else o=r.position;var a=r.stream_ops.read(r,e,t,n,o);return i||(r.position+=a),a},write:(r,e,t,n,o,i)=>{if(n<0||o<0)throw new Y.ErrnoError(28);if(Y.isClosed(r))throw new Y.ErrnoError(8);if(0==(2097155&r.flags))throw new Y.ErrnoError(8);if(Y.isDir(r.node.mode))throw new Y.ErrnoError(31);if(!r.stream_ops.write)throw new Y.ErrnoError(28);r.seekable&&1024&r.flags&&Y.llseek(r,0,2);var a=void 0!==o;if(a){if(!r.seekable)throw new Y.ErrnoError(70)}else o=r.position;var s=r.stream_ops.write(r,e,t,n,o,i);return a||(r.position+=s),s},allocate:(r,e,t)=>{if(Y.isClosed(r))throw new Y.ErrnoError(8);if(e<0||t<=0)throw new Y.ErrnoError(28);if(0==(2097155&r.flags))throw new Y.ErrnoError(8);if(!Y.isFile(r.node.mode)&&!Y.isDir(r.node.mode))throw new Y.ErrnoError(43);if(!r.stream_ops.allocate)throw new Y.ErrnoError(138);r.stream_ops.allocate(r,e,t)},mmap:(r,e,t,n,o,i)=>{if(0!=(2&o)&&0==(2&i)&&2!=(2097155&r.flags))throw new Y.ErrnoError(2);if(1==(2097155&r.flags))throw new Y.ErrnoError(2);if(!r.stream_ops.mmap)throw new Y.ErrnoError(43);return r.stream_ops.mmap(r,e,t,n,o,i)},msync:(r,e,t,n,o)=>r&&r.stream_ops.msync?r.stream_ops.msync(r,e,t,n,o):0,munmap:r=>0,ioctl:(r,e,t)=>{if(!r.stream_ops.ioctl)throw new Y.ErrnoError(59);return r.stream_ops.ioctl(r,e,t)},readFile:(r,e={})=>{if(e.flags=e.flags||0,e.encoding=e.encoding||\"binary\",\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw new Error('Invalid encoding type \"'+e.encoding+'\"');var t,n=Y.open(r,e.flags),o=Y.stat(r).size,i=new Uint8Array(o);return Y.read(n,i,0,o,0),\"utf8\"===e.encoding?t=k(i,0):\"binary\"===e.encoding&&(t=i),Y.close(n),t},writeFile:(r,e,t={})=>{t.flags=t.flags||577;var n=Y.open(r,t.flags,t.mode);if(\"string\"==typeof e){var o=new Uint8Array(A(e)+1),i=S(e,o,0,o.length);Y.write(n,o,0,i,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(e))throw new Error(\"Unsupported data type\");Y.write(n,e,0,e.byteLength,void 0,t.canOwn)}Y.close(n)},cwd:()=>Y.currentPath,chdir:r=>{var e=Y.lookupPath(r,{follow:!0});if(null===e.node)throw new Y.ErrnoError(44);if(!Y.isDir(e.node.mode))throw new Y.ErrnoError(54);var t=Y.nodePermissions(e.node,\"x\");if(t)throw new Y.ErrnoError(t);Y.currentPath=e.path},createDefaultDirectories:()=>{Y.mkdir(\"/tmp\"),Y.mkdir(\"/home\"),Y.mkdir(\"/home/web_user\")},createDefaultDevices:()=>{Y.mkdir(\"/dev\"),Y.registerDevice(Y.makedev(1,3),{read:()=>0,write:(r,e,t,n,o)=>n}),Y.mkdev(\"/dev/null\",Y.makedev(1,3)),J.register(Y.makedev(5,0),J.default_tty_ops),J.register(Y.makedev(6,0),J.default_tty1_ops),Y.mkdev(\"/dev/tty\",Y.makedev(5,0)),Y.mkdev(\"/dev/tty1\",Y.makedev(6,0));var r=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var r=new Uint8Array(1);return function(){return crypto.getRandomValues(r),r[0]}}return function(){L(\"randomDevice\")}}();Y.createDevice(\"/dev\",\"random\",r),Y.createDevice(\"/dev\",\"urandom\",r),Y.mkdir(\"/dev/shm\"),Y.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:()=>{Y.mkdir(\"/proc\");var r=Y.mkdir(\"/proc/self\");Y.mkdir(\"/proc/self/fd\"),Y.mount({mount:()=>{var e=Y.createNode(r,\"fd\",16895,73);return e.node_ops={lookup:(r,e)=>{var t=+e,n=Y.getStream(t);if(!n)throw new Y.ErrnoError(8);var o={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},e}},{},\"/proc/self/fd\")},createStandardStreams:()=>{o.stdin?Y.createDevice(\"/dev\",\"stdin\",o.stdin):Y.symlink(\"/dev/tty\",\"/dev/stdin\"),o.stdout?Y.createDevice(\"/dev\",\"stdout\",null,o.stdout):Y.symlink(\"/dev/tty\",\"/dev/stdout\"),o.stderr?Y.createDevice(\"/dev\",\"stderr\",null,o.stderr):Y.symlink(\"/dev/tty1\",\"/dev/stderr\"),Y.open(\"/dev/stdin\",0),Y.open(\"/dev/stdout\",1),Y.open(\"/dev/stderr\",1)},ensureErrnoError:()=>{Y.ErrnoError||(Y.ErrnoError=function(r,e){this.node=e,this.setErrno=function(r){this.errno=r},this.setErrno(r),this.message=\"FS error\"},Y.ErrnoError.prototype=new Error,Y.ErrnoError.prototype.constructor=Y.ErrnoError,[44].forEach((r=>{Y.genericErrors[r]=new Y.ErrnoError(r),Y.genericErrors[r].stack=\"<generic error, no stack>\"})))},staticInit:()=>{Y.ensureErrnoError(),Y.nameTable=new Array(4096),Y.mount(X,{},\"/\"),Y.createDefaultDirectories(),Y.createDefaultDevices(),Y.createSpecialDirectories(),Y.filesystems={MEMFS:X}},init:(r,e,t)=>{Y.init.initialized=!0,Y.ensureErrnoError(),o.stdin=r||o.stdin,o.stdout=e||o.stdout,o.stderr=t||o.stderr,Y.createStandardStreams()},quit:()=>{Y.init.initialized=!1;for(var r=0;r<Y.streams.length;r++){var e=Y.streams[r];e&&Y.close(e)}},getMode:(r,e)=>{var t=0;return r&&(t|=365),e&&(t|=146),t},findObject:(r,e)=>{var t=Y.analyzePath(r,e);return t.exists?t.object:null},analyzePath:(r,e)=>{try{r=(n=Y.lookupPath(r,{follow:!e})).path}catch(r){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=Y.lookupPath(r,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=W.basename(r),n=Y.lookupPath(r,{follow:!e}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot=\"/\"===n.path}catch(r){t.error=r.errno}return t},createPath:(r,e,t,n)=>{r=\"string\"==typeof r?r:Y.getPath(r);for(var o=e.split(\"/\").reverse();o.length;){var i=o.pop();if(i){var a=W.join2(r,i);try{Y.mkdir(a)}catch(r){}r=a}}return a},createFile:(r,e,t,n,o)=>{var i=W.join2(\"string\"==typeof r?r:Y.getPath(r),e),a=Y.getMode(n,o);return Y.create(i,a)},createDataFile:(r,e,t,n,o,i)=>{var a=e;r&&(r=\"string\"==typeof r?r:Y.getPath(r),a=e?W.join2(r,e):r);var s=Y.getMode(n,o),u=Y.create(a,s);if(t){if(\"string\"==typeof t){for(var c=new Array(t.length),l=0,d=t.length;l<d;++l)c[l]=t.charCodeAt(l);t=c}Y.chmod(u,146|s);var f=Y.open(u,577);Y.write(f,t,0,t.length,0,i),Y.close(f),Y.chmod(u,s)}return u},createDevice:(r,e,t,n)=>{var o=W.join2(\"string\"==typeof r?r:Y.getPath(r),e),i=Y.getMode(!!t,!!n);Y.createDevice.major||(Y.createDevice.major=64);var a=Y.makedev(Y.createDevice.major++,0);return Y.registerDevice(a,{open:r=>{r.seekable=!1},close:r=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(r,e,n,o,i)=>{for(var a=0,s=0;s<o;s++){var u;try{u=t()}catch(r){throw new Y.ErrnoError(29)}if(void 0===u&&0===a)throw new Y.ErrnoError(6);if(null==u)break;a++,e[n+s]=u}return a&&(r.node.timestamp=Date.now()),a},write:(r,e,t,o,i)=>{for(var a=0;a<o;a++)try{n(e[t+a])}catch(r){throw new Y.ErrnoError(29)}return o&&(r.node.timestamp=Date.now()),a}}),Y.mkdev(o,i,a)},forceLoadFile:r=>{if(r.isDevice||r.isFolder||r.link||r.contents)return!0;if(\"undefined\"!=typeof XMLHttpRequest)throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(!i)throw new Error(\"Cannot load without read() or XMLHttpRequest.\");try{r.contents=or(i(r.url),!0),r.usedBytes=r.contents.length}catch(r){throw new Y.ErrnoError(29)}},createLazyFile:(r,e,t,n,o)=>{function i(){this.lengthKnown=!1,this.chunks=[]}if(i.prototype.get=function(r){if(!(r>this.length-1||r<0)){var e=r%this.chunkSize,t=r/this.chunkSize|0;return this.getter(t)[e]}},i.prototype.setDataGetter=function(r){this.getter=r},i.prototype.cacheLength=function(){var r=new XMLHttpRequest;if(r.open(\"HEAD\",t,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+r.status);var e,n=Number(r.getResponseHeader(\"Content-length\")),o=(e=r.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===e,i=(e=r.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===e,a=1048576;o||(a=n);var s=this;s.setDataGetter((r=>{var e=r*a,o=(r+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=((r,e)=>{if(r>e)throw new Error(\"invalid range (\"+r+\", \"+e+\") or no bytes requested!\");if(e>n-1)throw new Error(\"only \"+n+\" bytes available! programmer error!\");var o=new XMLHttpRequest;if(o.open(\"GET\",t,!1),n!==a&&o.setRequestHeader(\"Range\",\"bytes=\"+r+\"-\"+e),o.responseType=\"arraybuffer\",o.overrideMimeType&&o.overrideMimeType(\"text/plain; charset=x-user-defined\"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):or(o.responseText||\"\",!0)})(e,o)),void 0===s.chunks[r])throw new Error(\"doXHR failed!\");return s.chunks[r]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,f(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},\"undefined\"!=typeof XMLHttpRequest)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var a={isDevice:!1,url:t},s=Y.createFile(r,e,a,n,o);a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(s.stream_ops).forEach((r=>{var e=s.stream_ops[r];u[r]=function(){return Y.forceLoadFile(s),e.apply(null,arguments)}})),u.read=(r,e,t,n,o)=>{Y.forceLoadFile(s);var i=r.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var u=0;u<a;u++)e[t+u]=i[o+u];else for(u=0;u<a;u++)e[t+u]=i.get(o+u);return a},s.stream_ops=u,s},createPreloadedFile:(r,e,t,n,o,i,s,u,c,l)=>{var d=e?V.resolve(W.join2(r,e)):r;function f(t){function a(t){l&&l(),u||Y.createDataFile(r,e,t,n,o,c),i&&i(),O()}Browser.handledByPreloadPlugin(t,d,a,(()=>{s&&s(),O()}))||a(t)}N(),\"string\"==typeof t?function(r,e,t,n){var o=n?\"\":\"al \"+r;a(r,(function(t){m(t,'Loading data file \"'+r+'\" failed (no arrayBuffer).'),e(new Uint8Array(t)),o&&O()}),(function(e){if(!t)throw'Loading data file \"'+r+'\" failed.';t()})),o&&N()}(t,(r=>f(r)),s):f(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>\"EM_FS_\"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=Y.indexedDB();try{var o=n.open(Y.DB_NAME(),Y.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=()=>{f(\"creating db\"),o.result.createObjectStore(Y.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([Y.DB_STORE_NAME],\"readwrite\"),i=n.objectStore(Y.DB_STORE_NAME),a=0,s=0,u=r.length;function c(){0==s?e():t()}r.forEach((r=>{var e=i.put(Y.analyzePath(r).object.contents,r);e.onsuccess=()=>{++a+s==u&&c()},e.onerror=()=>{s++,a+s==u&&c()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=Y.indexedDB();try{var o=n.open(Y.DB_NAME(),Y.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var i=n.transaction([Y.DB_STORE_NAME],\"readonly\")}catch(r){return void t(r)}var a=i.objectStore(Y.DB_STORE_NAME),s=0,u=0,c=r.length;function l(){0==u?e():t()}r.forEach((r=>{var e=a.get(r);e.onsuccess=()=>{Y.analyzePath(r).exists&&Y.unlink(r),Y.createDataFile(W.dirname(r),W.basename(r),e.result,!0,!0,!0),++s+u==c&&l()},e.onerror=()=>{u++,s+u==c&&l()}})),i.onerror=t},o.onerror=t}},K={DEFAULT_POLLMASK:5,calculateAt:function(r,e,t){if(\"/\"===e[0])return e;var n;if(-100===r)n=Y.cwd();else{var o=Y.getStream(r);if(!o)throw new Y.ErrnoError(8);n=o.path}if(0==e.length){if(!t)throw new Y.ErrnoError(44);return n}return W.join2(n,e)},doStat:function(r,e,t){try{var n=r(e)}catch(r){if(r&&r.node&&W.normalize(e)!==W.normalize(Y.getPath(r.node)))return-54;throw r}return y[t>>2]=n.dev,y[t+4>>2]=0,y[t+8>>2]=n.ino,y[t+12>>2]=n.mode,y[t+16>>2]=n.nlink,y[t+20>>2]=n.uid,y[t+24>>2]=n.gid,y[t+28>>2]=n.rdev,y[t+32>>2]=0,R=[n.size>>>0,(M=n.size,+Math.abs(M)>=1?M>0?(0|Math.min(+Math.floor(M/4294967296),4294967295))>>>0:~~+Math.ceil((M-+(~~M>>>0))/4294967296)>>>0:0)],y[t+40>>2]=R[0],y[t+44>>2]=R[1],y[t+48>>2]=4096,y[t+52>>2]=n.blocks,y[t+56>>2]=n.atime.getTime()/1e3|0,y[t+60>>2]=0,y[t+64>>2]=n.mtime.getTime()/1e3|0,y[t+68>>2]=0,y[t+72>>2]=n.ctime.getTime()/1e3|0,y[t+76>>2]=0,R=[n.ino>>>0,(M=n.ino,+Math.abs(M)>=1?M>0?(0|Math.min(+Math.floor(M/4294967296),4294967295))>>>0:~~+Math.ceil((M-+(~~M>>>0))/4294967296)>>>0:0)],y[t+80>>2]=R[0],y[t+84>>2]=R[1],0},doMsync:function(r,e,t,n,o){var i=_.slice(r,r+t);Y.msync(e,i,o,t,n)},doMkdir:function(r,e){return\"/\"===(r=W.normalize(r))[r.length-1]&&(r=r.substr(0,r.length-1)),Y.mkdir(r,e,0),0},doMknod:function(r,e,t){switch(61440&e){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return Y.mknod(r,e,t),0},doReadlink:function(r,e,t){if(t<=0)return-28;var n=Y.readlink(r),o=Math.min(t,A(n)),i=w[e+o];return S(n,_,e,t+1),w[e+o]=i,o},doAccess:function(r,e){if(-8&e)return-28;var t=Y.lookupPath(r,{follow:!0}).node;if(!t)return-44;var n=\"\";return 4&e&&(n+=\"r\"),2&e&&(n+=\"w\"),1&e&&(n+=\"x\"),n&&Y.nodePermissions(t,n)?-2:0},doDup:function(r,e,t){var n=Y.getStream(t);return n&&Y.close(n),Y.open(r,e,0,t,t).fd},doReadv:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=y[e+8*i>>2],s=y[e+(8*i+4)>>2],u=Y.read(r,w,a,s,n);if(u<0)return-1;if(o+=u,u<s)break}return o},doWritev:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=y[e+8*i>>2],s=y[e+(8*i+4)>>2],u=Y.write(r,w,a,s,n);if(u<0)return-1;o+=u}return o},varargs:void 0,get:function(){return K.varargs+=4,y[K.varargs-4>>2]},getStr:function(r){return D(r)},getStreamFromFD:function(r){var e=Y.getStream(r);if(!e)throw new Y.ErrnoError(8);return e},get64:function(r,e){return r}},$=[];function Q(r){try{return d.grow(r-v.byteLength+65535>>>16),P(d.buffer),1}catch(r){}}var Z={};function rr(){if(!rr.strings){var r={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:u||\"./this.program\"};for(var e in Z)void 0===Z[e]?delete r[e]:r[e]=Z[e];var t=[];for(var e in r)t.push(e+\"=\"+r[e]);rr.strings=t}return rr.strings}var er=function(r,e,t,n){r||(r=this),this.parent=r,this.mount=r.mount,this.mounted=null,this.id=Y.nextInode++,this.name=e,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},tr=365,nr=146;function or(r,e,t){var n=t>0?t:A(r)+1,o=new Array(n),i=S(r,o,0,o.length);return e&&(o.length=i),o}Object.defineProperties(er.prototype,{read:{get:function(){return(this.mode&tr)===tr},set:function(r){r?this.mode|=tr:this.mode&=-366}},write:{get:function(){return(this.mode&nr)===nr},set:function(r){r?this.mode|=nr:this.mode&=-147}},isFolder:{get:function(){return Y.isDir(this.mode)}},isDevice:{get:function(){return Y.isChrdev(this.mode)}}}),Y.FSNode=er,Y.staticInit();var ir={g:function(r,e,t){K.varargs=t;try{var n=K.getStr(r),o=t?K.get():0;return Y.open(n,e,o).fd}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return-r.errno}},d:function(){L(\"\")},a:function(r,e,t){var n=function(r,e){var t;for($.length=0,e>>=2;t=_[r++];){var n=t<105;n&&1&e&&e++,$.push(n?E[e++>>1]:y[e]),++e}return $}(e,t);return H[r].apply(null,n)},j:function(r,e,t){_.copyWithin(r,e,e+t)},e:function(r){var e,t,n=_.length,o=2147483648;if((r>>>=0)>o)return!1;for(var i=1;i<=4;i*=2){var a=n*(1+.2/i);if(a=Math.min(a,r+100663296),Q(Math.min(o,(e=Math.max(r,a))+((t=65536)-e%t)%t)))return!0}return!1},h:function(r,e){var t=0;return rr().forEach((function(n,o){var i=e+t;y[r+4*o>>2]=i,function(r,e,t){for(var n=0;n<r.length;++n)w[e++>>0]=r.charCodeAt(n);t||(w[e>>0]=0)}(n,i),t+=n.length+1})),0},i:function(r,e){var t=rr();y[r>>2]=t.length;var n=0;return t.forEach((function(r){n+=r.length+1})),y[e>>2]=n,0},c:function(r){try{var e=K.getStreamFromFD(r);return Y.close(e),0}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},f:function(r,e,t,n){try{var o=K.getStreamFromFD(r),i=K.doReadv(o,e,t);return y[n>>2]=i,0}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},k:function(r,e,t,n,o){try{var i=K.getStreamFromFD(r),a=4294967296*t+(e>>>0),s=9007199254740992;return a<=-s||a>=s?-61:(Y.llseek(i,a,n),R=[i.position>>>0,(M=i.position,+Math.abs(M)>=1?M>0?(0|Math.min(+Math.floor(M/4294967296),4294967295))>>>0:~~+Math.ceil((M-+(~~M>>>0))/4294967296)>>>0:0)],y[o>>2]=R[0],y[o+4>>2]=R[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},b:function(r,e,t,n){try{var o=K.getStreamFromFD(r),i=K.doWritev(o,e,t);return y[n>>2]=i,0}catch(r){if(void 0===Y||!(r instanceof Y.ErrnoError))throw r;return r.errno}},l:function(r){var e=Date.now();return y[r>>2]=e/1e3|0,y[r+4>>2]=e%1e3*1e3|0,0}};!function(){var r={a:ir};function e(r,e){var t,n=r.exports;o.asm=n,P((d=o.asm.m).buffer),g=o.asm.G,t=o.asm.n,j.unshift(t),O()}function n(r){e(r.instance)}function i(e){return(l||\"function\"!=typeof fetch?Promise.resolve().then((function(){return U(x)})):fetch(x,{credentials:\"same-origin\"}).then((function(r){if(!r.ok)throw\"failed to load wasm binary file at '\"+x+\"'\";return r.arrayBuffer()})).catch((function(){return U(x)}))).then((function(e){return WebAssembly.instantiate(e,r)})).then((function(r){return r})).then(e,(function(r){p(\"failed to asynchronously prepare wasm: \"+r),L(r)}))}if(N(),o.instantiateWasm)try{return o.instantiateWasm(r,e)}catch(r){return p(\"Module.instantiateWasm callback failed with error: \"+r),!1}(l||\"function\"!=typeof WebAssembly.instantiateStreaming||I(x)||\"function\"!=typeof fetch?i(n):fetch(x,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(n,(function(r){return p(\"wasm streaming compile failed: \"+r),p(\"falling back to ArrayBuffer instantiation\"),i(n)}))}))).catch(t)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.n).apply(null,arguments)};var ar,sr=o._emscripten_bind_CExpat_CExpat_0=function(){return(sr=o._emscripten_bind_CExpat_CExpat_0=o.asm.o).apply(null,arguments)},ur=o._emscripten_bind_CExpat_version_0=function(){return(ur=o._emscripten_bind_CExpat_version_0=o.asm.p).apply(null,arguments)},cr=o._emscripten_bind_CExpat_create_0=function(){return(cr=o._emscripten_bind_CExpat_create_0=o.asm.q).apply(null,arguments)},lr=o._emscripten_bind_CExpat_destroy_0=function(){return(lr=o._emscripten_bind_CExpat_destroy_0=o.asm.r).apply(null,arguments)},dr=o._emscripten_bind_CExpat_parse_1=function(){return(dr=o._emscripten_bind_CExpat_parse_1=o.asm.s).apply(null,arguments)},fr=o._emscripten_bind_CExpat_tag_0=function(){return(fr=o._emscripten_bind_CExpat_tag_0=o.asm.t).apply(null,arguments)},pr=o._emscripten_bind_CExpat_attrs_0=function(){return(pr=o._emscripten_bind_CExpat_attrs_0=o.asm.u).apply(null,arguments)},hr=o._emscripten_bind_CExpat_content_0=function(){return(hr=o._emscripten_bind_CExpat_content_0=o.asm.v).apply(null,arguments)},mr=o._emscripten_bind_CExpat_startElement_0=function(){return(mr=o._emscripten_bind_CExpat_startElement_0=o.asm.w).apply(null,arguments)},vr=o._emscripten_bind_CExpat_endElement_0=function(){return(vr=o._emscripten_bind_CExpat_endElement_0=o.asm.x).apply(null,arguments)},wr=o._emscripten_bind_CExpat_characterData_0=function(){return(wr=o._emscripten_bind_CExpat_characterData_0=o.asm.y).apply(null,arguments)},_r=o._emscripten_bind_CExpat___destroy___0=function(){return(_r=o._emscripten_bind_CExpat___destroy___0=o.asm.z).apply(null,arguments)},yr=o._emscripten_bind_VoidPtr___destroy___0=function(){return(yr=o._emscripten_bind_VoidPtr___destroy___0=o.asm.A).apply(null,arguments)},Er=o._emscripten_bind_CExpatJS_CExpatJS_0=function(){return(Er=o._emscripten_bind_CExpatJS_CExpatJS_0=o.asm.B).apply(null,arguments)},gr=o._emscripten_bind_CExpatJS_startElement_0=function(){return(gr=o._emscripten_bind_CExpatJS_startElement_0=o.asm.C).apply(null,arguments)},br=o._emscripten_bind_CExpatJS_endElement_0=function(){return(br=o._emscripten_bind_CExpatJS_endElement_0=o.asm.D).apply(null,arguments)},kr=o._emscripten_bind_CExpatJS_characterData_0=function(){return(kr=o._emscripten_bind_CExpatJS_characterData_0=o.asm.E).apply(null,arguments)},Dr=o._emscripten_bind_CExpatJS___destroy___0=function(){return(Dr=o._emscripten_bind_CExpatJS___destroy___0=o.asm.F).apply(null,arguments)};function Sr(r){function t(){ar||(ar=!0,o.calledRun=!0,h||(o.noFSInit||Y.init.initialized||Y.init(),Y.ignorePermissions=!1,G(j),e(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for(\"function\"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)r=o.postRun.shift(),z.unshift(r);var r;G(z)}()))}T>0||(function(){if(o.preRun)for(\"function\"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)r=o.preRun.shift(),C.unshift(r);var r;G(C)}(),T>0||(o.setStatus?(o.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){o.setStatus(\"\")}),1),t()}),1)):t()))}if(o._malloc=function(){return(o._malloc=o.asm.H).apply(null,arguments)},B=function r(){ar||Sr(),ar||(B=r)},o.run=Sr,o.preInit)for(\"function\"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();function Ar(){}function Pr(r){return(r||Ar).__cache__}function xr(r,e){var t=Pr(e),n=t[r];return n||((n=Object.create((e||Ar).prototype)).ptr=r,t[r]=n)}Sr(),Ar.prototype=Object.create(Ar.prototype),Ar.prototype.constructor=Ar,Ar.prototype.__class__=Ar,Ar.__cache__={},o.WrapperObject=Ar,o.getCache=Pr,o.wrapPointer=xr,o.castObject=function(r,e){return xr(r.ptr,e)},o.NULL=xr(0),o.destroy=function(r){if(!r.__destroy__)throw\"Error: Cannot destroy object. (Did you create it yourself?)\";r.__destroy__(),delete Pr(r.__class__)[r.ptr]},o.compare=function(r,e){return r.ptr===e.ptr},o.getPointer=function(r){return r.ptr},o.getClass=function(r){return r.__class__};var Fr={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(Fr.needed){for(var r=0;r<Fr.temps.length;r++)o._free(Fr.temps[r]);Fr.temps.length=0,o._free(Fr.buffer),Fr.buffer=0,Fr.size+=Fr.needed,Fr.needed=0}Fr.buffer||(Fr.size+=128,Fr.buffer=o._malloc(Fr.size),m(Fr.buffer)),Fr.pos=0},alloc:function(r,e){m(Fr.buffer);var t,n=e.BYTES_PER_ELEMENT,i=r.length*n;return i=i+7&-8,Fr.pos+i>=Fr.size?(m(i>0),Fr.needed+=i,t=o._malloc(i),Fr.temps.push(t)):(t=Fr.buffer+Fr.pos,Fr.pos+=i),t},copy:function(r,e,t){switch(t>>>=0,e.BYTES_PER_ELEMENT){case 2:t>>>=1;break;case 4:t>>>=2;break;case 8:t>>>=3}for(var n=0;n<r.length;n++)e[t+n]=r[n]}};function Mr(){this.ptr=sr(),Pr(Mr)[this.ptr]=this}function Rr(){throw\"cannot construct a VoidPtr, no constructor in IDL\"}function Cr(){this.ptr=Er(),Pr(Cr)[this.ptr]=this}return Mr.prototype=Object.create(Ar.prototype),Mr.prototype.constructor=Mr,Mr.prototype.__class__=Mr,Mr.__cache__={},o.CExpat=Mr,Mr.prototype.version=Mr.prototype.version=function(){var r=this.ptr;return D(ur(r))},Mr.prototype.create=Mr.prototype.create=function(){var r=this.ptr;return!!cr(r)},Mr.prototype.destroy=Mr.prototype.destroy=function(){var r=this.ptr;lr(r)},Mr.prototype.parse=Mr.prototype.parse=function(r){var e=this.ptr;return Fr.prepare(),r=r&&\"object\"==typeof r?r.ptr:function(r){if(\"string\"==typeof r){var e=or(r),t=Fr.alloc(e,w);return Fr.copy(e,w,t),t}return r}(r),!!dr(e,r)},Mr.prototype.tag=Mr.prototype.tag=function(){var r=this.ptr;return D(fr(r))},Mr.prototype.attrs=Mr.prototype.attrs=function(){var r=this.ptr;return D(pr(r))},Mr.prototype.content=Mr.prototype.content=function(){var r=this.ptr;return D(hr(r))},Mr.prototype.startElement=Mr.prototype.startElement=function(){var r=this.ptr;mr(r)},Mr.prototype.endElement=Mr.prototype.endElement=function(){var r=this.ptr;vr(r)},Mr.prototype.characterData=Mr.prototype.characterData=function(){var r=this.ptr;wr(r)},Mr.prototype.__destroy__=Mr.prototype.__destroy__=function(){var r=this.ptr;_r(r)},Rr.prototype=Object.create(Ar.prototype),Rr.prototype.constructor=Rr,Rr.prototype.__class__=Rr,Rr.__cache__={},o.VoidPtr=Rr,Rr.prototype.__destroy__=Rr.prototype.__destroy__=function(){var r=this.ptr;yr(r)},Cr.prototype=Object.create(Mr.prototype),Cr.prototype.constructor=Cr,Cr.prototype.__class__=Cr,Cr.__cache__={},o.CExpatJS=Cr,Cr.prototype.startElement=Cr.prototype.startElement=function(){var r=this.ptr;gr(r)},Cr.prototype.endElement=Cr.prototype.endElement=function(){var r=this.ptr;br(r)},Cr.prototype.characterData=Cr.prototype.characterData=function(){var r=this.ptr;kr(r)},Cr.prototype.__destroy__=Cr.prototype.__destroy__=function(){var r=this.ptr;Dr(r)},r.ready},t.exports=o;var a=function(){if(\"undefined\"!=typeof self)return self;if(\"undefined\"!=typeof window)return window;if(\"undefined\"!=typeof global)return global;throw new Error(\"unable to locate global object\")}().__hpcc_wasmFolder||void 0;function s(r,e,t){var n=r.default||r;return n.__hpcc_promise||(n.__hpcc_promise=n({wasmBinary:t,locateFile:function(r,t){return\"\".concat(function(r,e){for(;r.charAt(r.length-1)===e;)r=r.substring(0,r.length-1);return r}(e||function(r){if(!arguments.length)return a;var e=a;return a=r,e}()||t||\".\",\"/\"),\"/\").concat(function(r,e){for(;r.charAt(0)===e;)r=r.substring(1);return r}(r,\"/\"))}})),n.__hpcc_promise}!function(){function r(r,e){this.tag=r,this.attrs=e,this._content=\"\"}Object.defineProperty(r.prototype,\"content\",{get:function(){return this._content},enumerable:!1,configurable:!0}),r.prototype.appendContent=function(r){this._content+=r}}();var u={exports:{}};!function(r,e){var t=(()=>{var r=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0;return function(e){var t,n,o=void 0!==(e=e||{})?e:{};o.ready=new Promise((function(r,e){t=r,n=e}));var i,a,s=Object.assign({},o),u=\"./this.program\",c=(r,e)=>{throw e},l=\"\";\"undefined\"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf(\"blob:\")?l.substr(0,l.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",i=r=>{var e=new XMLHttpRequest;return e.open(\"GET\",r,!1),e.send(null),e.responseText},a=(r,e,t)=>{var n=new XMLHttpRequest;n.open(\"GET\",r,!0),n.responseType=\"arraybuffer\",n.onload=()=>{200==n.status||0==n.status&&n.response?e(n.response):t()},n.onerror=t,n.send(null)};var d=o.print||console.log.bind(console),f=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments,o.thisProgram&&(u=o.thisProgram),o.quit&&(c=o.quit);var p,h=0;o.wasmBinary&&(p=o.wasmBinary);var m,v=o.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&L(\"no native wasm support detected\");var w=!1;function _(r,e){r||L(e)}var y,E,g,b,k,D,S,A=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function P(r,e,t){for(var n=e+t,o=e;r[o]&&!(o>=n);)++o;if(o-e>16&&r.subarray&&A)return A.decode(r.subarray(e,o));for(var i=\"\";e<o;){var a=r[e++];if(128&a){var s=63&r[e++];if(192!=(224&a)){var u=63&r[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&r[e++])<65536)i+=String.fromCharCode(a);else{var c=a-65536;i+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function x(r,e){return r?P(g,r,e):\"\"}function F(r,e,t,n){if(!(n>0))return 0;for(var o=t,i=t+n-1,a=0;a<r.length;++a){var s=r.charCodeAt(a);if(s>=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&r.charCodeAt(++a);if(s<=127){if(t>=i)break;e[t++]=s}else if(s<=2047){if(t+1>=i)break;e[t++]=192|s>>6,e[t++]=128|63&s}else if(s<=65535){if(t+2>=i)break;e[t++]=224|s>>12,e[t++]=128|s>>6&63,e[t++]=128|63&s}else{if(t+3>=i)break;e[t++]=240|s>>18,e[t++]=128|s>>12&63,e[t++]=128|s>>6&63,e[t++]=128|63&s}}return e[t]=0,t-o}function M(r){for(var e=0,t=0;t<r.length;++t){var n=r.charCodeAt(t);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&r.charCodeAt(++t)),n<=127?++e:e+=n<=2047?2:n<=65535?3:4}return e}function R(r){y=r,o.HEAP8=E=new Int8Array(r),o.HEAP16=b=new Int16Array(r),o.HEAP32=k=new Int32Array(r),o.HEAPU8=g=new Uint8Array(r),o.HEAPU16=new Uint16Array(r),o.HEAPU32=new Uint32Array(r),o.HEAPF32=new Float32Array(r),o.HEAPF64=D=new Float64Array(r)}o.INITIAL_MEMORY;var C=[],j=[],z=[];var T=0,B=null;function N(r){T++,o.monitorRunDependencies&&o.monitorRunDependencies(T)}function O(r){if(T--,o.monitorRunDependencies&&o.monitorRunDependencies(T),0==T&&B){var e=B;B=null,e()}}function L(r){o.onAbort&&o.onAbort(r),f(r=\"Aborted(\"+r+\")\"),w=!0,r+=\". Build with -s ASSERTIONS=1 for more info.\";var e=new WebAssembly.RuntimeError(r);throw n(e),e}o.preloadedImages={},o.preloadedAudios={};var I,U,H,G;function q(r){return r.startsWith(\"data:application/octet-stream;base64,\")}function W(r){try{if(r==I&&p)return new Uint8Array(p);throw\"both async and sync fetching of the wasm failed\"}catch(r){L(r)}}q(I=\"graphvizlib.wasm\")||(U=I,I=o.locateFile?o.locateFile(U,l):l+U);var V,J={161520:function(r,e){var t=x(r),n=x(e);tr.createPath(\"/\",$.dirname(t)),tr.writeFile($.join(\"/\",t),n)}};function X(r){for(;r.length>0;){var e=r.shift();if(\"function\"!=typeof e){var t=e.func;\"number\"==typeof t?void 0===e.arg?Y(t)():Y(t)(e.arg):t(void 0===e.arg?null:e.arg)}else e(o)}}function Y(r){return S.get(r)}V=()=>performance.now();function K(r){return k[gr()>>2]=r,r}var $={splitPath:function(r){return/^(\\\\/?|)([\\\\s\\\\S]*?)((?:\\\\.{1,2}|[^\\\\/]+?|)(\\\\.[^.\\\\/]*|))(?:[\\\\/]*)$/.exec(r).slice(1)},normalizeArray:function(r,e){for(var t=0,n=r.length-1;n>=0;n--){var o=r[n];\".\"===o?r.splice(n,1):\"..\"===o?(r.splice(n,1),t++):t&&(r.splice(n,1),t--)}if(e)for(;t;t--)r.unshift(\"..\");return r},normalize:function(r){var e=\"/\"===r.charAt(0),t=\"/\"===r.substr(-1);return(r=$.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||e||(r=\".\"),r&&t&&(r+=\"/\"),(e?\"/\":\"\")+r},dirname:function(r){var e=$.splitPath(r),t=e[0],n=e[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):\".\"},basename:function(r){if(\"/\"===r)return\"/\";var e=(r=(r=$.normalize(r)).replace(/\\\\/$/,\"\")).lastIndexOf(\"/\");return-1===e?r:r.substr(e+1)},extname:function(r){return $.splitPath(r)[3]},join:function(){var r=Array.prototype.slice.call(arguments,0);return $.normalize(r.join(\"/\"))},join2:function(r,e){return $.normalize(r+\"/\"+e)}};var Q={resolve:function(){for(var r=\"\",e=!1,t=arguments.length-1;t>=-1&&!e;t--){var n=t>=0?arguments[t]:tr.cwd();if(\"string\"!=typeof n)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!n)return\"\";r=n+\"/\"+r,e=\"/\"===n.charAt(0)}return(e?\"/\":\"\")+(r=$.normalizeArray(r.split(\"/\").filter((function(r){return!!r})),!e).join(\"/\"))||\".\"},relative:function(r,e){function t(r){for(var e=0;e<r.length&&\"\"===r[e];e++);for(var t=r.length-1;t>=0&&\"\"===r[t];t--);return e>t?[]:r.slice(e,t-e+1)}r=Q.resolve(r).substr(1),e=Q.resolve(e).substr(1);for(var n=t(r.split(\"/\")),o=t(e.split(\"/\")),i=Math.min(n.length,o.length),a=i,s=0;s<i;s++)if(n[s]!==o[s]){a=s;break}var u=[];for(s=a;s<n.length;s++)u.push(\"..\");return(u=u.concat(o.slice(a))).join(\"/\")}},Z={ttys:[],init:function(){},shutdown:function(){},register:function(r,e){Z.ttys[r]={input:[],output:[],ops:e},tr.registerDevice(r,Z.stream_ops)},stream_ops:{open:function(r){var e=Z.ttys[r.node.rdev];if(!e)throw new tr.ErrnoError(43);r.tty=e,r.seekable=!1},close:function(r){r.tty.ops.flush(r.tty)},flush:function(r){r.tty.ops.flush(r.tty)},read:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.get_char)throw new tr.ErrnoError(60);for(var i=0,a=0;a<n;a++){var s;try{s=r.tty.ops.get_char(r.tty)}catch(r){throw new tr.ErrnoError(29)}if(void 0===s&&0===i)throw new tr.ErrnoError(6);if(null==s)break;i++,e[t+a]=s}return i&&(r.node.timestamp=Date.now()),i},write:function(r,e,t,n,o){if(!r.tty||!r.tty.ops.put_char)throw new tr.ErrnoError(60);try{for(var i=0;i<n;i++)r.tty.ops.put_char(r.tty,e[t+i])}catch(r){throw new tr.ErrnoError(29)}return n&&(r.node.timestamp=Date.now()),i}},default_tty_ops:{get_char:function(r){if(!r.input.length){var e=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt?null!==(e=window.prompt(\"Input: \"))&&(e+=\"\\\\n\"):\"function\"==typeof readline&&null!==(e=readline())&&(e+=\"\\\\n\"),!e)return null;r.input=dr(e,!0)}return r.input.shift()},put_char:function(r,e){null===e||10===e?(d(P(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(d(P(r.output,0)),r.output=[])}},default_tty1_ops:{put_char:function(r,e){null===e||10===e?(f(P(r.output,0)),r.output=[]):0!=e&&r.output.push(e)},flush:function(r){r.output&&r.output.length>0&&(f(P(r.output,0)),r.output=[])}}};function rr(r){r=function(r,e){return Math.ceil(r/e)*e}(r,65536);var e=br(65536,r);return e?(function(r,e){g.fill(0,r,r+e)}(e,r),e):0}var er={ops_table:null,mount:function(r){return er.createNode(null,\"/\",16895,0)},createNode:function(r,e,t,n){if(tr.isBlkdev(t)||tr.isFIFO(t))throw new tr.ErrnoError(63);er.ops_table||(er.ops_table={dir:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr,lookup:er.node_ops.lookup,mknod:er.node_ops.mknod,rename:er.node_ops.rename,unlink:er.node_ops.unlink,rmdir:er.node_ops.rmdir,readdir:er.node_ops.readdir,symlink:er.node_ops.symlink},stream:{llseek:er.stream_ops.llseek}},file:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr},stream:{llseek:er.stream_ops.llseek,read:er.stream_ops.read,write:er.stream_ops.write,allocate:er.stream_ops.allocate,mmap:er.stream_ops.mmap,msync:er.stream_ops.msync}},link:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr,readlink:er.node_ops.readlink},stream:{}},chrdev:{node:{getattr:er.node_ops.getattr,setattr:er.node_ops.setattr},stream:tr.chrdev_stream_ops}});var o=tr.createNode(r,e,t,n);return tr.isDir(o.mode)?(o.node_ops=er.ops_table.dir.node,o.stream_ops=er.ops_table.dir.stream,o.contents={}):tr.isFile(o.mode)?(o.node_ops=er.ops_table.file.node,o.stream_ops=er.ops_table.file.stream,o.usedBytes=0,o.contents=null):tr.isLink(o.mode)?(o.node_ops=er.ops_table.link.node,o.stream_ops=er.ops_table.link.stream):tr.isChrdev(o.mode)&&(o.node_ops=er.ops_table.chrdev.node,o.stream_ops=er.ops_table.chrdev.stream),o.timestamp=Date.now(),r&&(r.contents[e]=o,r.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(r){return r.contents?r.contents.subarray?r.contents.subarray(0,r.usedBytes):new Uint8Array(r.contents):new Uint8Array(0)},expandFileStorage:function(r,e){var t=r.contents?r.contents.length:0;if(!(t>=e)){e=Math.max(e,t*(t<1048576?2:1.125)>>>0),0!=t&&(e=Math.max(e,256));var n=r.contents;r.contents=new Uint8Array(e),r.usedBytes>0&&r.contents.set(n.subarray(0,r.usedBytes),0)}},resizeFileStorage:function(r,e){if(r.usedBytes!=e)if(0==e)r.contents=null,r.usedBytes=0;else{var t=r.contents;r.contents=new Uint8Array(e),t&&r.contents.set(t.subarray(0,Math.min(e,r.usedBytes))),r.usedBytes=e}},node_ops:{getattr:function(r){var e={};return e.dev=tr.isChrdev(r.mode)?r.id:1,e.ino=r.id,e.mode=r.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=r.rdev,tr.isDir(r.mode)?e.size=4096:tr.isFile(r.mode)?e.size=r.usedBytes:tr.isLink(r.mode)?e.size=r.link.length:e.size=0,e.atime=new Date(r.timestamp),e.mtime=new Date(r.timestamp),e.ctime=new Date(r.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(r,e){void 0!==e.mode&&(r.mode=e.mode),void 0!==e.timestamp&&(r.timestamp=e.timestamp),void 0!==e.size&&er.resizeFileStorage(r,e.size)},lookup:function(r,e){throw tr.genericErrors[44]},mknod:function(r,e,t,n){return er.createNode(r,e,t,n)},rename:function(r,e,t){if(tr.isDir(r.mode)){var n;try{n=tr.lookupNode(e,t)}catch(r){}if(n)for(var o in n.contents)throw new tr.ErrnoError(55)}delete r.parent.contents[r.name],r.parent.timestamp=Date.now(),r.name=t,e.contents[t]=r,e.timestamp=r.parent.timestamp,r.parent=e},unlink:function(r,e){delete r.contents[e],r.timestamp=Date.now()},rmdir:function(r,e){var t=tr.lookupNode(r,e);for(var n in t.contents)throw new tr.ErrnoError(55);delete r.contents[e],r.timestamp=Date.now()},readdir:function(r){var e=[\".\",\"..\"];for(var t in r.contents)r.contents.hasOwnProperty(t)&&e.push(t);return e},symlink:function(r,e,t){var n=er.createNode(r,e,41471,0);return n.link=t,n},readlink:function(r){if(!tr.isLink(r.mode))throw new tr.ErrnoError(28);return r.link}},stream_ops:{read:function(r,e,t,n,o){var i=r.node.contents;if(o>=r.node.usedBytes)return 0;var a=Math.min(r.node.usedBytes-o,n);if(a>8&&i.subarray)e.set(i.subarray(o,o+a),t);else for(var s=0;s<a;s++)e[t+s]=i[o+s];return a},write:function(r,e,t,n,o,i){if(e.buffer===E.buffer&&(i=!1),!n)return 0;var a=r.node;if(a.timestamp=Date.now(),e.subarray&&(!a.contents||a.contents.subarray)){if(i)return a.contents=e.subarray(t,t+n),a.usedBytes=n,n;if(0===a.usedBytes&&0===o)return a.contents=e.slice(t,t+n),a.usedBytes=n,n;if(o+n<=a.usedBytes)return a.contents.set(e.subarray(t,t+n),o),n}if(er.expandFileStorage(a,o+n),a.contents.subarray&&e.subarray)a.contents.set(e.subarray(t,t+n),o);else for(var s=0;s<n;s++)a.contents[o+s]=e[t+s];return a.usedBytes=Math.max(a.usedBytes,o+n),n},llseek:function(r,e,t){var n=e;if(1===t?n+=r.position:2===t&&tr.isFile(r.node.mode)&&(n+=r.node.usedBytes),n<0)throw new tr.ErrnoError(28);return n},allocate:function(r,e,t){er.expandFileStorage(r.node,e+t),r.node.usedBytes=Math.max(r.node.usedBytes,e+t)},mmap:function(r,e,t,n,o,i){if(0!==e)throw new tr.ErrnoError(28);if(!tr.isFile(r.node.mode))throw new tr.ErrnoError(43);var a,s,u=r.node.contents;if(2&i||u.buffer!==y){if((n>0||n+t<u.length)&&(u=u.subarray?u.subarray(n,n+t):Array.prototype.slice.call(u,n,n+t)),s=!0,!(a=rr(t)))throw new tr.ErrnoError(48);E.set(u,a)}else s=!1,a=u.byteOffset;return{ptr:a,allocated:s}},msync:function(r,e,t,n,o){if(!tr.isFile(r.node.mode))throw new tr.ErrnoError(43);return 2&o||er.stream_ops.write(r,e,0,n,t,!1),0}}};var tr={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(r,e={})=>{if(!(r=Q.resolve(tr.cwd(),r)))return{path:\"\",node:null};var t={follow_mount:!0,recurse_count:0};for(var n in t)void 0===e[n]&&(e[n]=t[n]);if(e.recurse_count>8)throw new tr.ErrnoError(32);for(var o=$.normalizeArray(r.split(\"/\").filter((r=>!!r)),!1),i=tr.root,a=\"/\",s=0;s<o.length;s++){var u=s===o.length-1;if(u&&e.parent)break;if(i=tr.lookupNode(i,o[s]),a=$.join2(a,o[s]),tr.isMountpoint(i)&&(!u||u&&e.follow_mount)&&(i=i.mounted.root),!u||e.follow)for(var c=0;tr.isLink(i.mode);){var l=tr.readlink(a);if(a=Q.resolve($.dirname(a),l),i=tr.lookupPath(a,{recurse_count:e.recurse_count}).node,c++>40)throw new tr.ErrnoError(32)}}return{path:a,node:i}},getPath:r=>{for(var e;;){if(tr.isRoot(r)){var t=r.mount.mountpoint;return e?\"/\"!==t[t.length-1]?t+\"/\"+e:t+e:t}e=e?r.name+\"/\"+e:r.name,r=r.parent}},hashName:(r,e)=>{for(var t=0,n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(r+t>>>0)%tr.nameTable.length},hashAddNode:r=>{var e=tr.hashName(r.parent.id,r.name);r.name_next=tr.nameTable[e],tr.nameTable[e]=r},hashRemoveNode:r=>{var e=tr.hashName(r.parent.id,r.name);if(tr.nameTable[e]===r)tr.nameTable[e]=r.name_next;else for(var t=tr.nameTable[e];t;){if(t.name_next===r){t.name_next=r.name_next;break}t=t.name_next}},lookupNode:(r,e)=>{var t=tr.mayLookup(r);if(t)throw new tr.ErrnoError(t,r);for(var n=tr.hashName(r.id,e),o=tr.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===r.id&&i===e)return o}return tr.lookup(r,e)},createNode:(r,e,t,n)=>{var o=new tr.FSNode(r,e,t,n);return tr.hashAddNode(o),o},destroyNode:r=>{tr.hashRemoveNode(r)},isRoot:r=>r===r.parent,isMountpoint:r=>!!r.mounted,isFile:r=>32768==(61440&r),isDir:r=>16384==(61440&r),isLink:r=>40960==(61440&r),isChrdev:r=>8192==(61440&r),isBlkdev:r=>24576==(61440&r),isFIFO:r=>4096==(61440&r),isSocket:r=>49152==(49152&r),flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:r=>{var e=tr.flagModes[r];if(void 0===e)throw new Error(\"Unknown file open mode: \"+r);return e},flagsToPermissionString:r=>{var e=[\"r\",\"w\",\"rw\"][3&r];return 512&r&&(e+=\"w\"),e},nodePermissions:(r,e)=>tr.ignorePermissions||(!e.includes(\"r\")||292&r.mode)&&(!e.includes(\"w\")||146&r.mode)&&(!e.includes(\"x\")||73&r.mode)?0:2,mayLookup:r=>{var e=tr.nodePermissions(r,\"x\");return e||(r.node_ops.lookup?0:2)},mayCreate:(r,e)=>{try{tr.lookupNode(r,e);return 20}catch(r){}return tr.nodePermissions(r,\"wx\")},mayDelete:(r,e,t)=>{var n;try{n=tr.lookupNode(r,e)}catch(r){return r.errno}var o=tr.nodePermissions(r,\"wx\");if(o)return o;if(t){if(!tr.isDir(n.mode))return 54;if(tr.isRoot(n)||tr.getPath(n)===tr.cwd())return 10}else if(tr.isDir(n.mode))return 31;return 0},mayOpen:(r,e)=>r?tr.isLink(r.mode)?32:tr.isDir(r.mode)&&(\"r\"!==tr.flagsToPermissionString(e)||512&e)?31:tr.nodePermissions(r,tr.flagsToPermissionString(e)):44,MAX_OPEN_FDS:4096,nextfd:(r=0,e=tr.MAX_OPEN_FDS)=>{for(var t=r;t<=e;t++)if(!tr.streams[t])return t;throw new tr.ErrnoError(33)},getStream:r=>tr.streams[r],createStream:(r,e,t)=>{tr.FSStream||(tr.FSStream=function(){},tr.FSStream.prototype={object:{get:function(){return this.node},set:function(r){this.node=r}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}),r=Object.assign(new tr.FSStream,r);var n=tr.nextfd(e,t);return r.fd=n,tr.streams[n]=r,r},closeStream:r=>{tr.streams[r]=null},chrdev_stream_ops:{open:r=>{var e=tr.getDevice(r.node.rdev);r.stream_ops=e.stream_ops,r.stream_ops.open&&r.stream_ops.open(r)},llseek:()=>{throw new tr.ErrnoError(70)}},major:r=>r>>8,minor:r=>255&r,makedev:(r,e)=>r<<8|e,registerDevice:(r,e)=>{tr.devices[r]={stream_ops:e}},getDevice:r=>tr.devices[r],getMounts:r=>{for(var e=[],t=[r];t.length;){var n=t.pop();e.push(n),t.push.apply(t,n.mounts)}return e},syncfs:(r,e)=>{\"function\"==typeof r&&(e=r,r=!1),tr.syncFSRequests++,tr.syncFSRequests>1&&f(\"warning: \"+tr.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var t=tr.getMounts(tr.root.mount),n=0;function o(r){return tr.syncFSRequests--,e(r)}function i(r){if(r)return i.errored?void 0:(i.errored=!0,o(r));++n>=t.length&&o(null)}t.forEach((e=>{if(!e.type.syncfs)return i(null);e.type.syncfs(e,r,i)}))},mount:(r,e,t)=>{var n,o=\"/\"===t,i=!t;if(o&&tr.root)throw new tr.ErrnoError(10);if(!o&&!i){var a=tr.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,tr.isMountpoint(n))throw new tr.ErrnoError(10);if(!tr.isDir(n.mode))throw new tr.ErrnoError(54)}var s={type:r,opts:e,mountpoint:t,mounts:[]},u=r.mount(s);return u.mount=s,s.root=u,o?tr.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:r=>{var e=tr.lookupPath(r,{follow_mount:!1});if(!tr.isMountpoint(e.node))throw new tr.ErrnoError(28);var t=e.node,n=t.mounted,o=tr.getMounts(n);Object.keys(tr.nameTable).forEach((r=>{for(var e=tr.nameTable[r];e;){var t=e.name_next;o.includes(e.mount)&&tr.destroyNode(e),e=t}})),t.mounted=null;var i=t.mount.mounts.indexOf(n);t.mount.mounts.splice(i,1)},lookup:(r,e)=>r.node_ops.lookup(r,e),mknod:(r,e,t)=>{var n=tr.lookupPath(r,{parent:!0}).node,o=$.basename(r);if(!o||\".\"===o||\"..\"===o)throw new tr.ErrnoError(28);var i=tr.mayCreate(n,o);if(i)throw new tr.ErrnoError(i);if(!n.node_ops.mknod)throw new tr.ErrnoError(63);return n.node_ops.mknod(n,o,e,t)},create:(r,e)=>(e=void 0!==e?e:438,e&=4095,e|=32768,tr.mknod(r,e,0)),mkdir:(r,e)=>(e=void 0!==e?e:511,e&=1023,e|=16384,tr.mknod(r,e,0)),mkdirTree:(r,e)=>{for(var t=r.split(\"/\"),n=\"\",o=0;o<t.length;++o)if(t[o]){n+=\"/\"+t[o];try{tr.mkdir(n,e)}catch(r){if(20!=r.errno)throw r}}},mkdev:(r,e,t)=>(void 0===t&&(t=e,e=438),e|=8192,tr.mknod(r,e,t)),symlink:(r,e)=>{if(!Q.resolve(r))throw new tr.ErrnoError(44);var t=tr.lookupPath(e,{parent:!0}).node;if(!t)throw new tr.ErrnoError(44);var n=$.basename(e),o=tr.mayCreate(t,n);if(o)throw new tr.ErrnoError(o);if(!t.node_ops.symlink)throw new tr.ErrnoError(63);return t.node_ops.symlink(t,n,r)},rename:(r,e)=>{var t,n,o=$.dirname(r),i=$.dirname(e),a=$.basename(r),s=$.basename(e);if(t=tr.lookupPath(r,{parent:!0}).node,n=tr.lookupPath(e,{parent:!0}).node,!t||!n)throw new tr.ErrnoError(44);if(t.mount!==n.mount)throw new tr.ErrnoError(75);var u,c=tr.lookupNode(t,a),l=Q.relative(r,i);if(\".\"!==l.charAt(0))throw new tr.ErrnoError(28);if(\".\"!==(l=Q.relative(e,o)).charAt(0))throw new tr.ErrnoError(55);try{u=tr.lookupNode(n,s)}catch(r){}if(c!==u){var d=tr.isDir(c.mode),f=tr.mayDelete(t,a,d);if(f)throw new tr.ErrnoError(f);if(f=u?tr.mayDelete(n,s,d):tr.mayCreate(n,s))throw new tr.ErrnoError(f);if(!t.node_ops.rename)throw new tr.ErrnoError(63);if(tr.isMountpoint(c)||u&&tr.isMountpoint(u))throw new tr.ErrnoError(10);if(n!==t&&(f=tr.nodePermissions(t,\"w\")))throw new tr.ErrnoError(f);tr.hashRemoveNode(c);try{t.node_ops.rename(c,n,s)}catch(r){throw r}finally{tr.hashAddNode(c)}}},rmdir:r=>{var e=tr.lookupPath(r,{parent:!0}).node,t=$.basename(r),n=tr.lookupNode(e,t),o=tr.mayDelete(e,t,!0);if(o)throw new tr.ErrnoError(o);if(!e.node_ops.rmdir)throw new tr.ErrnoError(63);if(tr.isMountpoint(n))throw new tr.ErrnoError(10);e.node_ops.rmdir(e,t),tr.destroyNode(n)},readdir:r=>{var e=tr.lookupPath(r,{follow:!0}).node;if(!e.node_ops.readdir)throw new tr.ErrnoError(54);return e.node_ops.readdir(e)},unlink:r=>{var e=tr.lookupPath(r,{parent:!0}).node;if(!e)throw new tr.ErrnoError(44);var t=$.basename(r),n=tr.lookupNode(e,t),o=tr.mayDelete(e,t,!1);if(o)throw new tr.ErrnoError(o);if(!e.node_ops.unlink)throw new tr.ErrnoError(63);if(tr.isMountpoint(n))throw new tr.ErrnoError(10);e.node_ops.unlink(e,t),tr.destroyNode(n)},readlink:r=>{var e=tr.lookupPath(r).node;if(!e)throw new tr.ErrnoError(44);if(!e.node_ops.readlink)throw new tr.ErrnoError(28);return Q.resolve(tr.getPath(e.parent),e.node_ops.readlink(e))},stat:(r,e)=>{var t=tr.lookupPath(r,{follow:!e}).node;if(!t)throw new tr.ErrnoError(44);if(!t.node_ops.getattr)throw new tr.ErrnoError(63);return t.node_ops.getattr(t)},lstat:r=>tr.stat(r,!0),chmod:(r,e,t)=>{var n;\"string\"==typeof r?n=tr.lookupPath(r,{follow:!t}).node:n=r;if(!n.node_ops.setattr)throw new tr.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&e|-4096&n.mode,timestamp:Date.now()})},lchmod:(r,e)=>{tr.chmod(r,e,!0)},fchmod:(r,e)=>{var t=tr.getStream(r);if(!t)throw new tr.ErrnoError(8);tr.chmod(t.node,e)},chown:(r,e,t,n)=>{var o;\"string\"==typeof r?o=tr.lookupPath(r,{follow:!n}).node:o=r;if(!o.node_ops.setattr)throw new tr.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(r,e,t)=>{tr.chown(r,e,t,!0)},fchown:(r,e,t)=>{var n=tr.getStream(r);if(!n)throw new tr.ErrnoError(8);tr.chown(n.node,e,t)},truncate:(r,e)=>{if(e<0)throw new tr.ErrnoError(28);var t;\"string\"==typeof r?t=tr.lookupPath(r,{follow:!0}).node:t=r;if(!t.node_ops.setattr)throw new tr.ErrnoError(63);if(tr.isDir(t.mode))throw new tr.ErrnoError(31);if(!tr.isFile(t.mode))throw new tr.ErrnoError(28);var n=tr.nodePermissions(t,\"w\");if(n)throw new tr.ErrnoError(n);t.node_ops.setattr(t,{size:e,timestamp:Date.now()})},ftruncate:(r,e)=>{var t=tr.getStream(r);if(!t)throw new tr.ErrnoError(8);if(0==(2097155&t.flags))throw new tr.ErrnoError(28);tr.truncate(t.node,e)},utime:(r,e,t)=>{var n=tr.lookupPath(r,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(e,t)})},open:(r,e,t,n,i)=>{if(\"\"===r)throw new tr.ErrnoError(44);var a;if(t=void 0===t?438:t,t=64&(e=\"string\"==typeof e?tr.modeStringToFlags(e):e)?4095&t|32768:0,\"object\"==typeof r)a=r;else{r=$.normalize(r);try{a=tr.lookupPath(r,{follow:!(131072&e)}).node}catch(r){}}var s=!1;if(64&e)if(a){if(128&e)throw new tr.ErrnoError(20)}else a=tr.mknod(r,t,0),s=!0;if(!a)throw new tr.ErrnoError(44);if(tr.isChrdev(a.mode)&&(e&=-513),65536&e&&!tr.isDir(a.mode))throw new tr.ErrnoError(54);if(!s){var u=tr.mayOpen(a,e);if(u)throw new tr.ErrnoError(u)}512&e&&tr.truncate(a,0),e&=-131713;var c=tr.createStream({node:a,path:tr.getPath(a),flags:e,seekable:!0,position:0,stream_ops:a.stream_ops,ungotten:[],error:!1},n,i);return c.stream_ops.open&&c.stream_ops.open(c),!o.logReadFiles||1&e||(tr.readFiles||(tr.readFiles={}),r in tr.readFiles||(tr.readFiles[r]=1)),c},close:r=>{if(tr.isClosed(r))throw new tr.ErrnoError(8);r.getdents&&(r.getdents=null);try{r.stream_ops.close&&r.stream_ops.close(r)}catch(r){throw r}finally{tr.closeStream(r.fd)}r.fd=null},isClosed:r=>null===r.fd,llseek:(r,e,t)=>{if(tr.isClosed(r))throw new tr.ErrnoError(8);if(!r.seekable||!r.stream_ops.llseek)throw new tr.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new tr.ErrnoError(28);return r.position=r.stream_ops.llseek(r,e,t),r.ungotten=[],r.position},read:(r,e,t,n,o)=>{if(n<0||o<0)throw new tr.ErrnoError(28);if(tr.isClosed(r))throw new tr.ErrnoError(8);if(1==(2097155&r.flags))throw new tr.ErrnoError(8);if(tr.isDir(r.node.mode))throw new tr.ErrnoError(31);if(!r.stream_ops.read)throw new tr.ErrnoError(28);var i=void 0!==o;if(i){if(!r.seekable)throw new tr.ErrnoError(70)}else o=r.position;var a=r.stream_ops.read(r,e,t,n,o);return i||(r.position+=a),a},write:(r,e,t,n,o,i)=>{if(n<0||o<0)throw new tr.ErrnoError(28);if(tr.isClosed(r))throw new tr.ErrnoError(8);if(0==(2097155&r.flags))throw new tr.ErrnoError(8);if(tr.isDir(r.node.mode))throw new tr.ErrnoError(31);if(!r.stream_ops.write)throw new tr.ErrnoError(28);r.seekable&&1024&r.flags&&tr.llseek(r,0,2);var a=void 0!==o;if(a){if(!r.seekable)throw new tr.ErrnoError(70)}else o=r.position;var s=r.stream_ops.write(r,e,t,n,o,i);return a||(r.position+=s),s},allocate:(r,e,t)=>{if(tr.isClosed(r))throw new tr.ErrnoError(8);if(e<0||t<=0)throw new tr.ErrnoError(28);if(0==(2097155&r.flags))throw new tr.ErrnoError(8);if(!tr.isFile(r.node.mode)&&!tr.isDir(r.node.mode))throw new tr.ErrnoError(43);if(!r.stream_ops.allocate)throw new tr.ErrnoError(138);r.stream_ops.allocate(r,e,t)},mmap:(r,e,t,n,o,i)=>{if(0!=(2&o)&&0==(2&i)&&2!=(2097155&r.flags))throw new tr.ErrnoError(2);if(1==(2097155&r.flags))throw new tr.ErrnoError(2);if(!r.stream_ops.mmap)throw new tr.ErrnoError(43);return r.stream_ops.mmap(r,e,t,n,o,i)},msync:(r,e,t,n,o)=>r&&r.stream_ops.msync?r.stream_ops.msync(r,e,t,n,o):0,munmap:r=>0,ioctl:(r,e,t)=>{if(!r.stream_ops.ioctl)throw new tr.ErrnoError(59);return r.stream_ops.ioctl(r,e,t)},readFile:(r,e={})=>{if(e.flags=e.flags||0,e.encoding=e.encoding||\"binary\",\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw new Error('Invalid encoding type \"'+e.encoding+'\"');var t,n=tr.open(r,e.flags),o=tr.stat(r).size,i=new Uint8Array(o);return tr.read(n,i,0,o,0),\"utf8\"===e.encoding?t=P(i,0):\"binary\"===e.encoding&&(t=i),tr.close(n),t},writeFile:(r,e,t={})=>{t.flags=t.flags||577;var n=tr.open(r,t.flags,t.mode);if(\"string\"==typeof e){var o=new Uint8Array(M(e)+1),i=F(e,o,0,o.length);tr.write(n,o,0,i,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(e))throw new Error(\"Unsupported data type\");tr.write(n,e,0,e.byteLength,void 0,t.canOwn)}tr.close(n)},cwd:()=>tr.currentPath,chdir:r=>{var e=tr.lookupPath(r,{follow:!0});if(null===e.node)throw new tr.ErrnoError(44);if(!tr.isDir(e.node.mode))throw new tr.ErrnoError(54);var t=tr.nodePermissions(e.node,\"x\");if(t)throw new tr.ErrnoError(t);tr.currentPath=e.path},createDefaultDirectories:()=>{tr.mkdir(\"/tmp\"),tr.mkdir(\"/home\"),tr.mkdir(\"/home/web_user\")},createDefaultDevices:()=>{tr.mkdir(\"/dev\"),tr.registerDevice(tr.makedev(1,3),{read:()=>0,write:(r,e,t,n,o)=>n}),tr.mkdev(\"/dev/null\",tr.makedev(1,3)),Z.register(tr.makedev(5,0),Z.default_tty_ops),Z.register(tr.makedev(6,0),Z.default_tty1_ops),tr.mkdev(\"/dev/tty\",tr.makedev(5,0)),tr.mkdev(\"/dev/tty1\",tr.makedev(6,0));var r=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var r=new Uint8Array(1);return function(){return crypto.getRandomValues(r),r[0]}}return function(){L(\"randomDevice\")}}();tr.createDevice(\"/dev\",\"random\",r),tr.createDevice(\"/dev\",\"urandom\",r),tr.mkdir(\"/dev/shm\"),tr.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:()=>{tr.mkdir(\"/proc\");var r=tr.mkdir(\"/proc/self\");tr.mkdir(\"/proc/self/fd\"),tr.mount({mount:()=>{var e=tr.createNode(r,\"fd\",16895,73);return e.node_ops={lookup:(r,e)=>{var t=+e,n=tr.getStream(t);if(!n)throw new tr.ErrnoError(8);var o={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},e}},{},\"/proc/self/fd\")},createStandardStreams:()=>{o.stdin?tr.createDevice(\"/dev\",\"stdin\",o.stdin):tr.symlink(\"/dev/tty\",\"/dev/stdin\"),o.stdout?tr.createDevice(\"/dev\",\"stdout\",null,o.stdout):tr.symlink(\"/dev/tty\",\"/dev/stdout\"),o.stderr?tr.createDevice(\"/dev\",\"stderr\",null,o.stderr):tr.symlink(\"/dev/tty1\",\"/dev/stderr\"),tr.open(\"/dev/stdin\",0),tr.open(\"/dev/stdout\",1),tr.open(\"/dev/stderr\",1)},ensureErrnoError:()=>{tr.ErrnoError||(tr.ErrnoError=function(r,e){this.node=e,this.setErrno=function(r){this.errno=r},this.setErrno(r),this.message=\"FS error\"},tr.ErrnoError.prototype=new Error,tr.ErrnoError.prototype.constructor=tr.ErrnoError,[44].forEach((r=>{tr.genericErrors[r]=new tr.ErrnoError(r),tr.genericErrors[r].stack=\"<generic error, no stack>\"})))},staticInit:()=>{tr.ensureErrnoError(),tr.nameTable=new Array(4096),tr.mount(er,{},\"/\"),tr.createDefaultDirectories(),tr.createDefaultDevices(),tr.createSpecialDirectories(),tr.filesystems={MEMFS:er}},init:(r,e,t)=>{tr.init.initialized=!0,tr.ensureErrnoError(),o.stdin=r||o.stdin,o.stdout=e||o.stdout,o.stderr=t||o.stderr,tr.createStandardStreams()},quit:()=>{tr.init.initialized=!1;for(var r=0;r<tr.streams.length;r++){var e=tr.streams[r];e&&tr.close(e)}},getMode:(r,e)=>{var t=0;return r&&(t|=365),e&&(t|=146),t},findObject:(r,e)=>{var t=tr.analyzePath(r,e);return t.exists?t.object:null},analyzePath:(r,e)=>{try{r=(n=tr.lookupPath(r,{follow:!e})).path}catch(r){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=tr.lookupPath(r,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=$.basename(r),n=tr.lookupPath(r,{follow:!e}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot=\"/\"===n.path}catch(r){t.error=r.errno}return t},createPath:(r,e,t,n)=>{r=\"string\"==typeof r?r:tr.getPath(r);for(var o=e.split(\"/\").reverse();o.length;){var i=o.pop();if(i){var a=$.join2(r,i);try{tr.mkdir(a)}catch(r){}r=a}}return a},createFile:(r,e,t,n,o)=>{var i=$.join2(\"string\"==typeof r?r:tr.getPath(r),e),a=tr.getMode(n,o);return tr.create(i,a)},createDataFile:(r,e,t,n,o,i)=>{var a=e;r&&(r=\"string\"==typeof r?r:tr.getPath(r),a=e?$.join2(r,e):r);var s=tr.getMode(n,o),u=tr.create(a,s);if(t){if(\"string\"==typeof t){for(var c=new Array(t.length),l=0,d=t.length;l<d;++l)c[l]=t.charCodeAt(l);t=c}tr.chmod(u,146|s);var f=tr.open(u,577);tr.write(f,t,0,t.length,0,i),tr.close(f),tr.chmod(u,s)}return u},createDevice:(r,e,t,n)=>{var o=$.join2(\"string\"==typeof r?r:tr.getPath(r),e),i=tr.getMode(!!t,!!n);tr.createDevice.major||(tr.createDevice.major=64);var a=tr.makedev(tr.createDevice.major++,0);return tr.registerDevice(a,{open:r=>{r.seekable=!1},close:r=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(r,e,n,o,i)=>{for(var a=0,s=0;s<o;s++){var u;try{u=t()}catch(r){throw new tr.ErrnoError(29)}if(void 0===u&&0===a)throw new tr.ErrnoError(6);if(null==u)break;a++,e[n+s]=u}return a&&(r.node.timestamp=Date.now()),a},write:(r,e,t,o,i)=>{for(var a=0;a<o;a++)try{n(e[t+a])}catch(r){throw new tr.ErrnoError(29)}return o&&(r.node.timestamp=Date.now()),a}}),tr.mkdev(o,i,a)},forceLoadFile:r=>{if(r.isDevice||r.isFolder||r.link||r.contents)return!0;if(\"undefined\"!=typeof XMLHttpRequest)throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(!i)throw new Error(\"Cannot load without read() or XMLHttpRequest.\");try{r.contents=dr(i(r.url),!0),r.usedBytes=r.contents.length}catch(r){throw new tr.ErrnoError(29)}},createLazyFile:(r,e,t,n,o)=>{function i(){this.lengthKnown=!1,this.chunks=[]}if(i.prototype.get=function(r){if(!(r>this.length-1||r<0)){var e=r%this.chunkSize,t=r/this.chunkSize|0;return this.getter(t)[e]}},i.prototype.setDataGetter=function(r){this.getter=r},i.prototype.cacheLength=function(){var r=new XMLHttpRequest;if(r.open(\"HEAD\",t,!1),r.send(null),!(r.status>=200&&r.status<300||304===r.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+r.status);var e,n=Number(r.getResponseHeader(\"Content-length\")),o=(e=r.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===e,i=(e=r.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===e,a=1048576;o||(a=n);var s=this;s.setDataGetter((r=>{var e=r*a,o=(r+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[r]&&(s.chunks[r]=((r,e)=>{if(r>e)throw new Error(\"invalid range (\"+r+\", \"+e+\") or no bytes requested!\");if(e>n-1)throw new Error(\"only \"+n+\" bytes available! programmer error!\");var o=new XMLHttpRequest;if(o.open(\"GET\",t,!1),n!==a&&o.setRequestHeader(\"Range\",\"bytes=\"+r+\"-\"+e),o.responseType=\"arraybuffer\",o.overrideMimeType&&o.overrideMimeType(\"text/plain; charset=x-user-defined\"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error(\"Couldn't load \"+t+\". Status: \"+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):dr(o.responseText||\"\",!0)})(e,o)),void 0===s.chunks[r])throw new Error(\"doXHR failed!\");return s.chunks[r]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,d(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},\"undefined\"!=typeof XMLHttpRequest)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var a={isDevice:!1,url:t},s=tr.createFile(r,e,a,n,o);a.contents?s.contents=a.contents:a.url&&(s.contents=null,s.url=a.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var u={};return Object.keys(s.stream_ops).forEach((r=>{var e=s.stream_ops[r];u[r]=function(){return tr.forceLoadFile(s),e.apply(null,arguments)}})),u.read=(r,e,t,n,o)=>{tr.forceLoadFile(s);var i=r.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var u=0;u<a;u++)e[t+u]=i[o+u];else for(u=0;u<a;u++)e[t+u]=i.get(o+u);return a},s.stream_ops=u,s},createPreloadedFile:(r,e,t,n,o,i,s,u,c,l)=>{var d=e?Q.resolve($.join2(r,e)):r;function f(t){function a(t){l&&l(),u||tr.createDataFile(r,e,t,n,o,c),i&&i(),O()}Browser.handledByPreloadPlugin(t,d,a,(()=>{s&&s(),O()}))||a(t)}N(),\"string\"==typeof t?function(r,e,t,n){var o=n?\"\":\"al \"+r;a(r,(function(t){_(t,'Loading data file \"'+r+'\" failed (no arrayBuffer).'),e(new Uint8Array(t)),o&&O()}),(function(e){if(!t)throw'Loading data file \"'+r+'\" failed.';t()})),o&&N()}(t,(r=>f(r)),s):f(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>\"EM_FS_\"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=tr.indexedDB();try{var o=n.open(tr.DB_NAME(),tr.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=()=>{d(\"creating db\"),o.result.createObjectStore(tr.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([tr.DB_STORE_NAME],\"readwrite\"),i=n.objectStore(tr.DB_STORE_NAME),a=0,s=0,u=r.length;function c(){0==s?e():t()}r.forEach((r=>{var e=i.put(tr.analyzePath(r).object.contents,r);e.onsuccess=()=>{++a+s==u&&c()},e.onerror=()=>{s++,a+s==u&&c()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(r,e,t)=>{e=e||(()=>{}),t=t||(()=>{});var n=tr.indexedDB();try{var o=n.open(tr.DB_NAME(),tr.DB_VERSION)}catch(r){return t(r)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var i=n.transaction([tr.DB_STORE_NAME],\"readonly\")}catch(r){return void t(r)}var a=i.objectStore(tr.DB_STORE_NAME),s=0,u=0,c=r.length;function l(){0==u?e():t()}r.forEach((r=>{var e=a.get(r);e.onsuccess=()=>{tr.analyzePath(r).exists&&tr.unlink(r),tr.createDataFile($.dirname(r),$.basename(r),e.result,!0,!0,!0),++s+u==c&&l()},e.onerror=()=>{u++,s+u==c&&l()}})),i.onerror=t},o.onerror=t}},nr={DEFAULT_POLLMASK:5,calculateAt:function(r,e,t){if(\"/\"===e[0])return e;var n;if(-100===r)n=tr.cwd();else{var o=tr.getStream(r);if(!o)throw new tr.ErrnoError(8);n=o.path}if(0==e.length){if(!t)throw new tr.ErrnoError(44);return n}return $.join2(n,e)},doStat:function(r,e,t){try{var n=r(e)}catch(r){if(r&&r.node&&$.normalize(e)!==$.normalize(tr.getPath(r.node)))return-54;throw r}return k[t>>2]=n.dev,k[t+4>>2]=0,k[t+8>>2]=n.ino,k[t+12>>2]=n.mode,k[t+16>>2]=n.nlink,k[t+20>>2]=n.uid,k[t+24>>2]=n.gid,k[t+28>>2]=n.rdev,k[t+32>>2]=0,G=[n.size>>>0,(H=n.size,+Math.abs(H)>=1?H>0?(0|Math.min(+Math.floor(H/4294967296),4294967295))>>>0:~~+Math.ceil((H-+(~~H>>>0))/4294967296)>>>0:0)],k[t+40>>2]=G[0],k[t+44>>2]=G[1],k[t+48>>2]=4096,k[t+52>>2]=n.blocks,k[t+56>>2]=n.atime.getTime()/1e3|0,k[t+60>>2]=0,k[t+64>>2]=n.mtime.getTime()/1e3|0,k[t+68>>2]=0,k[t+72>>2]=n.ctime.getTime()/1e3|0,k[t+76>>2]=0,G=[n.ino>>>0,(H=n.ino,+Math.abs(H)>=1?H>0?(0|Math.min(+Math.floor(H/4294967296),4294967295))>>>0:~~+Math.ceil((H-+(~~H>>>0))/4294967296)>>>0:0)],k[t+80>>2]=G[0],k[t+84>>2]=G[1],0},doMsync:function(r,e,t,n,o){var i=g.slice(r,r+t);tr.msync(e,i,o,t,n)},doMkdir:function(r,e){return\"/\"===(r=$.normalize(r))[r.length-1]&&(r=r.substr(0,r.length-1)),tr.mkdir(r,e,0),0},doMknod:function(r,e,t){switch(61440&e){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return tr.mknod(r,e,t),0},doReadlink:function(r,e,t){if(t<=0)return-28;var n=tr.readlink(r),o=Math.min(t,M(n)),i=E[e+o];return F(n,g,e,t+1),E[e+o]=i,o},doAccess:function(r,e){if(-8&e)return-28;var t=tr.lookupPath(r,{follow:!0}).node;if(!t)return-44;var n=\"\";return 4&e&&(n+=\"r\"),2&e&&(n+=\"w\"),1&e&&(n+=\"x\"),n&&tr.nodePermissions(t,n)?-2:0},doDup:function(r,e,t){var n=tr.getStream(t);return n&&tr.close(n),tr.open(r,e,0,t,t).fd},doReadv:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=k[e+8*i>>2],s=k[e+(8*i+4)>>2],u=tr.read(r,E,a,s,n);if(u<0)return-1;if(o+=u,u<s)break}return o},doWritev:function(r,e,t,n){for(var o=0,i=0;i<t;i++){var a=k[e+8*i>>2],s=k[e+(8*i+4)>>2],u=tr.write(r,E,a,s,n);if(u<0)return-1;o+=u}return o},varargs:void 0,get:function(){return nr.varargs+=4,k[nr.varargs-4>>2]},getStr:function(r){return x(r)},getStreamFromFD:function(r){var e=tr.getStream(r);if(!e)throw new tr.ErrnoError(8);return e},get64:function(r,e){return r}};var or=[];function ir(r){try{return m.grow(r-y.byteLength+65535>>>16),R(m.buffer),1}catch(r){}}var ar={};function sr(){if(!sr.strings){var r={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:u||\"./this.program\"};for(var e in ar)void 0===ar[e]?delete r[e]:r[e]=ar[e];var t=[];for(var e in r)t.push(e+\"=\"+r[e]);sr.strings=t}return sr.strings}var ur=function(r,e,t,n){r||(r=this),this.parent=r,this.mount=r.mount,this.mounted=null,this.id=tr.nextInode++,this.name=e,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},cr=365,lr=146;function dr(r,e,t){var n=t>0?t:M(r)+1,o=new Array(n),i=F(r,o,0,o.length);return e&&(o.length=i),o}Object.defineProperties(ur.prototype,{read:{get:function(){return(this.mode&cr)===cr},set:function(r){r?this.mode|=cr:this.mode&=-366}},write:{get:function(){return(this.mode&lr)===lr},set:function(r){r?this.mode|=lr:this.mode&=-147}},isFolder:{get:function(){return tr.isDir(this.mode)}},isDevice:{get:function(){return tr.isChrdev(this.mode)}}}),tr.FSNode=ur,tr.staticInit();var fr={s:function(r,e){return function(r,e){var t;if(0===r)t=Date.now();else{if(1!==r&&4!==r)return K(28),-1;t=V()}return k[e>>2]=t/1e3|0,k[e+4>>2]=t%1e3*1e3*1e3|0,0}(r,e)},j:function(r,e,t,n){try{return e=nr.getStr(e),e=nr.calculateAt(r,e),nr.doAccess(e,t)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},i:function(r,e,t){nr.varargs=t;try{var n=nr.getStreamFromFD(r);switch(e){case 0:return(o=nr.get())<0?-28:tr.open(n.path,n.flags,0,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=nr.get();return n.flags|=o,0;case 5:o=nr.get();return b[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return K(28),-1}}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},z:function(r,e){try{var t=nr.getStreamFromFD(r);return nr.doStat(tr.stat,t.path,e)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},x:function(r,e,t,n){try{e=nr.getStr(e);var o=256&n,i=4096&n;return n&=-4353,e=nr.calculateAt(r,e,i),nr.doStat(o?tr.lstat:tr.stat,e,t)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},A:function(r,e,t){nr.varargs=t;try{var n=nr.getStreamFromFD(r);switch(e){case 21509:case 21505:case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:case 21523:case 21524:return n.tty?0:-59;case 21519:if(!n.tty)return-59;var o=nr.get();return k[o>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:o=nr.get();return tr.ioctl(n,e,o);default:L(\"bad ioctl syscall \"+e)}}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},d:function(r,e,t){nr.varargs=t;try{var n=nr.getStr(r),o=t?nr.get():0;return tr.open(n,e,o).fd}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},y:function(r,e){try{return r=nr.getStr(r),nr.doStat(tr.stat,r,e)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},r:function(r){try{return r=nr.getStr(r),tr.unlink(r),0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},p:function(){throw 1/0},t:function(r,e,t,n,o,i,a,s){try{var u=tr.getStream(o);if(!u)return-8;var c=tr.mmap(u,r,e,i,t,n),l=c.ptr;return k[a>>2]=c.allocated,l}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},u:function(r,e,t,n,o,i){try{var a=tr.getStream(o);a&&(2&t&&nr.doMsync(r,a,e,n,i),tr.munmap(a))}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return-r.errno}},o:function(){L(\"\")},C:function(r,e,t){var n=function(r,e){var t;for(or.length=0,e>>=2;t=g[r++];){var n=t<105;n&&1&e&&e++,or.push(n?D[e++>>1]:k[e]),++e}return or}(e,t);return J[r].apply(null,n)},B:function(r,e,t){g.copyWithin(r,e,e+t)},q:function(r){var e,t,n=g.length,o=2147483648;if((r>>>=0)>o)return!1;for(var i=1;i<=4;i*=2){var a=n*(1+.2/i);if(a=Math.min(a,r+100663296),ir(Math.min(o,(e=Math.max(r,a))+((t=65536)-e%t)%t)))return!0}return!1},v:function(r,e){var t=0;return sr().forEach((function(n,o){var i=e+t;k[r+4*o>>2]=i,function(r,e,t){for(var n=0;n<r.length;++n)E[e++>>0]=r.charCodeAt(n);t||(E[e>>0]=0)}(n,i),t+=n.length+1})),0},w:function(r,e){var t=sr();k[r>>2]=t.length;var n=0;return t.forEach((function(r){n+=r.length+1})),k[e>>2]=n,0},e:function(r){!function(r,e){!function(r){v||(o.onExit&&o.onExit(r),w=!0);c(r,new Ar(r))}(r)}(r)},c:function(r){try{var e=nr.getStreamFromFD(r);return tr.close(e),0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},g:function(r,e,t,n){try{var o=nr.getStreamFromFD(r),i=nr.doReadv(o,e,t);return k[n>>2]=i,0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},n:function(r,e,t,n,o){try{var i=nr.getStreamFromFD(r),a=4294967296*t+(e>>>0),s=9007199254740992;return a<=-s||a>=s?-61:(tr.llseek(i,a,n),G=[i.position>>>0,(H=i.position,+Math.abs(H)>=1?H>0?(0|Math.min(+Math.floor(H/4294967296),4294967295))>>>0:~~+Math.ceil((H-+(~~H>>>0))/4294967296)>>>0:0)],k[o>>2]=G[0],k[o+4>>2]=G[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},h:function(r,e,t,n){try{var o=nr.getStreamFromFD(r),i=nr.doWritev(o,e,t);return k[n>>2]=i,0}catch(r){if(void 0===tr||!(r instanceof tr.ErrnoError))throw r;return r.errno}},b:function(){return h},k:function(r){var e=Date.now();return k[r>>2]=e/1e3|0,k[r+4>>2]=e%1e3*1e3|0,0},l:function(r,e,t,n,o,i,a){var s=Dr();try{return Y(r)(e,t,n,o,i,a)}catch(r){if(Sr(s),r!==r+0)throw r;kr(1,0)}},m:function(r,e){var t=Dr();try{Y(r)(e)}catch(r){if(Sr(t),r!==r+0)throw r;kr(1,0)}},a:function(r){h=r},f:function(r){var e=Date.now()/1e3|0;return r&&(k[r>>2]=e),e}};!function(){var r={a:fr};function e(r,e){var t,n=r.exports;o.asm=n,R((m=o.asm.D).buffer),S=o.asm.M,t=o.asm.E,j.unshift(t),O()}function t(r){e(r.instance)}function i(e){return(p||\"function\"!=typeof fetch?Promise.resolve().then((function(){return W(I)})):fetch(I,{credentials:\"same-origin\"}).then((function(r){if(!r.ok)throw\"failed to load wasm binary file at '\"+I+\"'\";return r.arrayBuffer()})).catch((function(){return W(I)}))).then((function(e){return WebAssembly.instantiate(e,r)})).then((function(r){return r})).then(e,(function(r){f(\"failed to asynchronously prepare wasm: \"+r),L(r)}))}if(N(),o.instantiateWasm)try{return o.instantiateWasm(r,e)}catch(r){return f(\"Module.instantiateWasm callback failed with error: \"+r),!1}(p||\"function\"!=typeof WebAssembly.instantiateStreaming||q(I)||\"function\"!=typeof fetch?i(t):fetch(I,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(t,(function(r){return f(\"wasm streaming compile failed: \"+r),f(\"falling back to ArrayBuffer instantiation\"),i(t)}))}))).catch(n)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.E).apply(null,arguments)};var pr=o._emscripten_bind_VoidPtr___destroy___0=function(){return(pr=o._emscripten_bind_VoidPtr___destroy___0=o.asm.F).apply(null,arguments)},hr=o._emscripten_bind_Graphviz_Graphviz_2=function(){return(hr=o._emscripten_bind_Graphviz_Graphviz_2=o.asm.G).apply(null,arguments)},mr=o._emscripten_bind_Graphviz_version_0=function(){return(mr=o._emscripten_bind_Graphviz_version_0=o.asm.H).apply(null,arguments)},vr=o._emscripten_bind_Graphviz_lastError_0=function(){return(vr=o._emscripten_bind_Graphviz_lastError_0=o.asm.I).apply(null,arguments)},wr=o._emscripten_bind_Graphviz_layout_3=function(){return(wr=o._emscripten_bind_Graphviz_layout_3=o.asm.J).apply(null,arguments)},_r=o._emscripten_bind_Graphviz_createFile_2=function(){return(_r=o._emscripten_bind_Graphviz_createFile_2=o.asm.K).apply(null,arguments)},yr=o._emscripten_bind_Graphviz___destroy___0=function(){return(yr=o._emscripten_bind_Graphviz___destroy___0=o.asm.L).apply(null,arguments)};o._malloc=function(){return(o._malloc=o.asm.N).apply(null,arguments)},o._free=function(){return(o._free=o.asm.O).apply(null,arguments)};var Er,gr=o.___errno_location=function(){return(gr=o.___errno_location=o.asm.P).apply(null,arguments)},br=o._emscripten_builtin_memalign=function(){return(br=o._emscripten_builtin_memalign=o.asm.Q).apply(null,arguments)},kr=o._setThrew=function(){return(kr=o._setThrew=o.asm.R).apply(null,arguments)},Dr=o.stackSave=function(){return(Dr=o.stackSave=o.asm.S).apply(null,arguments)},Sr=o.stackRestore=function(){return(Sr=o.stackRestore=o.asm.T).apply(null,arguments)};function Ar(r){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+r+\")\",this.status=r}function Pr(r){function e(){Er||(Er=!0,o.calledRun=!0,w||(o.noFSInit||tr.init.initialized||tr.init(),tr.ignorePermissions=!1,X(j),t(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for(\"function\"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)r=o.postRun.shift(),z.unshift(r);var r;X(z)}()))}T>0||(!function(){if(o.preRun)for(\"function\"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)r=o.preRun.shift(),C.unshift(r);var r;X(C)}(),T>0||(o.setStatus?(o.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){o.setStatus(\"\")}),1),e()}),1)):e()))}if(B=function r(){Er||Pr(),Er||(B=r)},o.run=Pr,o.preInit)for(\"function\"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();function xr(){}function Fr(r){return(r||xr).__cache__}function Mr(r,e){var t=Fr(e),n=t[r];return n||((n=Object.create((e||xr).prototype)).ptr=r,t[r]=n)}Pr(),xr.prototype=Object.create(xr.prototype),xr.prototype.constructor=xr,xr.prototype.__class__=xr,xr.__cache__={},o.WrapperObject=xr,o.getCache=Fr,o.wrapPointer=Mr,o.castObject=function(r,e){return Mr(r.ptr,e)},o.NULL=Mr(0),o.destroy=function(r){if(!r.__destroy__)throw\"Error: Cannot destroy object. (Did you create it yourself?)\";r.__destroy__(),delete Fr(r.__class__)[r.ptr]},o.compare=function(r,e){return r.ptr===e.ptr},o.getPointer=function(r){return r.ptr},o.getClass=function(r){return r.__class__};var Rr={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(Rr.needed){for(var r=0;r<Rr.temps.length;r++)o._free(Rr.temps[r]);Rr.temps.length=0,o._free(Rr.buffer),Rr.buffer=0,Rr.size+=Rr.needed,Rr.needed=0}Rr.buffer||(Rr.size+=128,Rr.buffer=o._malloc(Rr.size),_(Rr.buffer)),Rr.pos=0},alloc:function(r,e){_(Rr.buffer);var t,n=e.BYTES_PER_ELEMENT,i=r.length*n;return i=i+7&-8,Rr.pos+i>=Rr.size?(_(i>0),Rr.needed+=i,t=o._malloc(i),Rr.temps.push(t)):(t=Rr.buffer+Rr.pos,Rr.pos+=i),t},copy:function(r,e,t){switch(t>>>=0,e.BYTES_PER_ELEMENT){case 2:t>>>=1;break;case 4:t>>>=2;break;case 8:t>>>=3}for(var n=0;n<r.length;n++)e[t+n]=r[n]}};function Cr(r){if(\"string\"==typeof r){var e=dr(r),t=Rr.alloc(e,E);return Rr.copy(e,E,t),t}return r}function jr(){throw\"cannot construct a VoidPtr, no constructor in IDL\"}function zr(r,e){r&&\"object\"==typeof r&&(r=r.ptr),e&&\"object\"==typeof e&&(e=e.ptr),this.ptr=hr(r,e),Fr(zr)[this.ptr]=this}return jr.prototype=Object.create(xr.prototype),jr.prototype.constructor=jr,jr.prototype.__class__=jr,jr.__cache__={},o.VoidPtr=jr,jr.prototype.__destroy__=jr.prototype.__destroy__=function(){var r=this.ptr;pr(r)},zr.prototype=Object.create(xr.prototype),zr.prototype.constructor=zr,zr.prototype.__class__=zr,zr.__cache__={},o.Graphviz=zr,zr.prototype.version=zr.prototype.version=function(){var r=this.ptr;return x(mr(r))},zr.prototype.lastError=zr.prototype.lastError=function(){var r=this.ptr;return x(vr(r))},zr.prototype.layout=zr.prototype.layout=function(r,e,t){var n=this.ptr;return Rr.prepare(),r=r&&\"object\"==typeof r?r.ptr:Cr(r),e=e&&\"object\"==typeof e?e.ptr:Cr(e),t=t&&\"object\"==typeof t?t.ptr:Cr(t),x(wr(n,r,e,t))},zr.prototype.createFile=zr.prototype.createFile=function(r,e){var t=this.ptr;Rr.prepare(),r=r&&\"object\"==typeof r?r.ptr:Cr(r),e=e&&\"object\"==typeof e?e.ptr:Cr(e),_r(t,r,e)},zr.prototype.__destroy__=zr.prototype.__destroy__=function(){var r=this.ptr;yr(r)},e.ready}})();r.exports=t}(u);var c=u.exports,l=Object.freeze(e({__proto__:null,default:c},[u.exports])),d=function(){return d=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++)for(var o in e=arguments[t])Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o]);return r},d.apply(this,arguments)},f=function(r,e,t){if(t||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return r.concat(n||Array.prototype.slice.call(e))};function p(r){return{path:r.path,data:'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\\\\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\\\n<svg width=\"'.concat(r.width,'\" height=\"').concat(r.height,'\"></svg>')}}function h(r,e){var t,n=d({images:[],files:[]},e);f(f([],n.files,!0),(t=n.images,t.map(p)),!0).forEach((function(e){return r.createFile(e.path,e.data)}))}var m={layout:function(r,e,t,n){return void 0===e&&(e=\"svg\"),void 0===t&&(t=\"dot\"),r?s(l,null==n?void 0:n.wasmFolder,null==n?void 0:n.wasmBinary).then((function(o){var i=new o.Graphviz(void 0!==(null==n?void 0:n.yInvert)&&(null==n?void 0:n.yInvert),void 0!==(null==n?void 0:n.nop)?null==n?void 0:n.nop:0);h(i,n);var a=i.layout(r,e,t);if(o.destroy(i),!a)throw new Error(o.Graphviz.prototype.lastError());return a})):Promise.resolve(\"\")},circo:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"circo\",t)},dot:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"dot\",t)},fdp:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"fdp\",t)},sfdp:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"sfdp\",t)},neato:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"neato\",t)},osage:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"osage\",t)},patchwork:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"patchwork\",t)},twopi:function(r,e,t){return void 0===e&&(e=\"svg\"),this.layout(r,e,\"twopi\",t)}},v=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};var w={exports:{}};\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */function _(r){return void 0!==r.children}!function(r,e){r.exports=function(){function r(r){var e=typeof r;return null!==r&&(\"object\"===e||\"function\"===e)}function e(r){return\"function\"==typeof r}var t=Array.isArray?Array.isArray:function(r){return\"[object Array]\"===Object.prototype.toString.call(r)},n=0,o=void 0,i=void 0,a=function(r,e){E[n]=r,E[n+1]=e,2===(n+=2)&&(i?i(g):k())};function s(r){i=r}function u(r){a=r}var c=\"undefined\"!=typeof window?window:void 0,l=c||{},d=l.MutationObserver||l.WebKitMutationObserver,f=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),p=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function h(){return function(){return process.nextTick(g)}}function m(){return void 0!==o?function(){o(g)}:y()}function w(){var r=0,e=new d(g),t=document.createTextNode(\"\");return e.observe(t,{characterData:!0}),function(){t.data=r=++r%2}}function _(){var r=new MessageChannel;return r.port1.onmessage=g,function(){return r.port2.postMessage(0)}}function y(){var r=setTimeout;return function(){return r(g,1)}}var E=new Array(1e3);function g(){for(var r=0;r<n;r+=2)(0,E[r])(E[r+1]),E[r]=void 0,E[r+1]=void 0;n=0}function b(){try{var r=Function(\"return this\")().require(\"vertx\");return o=r.runOnLoop||r.runOnContext,m()}catch(r){return y()}}var k=void 0;function D(r,e){var t=this,n=new this.constructor(P);void 0===n[A]&&J(n);var o=t._state;if(o){var i=arguments[o-1];a((function(){return G(o,n,i,t._result)}))}else U(t,n,r,e);return n}function S(r){var e=this;if(r&&\"object\"==typeof r&&r.constructor===e)return r;var t=new e(P);return N(t,r),t}k=f?h():d?w():p?_():void 0===c?b():y();var A=Math.random().toString(36).substring(2);function P(){}var x=void 0,F=1,M=2;function R(){return new TypeError(\"You cannot resolve a promise with itself\")}function C(){return new TypeError(\"A promises callback cannot return that same promise.\")}function j(r,e,t,n){try{r.call(e,t,n)}catch(r){return r}}function z(r,e,t){a((function(r){var n=!1,o=j(t,e,(function(t){n||(n=!0,e!==t?N(r,t):L(r,t))}),(function(e){n||(n=!0,I(r,e))}),\"Settle: \"+(r._label||\" unknown promise\"));!n&&o&&(n=!0,I(r,o))}),r)}function T(r,e){e._state===F?L(r,e._result):e._state===M?I(r,e._result):U(e,void 0,(function(e){return N(r,e)}),(function(e){return I(r,e)}))}function B(r,t,n){t.constructor===r.constructor&&n===D&&t.constructor.resolve===S?T(r,t):void 0===n?L(r,t):e(n)?z(r,t,n):L(r,t)}function N(e,t){if(e===t)I(e,R());else if(r(t)){var n=void 0;try{n=t.then}catch(r){return void I(e,r)}B(e,t,n)}else L(e,t)}function O(r){r._onerror&&r._onerror(r._result),H(r)}function L(r,e){r._state===x&&(r._result=e,r._state=F,0!==r._subscribers.length&&a(H,r))}function I(r,e){r._state===x&&(r._state=M,r._result=e,a(O,r))}function U(r,e,t,n){var o=r._subscribers,i=o.length;r._onerror=null,o[i]=e,o[i+F]=t,o[i+M]=n,0===i&&r._state&&a(H,r)}function H(r){var e=r._subscribers,t=r._state;if(0!==e.length){for(var n=void 0,o=void 0,i=r._result,a=0;a<e.length;a+=3)n=e[a],o=e[a+t],n?G(t,n,o,i):o(i);r._subscribers.length=0}}function G(r,t,n,o){var i=e(n),a=void 0,s=void 0,u=!0;if(i){try{a=n(o)}catch(r){u=!1,s=r}if(t===a)return void I(t,C())}else a=o;t._state!==x||(i&&u?N(t,a):!1===u?I(t,s):r===F?L(t,a):r===M&&I(t,a))}function q(r,e){try{e((function(e){N(r,e)}),(function(e){I(r,e)}))}catch(e){I(r,e)}}var W=0;function V(){return W++}function J(r){r[A]=W++,r._state=void 0,r._result=void 0,r._subscribers=[]}function X(){return new Error(\"Array Methods must be provided an Array\")}var Y=function(){function r(r,e){this._instanceConstructor=r,this.promise=new r(P),this.promise[A]||J(this.promise),t(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?L(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&L(this.promise,this._result))):I(this.promise,X())}return r.prototype._enumerate=function(r){for(var e=0;this._state===x&&e<r.length;e++)this._eachEntry(r[e],e)},r.prototype._eachEntry=function(r,e){var t=this._instanceConstructor,n=t.resolve;if(n===S){var o=void 0,i=void 0,a=!1;try{o=r.then}catch(r){a=!0,i=r}if(o===D&&r._state!==x)this._settledAt(r._state,e,r._result);else if(\"function\"!=typeof o)this._remaining--,this._result[e]=r;else if(t===er){var s=new t(P);a?I(s,i):B(s,r,o),this._willSettleAt(s,e)}else this._willSettleAt(new t((function(e){return e(r)})),e)}else this._willSettleAt(n(r),e)},r.prototype._settledAt=function(r,e,t){var n=this.promise;n._state===x&&(this._remaining--,r===M?I(n,t):this._result[e]=t),0===this._remaining&&L(n,this._result)},r.prototype._willSettleAt=function(r,e){var t=this;U(r,void 0,(function(r){return t._settledAt(F,e,r)}),(function(r){return t._settledAt(M,e,r)}))},r}();function K(r){return new Y(this,r).promise}function $(r){var e=this;return t(r)?new e((function(t,n){for(var o=r.length,i=0;i<o;i++)e.resolve(r[i]).then(t,n)})):new e((function(r,e){return e(new TypeError(\"You must pass an array to race.\"))}))}function Q(r){var e=new this(P);return I(e,r),e}function Z(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function rr(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}var er=function(){function r(e){this[A]=V(),this._result=this._state=void 0,this._subscribers=[],P!==e&&(\"function\"!=typeof e&&Z(),this instanceof r?q(this,e):rr())}return r.prototype.catch=function(r){return this.then(null,r)},r.prototype.finally=function(r){var t=this,n=t.constructor;return e(r)?t.then((function(e){return n.resolve(r()).then((function(){return e}))}),(function(e){return n.resolve(r()).then((function(){throw e}))})):t.then(r,r)},r}();function tr(){var r=void 0;if(void 0!==v)r=v;else if(\"undefined\"!=typeof self)r=self;else try{r=Function(\"return this\")()}catch(r){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var e=r.Promise;if(e){var t=null;try{t=Object.prototype.toString.call(e.resolve())}catch(r){}if(\"[object Promise]\"===t&&!e.cast)return}r.Promise=er}return er.prototype.then=D,er.all=K,er.race=$,er.resolve=S,er.reject=Q,er._setScheduler=s,er._setAsap=u,er._asap=a,er.polyfill=tr,er.Promise=er,er}()}(w),w.exports.polyfill();var y=function(r){var e=[];return r.children.forEach((function(r){_(r)?e.push(y(r)):e.push(E(r))})),\"subgraph cluster_\".concat(r.id,' {\\\\nid=\"').concat(r.id,'\";\\\\nlabel=\"').concat(r.text,'\";\\\\nmargin=16;\\\\n').concat(e.join(\"\\\\n\"),\"\\\\n}\")},E=function(r){return\"\".concat(r.id,' [id=\"').concat(r.id,'\" label=\"').concat(r.text,'\" width=').concat(k(r.width),\" height=\").concat(k(r.height),\"]\")},g=function(r){return 96*r/72},b=function(r){return 96*r},k=function(r){return r/96};function D(r){var e=r?r.split(\",\").map((function(r){return g(+r)})):[0,0,0,0],t=e[0],n=e[1],o=e[2]-t,i=e[3]-n;return{x:t-o/2,y:n-i/2,width:o,height:i}}function S(r,e){var t=r.split(\",\").map((function(r){return g(+r)})),n=t[0],o=t[1];return{x:-n+e.width,y:-o+e.height}}function A(r,e,t){return void 0===t&&(t=\"json\"),m[r](e,t).then((function(r){return\"json\"===t?JSON.parse(r):r}))}function P(e,t){if(self.document=self.document||{currentScript:{src:t.wasmFolder+\"/dummy.js\"}},e.raw)return A(t.engine,e.raw,\"svg\");var n={},o=[],i=[],a={},s=[],u=[],c={},l=[],d=[];function f(r,e){_(r)?(n[r.id]=r,o.push(r),r.children.forEach((function(r){return f(r,!1)})),e&&i.push(y(r))):(a[r.id]=r,s.push(r),e&&u.push(E(r)))}return e.items.forEach((function(r){return f(r,!0)})),e.links.forEach((function(r){var e,t,n,o;c[r.id]=r,l.push(r),d.push((e=r.source.id,t=r.target.id,n=r.id,o=r.text,\"\".concat(e,\" -> \").concat(t,' [id=\"').concat(n,'\", label=\"').concat(o,'\"]')))})),A(t.engine,\"digraph G {\\\\n graph [fontname=Verdana,fontsize=11.0];\\\\n graph [rankdir=TB];\\\\n node [shape=rect,fontname=Verdana,fontsize=11.0,fixedsize=true];\\\\n edge [fontname=Verdana,fontsize=11.0];\\\\n\\\\n\".concat(i.join(\"\\\\n\"),\"\\\\n\\\\n\").concat(d.join(\"\\\\n\"),\"\\\\n\\\\n\").concat(u.join(\"\\\\n\"),\"\\\\n}\")).then((function(e){var t=D(e.bb);return e.objects&&e.objects.forEach((function(r){if(r.nodes){var e=function(r,e){var t=D(r);return{x:-t.x+e.width,y:-t.y+e.height,width:t.width,height:t.height}}(r.bb,t),o=n[r.id];o.x=e.x-t.width/2,o.y=e.y-t.height/2,o.width=e.width,o.height=e.height}else{var i=(u=r.pos,c=r.width,l=r.height,d=S(u,t),f=b(+c),p=b(+l),{x:d.x,y:d.y,width:f,height:p}),s=a[r.id];s&&(s.x=i.x-t.width/2,s.y=i.y-t.height/2)}var u,c,l,d,f,p})),e.edges&&e.edges.forEach((function(e){var n=c[e.id];n&&(n.points=function(e,t){if(e.pos){var n=e.pos.substr(2).split(\" \").map((function(r){return S(r,t)})).map((function(r){return[r.x-t.width/2,r.y-t.height/2]})),o=n.shift();return r(r([],n,!0),[o],!1)}return[]}(e,t))})),{clusters:o,nodes:s,links:l}}))}self.onmessage=function(r){P.apply(void 0,r.data).then((function(r){self.postMessage(r)}))}}();`;\n\n const workerBlob = new Blob([workerCode], { type: \"application/javascript\" });\n const workerUrl = URL.createObjectURL(workerBlob);\n const worker = new Worker(workerUrl);\n const response = new Promise<string>(resolve => {\n worker.onmessage = event => {\n resolve(event.data);\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n };\n worker.postMessage([data, options]);\n });\n return {\n terminate: () => worker.terminate(),\n response\n };\n}\n","import { curveBasis as d3CurveBasis, line as d3Line } from \"d3-shape\";\nimport { Cluster, graphviz as gvWorker, Node } from \"./graphvizWorker\";\nimport { Layout, Point } from \"./layout\";\nimport { EdgePlaceholder } from \"./placeholders\";\n\ntype Engine = \"circo\" | \"dot\" | \"fdp\" | \"neato\" | \"osage\" | \"patchwork\" | \"twopi\";\n\nconst lineBasis = d3Line<Point>()\n .x(d => d[0])\n .y(d => d[1])\n .curve(d3CurveBasis)\n ;\n\nexport class Graphviz extends Layout {\n\n _engine: Engine;\n _wasmFolder: string;\n\n constructor(graph, engine: Engine, wasmFolder: string) {\n super(graph);\n this._engine = engine;\n this._wasmFolder = wasmFolder;\n }\n\n start() {\n super.start();\n const size = this._graph.size();\n const data = this._graph.graphData();\n const nodeIdx = {};\n const hierarchy: Array<Cluster | Node> = data.hierarchy((type, item, children) => {\n switch (type) {\n case \"subgraph\":\n return {\n id: item.id,\n text: item.props.text,\n children\n };\n case \"vertex\":\n delete item[\"fx\"];\n delete item[\"fy\"];\n const bbox = item.element.node().getBBox();\n const retVal = {\n id: item.id,\n text: item.props.text,\n width: bbox.width,\n height: bbox.height\n };\n nodeIdx[retVal.id] = retVal;\n return retVal;\n }\n }) as Array<Cluster | Node>;\n return gvWorker({\n items: hierarchy,\n links: data.allEdges().map(e => ({\n id: e.props.id,\n source: nodeIdx[e.source.id],\n target: nodeIdx[e.target.id],\n text: e.props.label || \"\"\n })),\n raw: \"\"\n }, {\n engine: this._engine,\n wasmFolder: this._wasmFolder\n }).response.then((response: any) => {\n if (this.running()) {\n response.clusters.forEach(n => {\n const sg = data.subgraph(n.id);\n sg.x = n.x + size.width / 2 - n.width;\n sg.y = n.y + size.height / 2 - n.height;\n sg.props.width = n.width;\n sg.props.height = n.height;\n });\n response.nodes.forEach(n => {\n const v = data.vertex(n.id);\n v.x = n.x + size.width / 2;\n v.y = n.y + size.height / 2;\n });\n response.links.forEach(l => {\n const e = data.edge(l.id);\n e.points = [[e.source.x, e.source.y], ...(l.points !== undefined ? l.points.map(p => [p[0] + size.width / 2, p[1] + size.height / 2]) : []), [e.target.x, e.target.y]];\n // e.points = l.points.map(p => [p[0] + size.width / 2, p[1] + size.height / 2]);\n });\n this._graph\n .moveSubgraphs(true)\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n }\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } {\n let points = [];\n let hasNaN = false;\n if (ep.points) {\n points = ep.points.map(p => {\n const x = this._graph.project(p[0], false);\n const y = this._graph.project(p[1], false);\n if (isNaN(x) || isNaN(y)) {\n hasNaN = true;\n }\n return [x, y];\n });\n }\n if (hasNaN || points.length < 2) {\n return super.edgePath(ep, curveDepth);\n }\n return {\n path: lineBasis(points),\n labelPos: this.center(points)\n };\n }\n\n}\n\n","import { Layout } from \"./layout\";\n\nexport class Null extends Layout {\n\n start(): Promise<this> {\n return super.start().then(() => {\n this.stop();\n return this;\n });\n }\n}\n\nexport class Initial extends Layout {\n\n start(): Promise<this> {\n return super.start().then(() => {\n const size = this._graph.size();\n const data = this._graph.graphData();\n data.allEdges().forEach(e => delete e.points);\n // Avoid edges of 0 length ---\n data.allVertices().forEach(v => {\n delete v.fx;\n delete v.fy;\n v.x = size.width / 2 + Math.random() * 5 - 2.5;\n v.y = size.height / 2 + Math.random() * 5 - 2.5;\n });\n this._graph\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n return this;\n });\n }\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","import { Graph2 } from \"@hpcc-js/util\";\nimport { cluster, hierarchy, tree } from \"d3-hierarchy\";\nimport { linkHorizontal as d3LinkHorizontal } from \"d3-shape\";\nimport { Hierarchy } from \"./dagreWorker\";\nimport { Layout, Point } from \"./layout\";\nimport { VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder } from \"./placeholders\";\n\nconst linkHorizontal = d3LinkHorizontal<any, { x: number, y: number }>()\n .x(d => d.x)\n .y(d => d.y)\n ;\n\nclass Bounds {\n\n get x() {\n return this.x1;\n }\n\n get y() {\n return this.y1;\n }\n\n get width() {\n return this.x2 - this.x1;\n }\n\n get height() {\n return this.y2 - this.y1;\n }\n\n get center() {\n return {\n x: this.x1 + this.width / 2,\n y: this.y1 + this.height / 2\n };\n }\n\n constructor(public x1: number = 0, public y1: number = 0, public x2: number = x1, public y2: number = y1) {\n }\n\n reset(x: number, y: number) {\n this.x1 = x;\n this.x2 = x;\n this.y1 = y;\n this.y2 = y;\n }\n\n expand(x: number, y: number) {\n if (this.x1 > x) {\n this.x1 = x;\n } else if (this.x2 < x) {\n this.x2 = x;\n }\n if (this.y1 > y) {\n this.y1 = y;\n } else if (this.y2 < y) {\n this.y2 = y;\n }\n }\n}\n\ninterface Node {\n origData: VertexPlaceholder;\n children: Node[];\n}\n\nexport interface EdgeLayout {\n path: string;\n labelPos: Point;\n}\n\nexport interface Options {\n\n}\n\nexport interface TidyTreeOptions extends Options {\n rankdir: \"TB\" | \"LR\";\n}\n\nexport class TidyTreeBase extends Layout {\n\n constructor(graph, protected options: Options) {\n super(graph);\n }\n\n private _visited = {};\n protected _tree: Node;\n protected _d3Hierarchy: Hierarchy;\n\n protected sortTree(data: Graph2, node?: Node) {\n if (!node) {\n node = this._tree;\n }\n // Place busiest children at the top of the list ---\n node.children.sort((l, r) => data.neighbors(r.origData.id).length - data.neighbors(l.origData.id).length);\n\n // Move busiest children to the middle of the list ---\n const children: Node[] = [];\n node.children.forEach((n, i) => {\n if (i % 2 === 0) {\n children.push(n);\n } else {\n children.unshift(n);\n }\n });\n node.children = children;\n\n // Recurse ---\n node.children.forEach(cnode => this.sortTree(data, cnode));\n }\n\n protected depthFirst(data: Graph2<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>, v: VertexPlaceholder, parent?) {\n if (parent === undefined) {\n this._visited = {};\n this._tree = undefined;\n }\n\n if (!this._visited[v.id]) {\n this._visited[v.id] = v;\n const node: Node = {\n origData: v,\n children: []\n };\n if (parent === undefined) {\n this._tree = node;\n } else {\n parent.children.push(node);\n }\n data.neighbors(v.id).forEach(n => this.depthFirst(data, n, node));\n }\n }\n\n protected breadthFirst(data: Graph2<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>, v: VertexPlaceholder) {\n this._visited = {};\n this._visited[v.id] = v;\n this._tree = {\n origData: v,\n children: []\n };\n\n const q: Node[] = [];\n q.push(this._tree);\n while (q.length) {\n const node = q.shift();\n data.neighbors(node.origData.id).forEach(n => {\n if (!this._visited[n.id]) {\n this._visited[n.id] = n;\n const nnode = {\n origData: n,\n children: []\n };\n node.children.push(nnode);\n q.push(nnode);\n }\n });\n }\n this.sortTree(data);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const data = this._graph.graphData();\n const vertices = data.allVertices();\n\n let centroid; // TODO Could Be Many (default should be all with 0 in edges?)\n for (const v of vertices) {\n delete v.fx;\n delete v.fy;\n if (centroid === undefined) {\n centroid = v;\n }\n if (v.centroid) {\n centroid = v;\n break;\n }\n }\n\n const edges = data.allEdges();\n edges.forEach(e => delete e.points);\n\n this.breadthFirst(data, centroid);\n this._d3Hierarchy = hierarchy(this._tree);\n return this;\n });\n }\n\n finalize(nodes: Node[]) {\n const size = this._graph.size();\n\n const bounds = new Bounds();\n nodes.forEach((d, i) => {\n if (i === 0) {\n bounds.reset(d.origData.x, d.origData.y);\n } else {\n bounds.expand(d.origData.x, d.origData.y);\n }\n });\n\n const offset = {\n x: size.width / 2 - bounds.center.x,\n y: size.height / 2 - bounds.center.y\n };\n\n nodes.forEach(d => {\n d.origData.x += offset.x;\n d.origData.y += offset.y;\n });\n\n this._graph\n .moveVertices(true)\n .moveEdges(true)\n ;\n this.stop();\n }\n}\n\nexport class Tree extends TidyTreeBase {\n\n constructor(graph, protected options: TidyTreeOptions) {\n super(graph, options);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = tree().nodeSize([this.options.rankdir === \"TB\" ? 200 : 100, this.options.rankdir === \"TB\" ? 100 : 200]);\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.x = this.options.rankdir === \"TB\" ? d.x : d.y;\n d.data.origData.y = this.options.rankdir === \"TB\" ? d.y : d.x;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): EdgeLayout {\n const source = this._graph.projectPlacholder(ep.source);\n const target = this._graph.projectPlacholder(ep.target);\n return {\n path: linkHorizontal({ source, target }),\n labelPos: this.center([[source.x, source.y], [target.x, target.y]])\n };\n }\n}\n\nexport class RadialTree extends TidyTreeBase {\n\n constructor(graph) {\n super(graph, {});\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = tree()\n .size([2 * Math.PI, 1024 / 2])\n .separation((a, b) => (a.parent == b.parent ? 1 : 2) / a.depth)\n ;\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.angle = d.x;\n d.data.origData.radius = d.y;\n d.data.origData.x = Math.sin(d.x) * d.y;\n d.data.origData.y = Math.cos(d.x) * d.y;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n}\n\nexport class Dendrogram extends TidyTreeBase {\n\n constructor(graph, protected options: TidyTreeOptions) {\n super(graph, options);\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = cluster().nodeSize([this.options.rankdir === \"TB\" ? 200 : 100, this.options.rankdir === \"TB\" ? 100 : 200]);\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.x = this.options.rankdir === \"TB\" ? d.x : d.y;\n d.data.origData.y = this.options.rankdir === \"TB\" ? d.y : d.x;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n\n edgePath(ep: EdgePlaceholder, curveDepth: number): EdgeLayout {\n const source = this._graph.projectPlacholder(ep.source);\n const target = this._graph.projectPlacholder(ep.target);\n return {\n path: linkHorizontal({ source, target }),\n labelPos: this.center([[source.x, source.y], [target.x, target.y]])\n };\n }\n}\n\nexport class RadialDendrogram extends TidyTreeBase {\n\n constructor(graph) {\n super(graph, {});\n }\n\n start(): Promise<this> {\n return super.start().then(() => {\n const treeFunc = cluster()\n .size([2 * Math.PI, 1024 / 2])\n .separation((a, b) => (a.parent == b.parent ? 1 : 2) / a.depth)\n ;\n const root = treeFunc(this._d3Hierarchy);\n const nodes: Node[] = root.descendants().map((d) => {\n d.data.origData.x = Math.sin(d.x) * d.y;\n d.data.origData.y = Math.cos(d.x) * d.y;\n return d.data;\n });\n\n this.finalize(nodes);\n return this;\n });\n }\n}","import { d3Event, drag as d3Drag, Palette, select as d3Select, Selection, Spacer, SVGGlowFilter, SVGZoomWidget, ToggleButton, Utility, Widget } from \"@hpcc-js/common\";\nimport { IconEx, Icons, React, render, Subgraph, Vertex, IVertex3 } from \"@hpcc-js/react\";\nimport { getScriptSrc, Graph2 as GraphCollection, hashSum } from \"@hpcc-js/util\";\nimport { HTMLTooltip } from \"@hpcc-js/html\";\nimport \"d3-transition\";\nimport { Circle, Dagre, ForceDirected, ForceDirectedAnimated, Graphviz, ILayout, Null } from \"./layouts/index\";\nimport { Options as FDOptions } from \"./layouts/forceDirectedWorker\";\nimport { EdgePlaceholder, IEdge, IGraphData2, IHierarchy, ISubgraph, IVertex, SubgraphPlaceholder, VertexPlaceholder } from \"./layouts/placeholders\";\nimport { graphviz as gvWorker } from \"./layouts/graphvizWorker\";\nimport { Tree, RadialTree, Dendrogram, RadialDendrogram } from \"./layouts/tree\";\n\nimport \"../../src/graph2/graph.css\";\nimport { Engine } from \"./layouts/graphvizWorker\";\n\nconst wasmFolder = `${getScriptSrc(\"/graph/lib-umd/graph2/graph\") || getScriptSrc(\"/graph/dist/index\") || \".\"}/graph/dist`;\n\nexport {\n IGraphData2,\n ISubgraph,\n IVertex,\n IEdge,\n IHierarchy\n};\n\ntype GraphLayoutType = \"Hierarchy\" | \"DOT\" | \"Tree\" | \"Dendrogram\" | \"RadialTree\" | \"RadialDendrogram\" | \"ForceDirected\" | \"ForceDirected2\" | \"ForceDirectedHybrid\" | \"Neato\" | \"FDP\" | \"Circle\" | \"TwoPI\" | \"Circo\" | \"None\";\nconst GraphLayoutTypeSet = [\"Hierarchy\", \"DOT\", \"Tree\", \"Dendrogram\", \"RadialTree\", \"RadialDendrogram\", \"ForceDirected\", \"ForceDirected2\", \"ForceDirectedHybrid\", \"Neato\", \"FDP\", \"Circle\", \"TwoPI\", \"Circo\", \"None\"];\n\nconst dragStart = (n: VertexPlaceholder) => {\n n.fx = n.sx = n.x;\n n.fy = n.sy = n.y;\n};\nconst dragTick = (n: VertexPlaceholder, d: VertexPlaceholder) => {\n n.fx = n.sx + d.fx - d.sx;\n n.fy = n.sy + d.fy - d.sy;\n};\nconst dragEnd = (n: VertexPlaceholder) => {\n n.x = n.fx;\n n.y = n.fy;\n n.fx = n.sx = undefined;\n n.fy = n.sy = undefined;\n};\n\nexport class Graph2 extends SVGZoomWidget {\n\n private _toggleHierarchy = new ToggleButton().faChar(\"fa-sitemap\").tooltip(\"Hierarchy\").on(\"click\", () => this.layoutClick(\"Hierarchy\"));\n private _toggleForceDirected = new ToggleButton().faChar(\"fa-expand\").tooltip(\"Force Directed\").on(\"click\", () => this.layoutClick(\"ForceDirected\"));\n private _toggleForceDirected2 = new ToggleButton().faChar(\"fa-arrows\").tooltip(\"Spring\").on(\"click\", () => this.layoutClick(\"ForceDirected2\"));\n private _toggleCircle = new ToggleButton().faChar(\"fa-circle-o\").tooltip(\"Circle\").on(\"click\", () => this.layoutClick(\"Circle\"));\n private _toggleDot = new ToggleButton().faChar(\"fa-angle-double-down\").tooltip(\"DOT\").on(\"click\", () => this.layoutClick(\"DOT\"));\n private _toggleNeato = new ToggleButton().faChar(\"fa-sun-o\").tooltip(\"Neato\").on(\"click\", () => this.layoutClick(\"Neato\"));\n private _toggleFDP = new ToggleButton().faChar(\"fa-asterisk\").tooltip(\"FDP\").on(\"click\", () => this.layoutClick(\"FDP\"));\n private _toggleTwoPI = new ToggleButton().faChar(\"fa-bullseye\").tooltip(\"TwoPI\").on(\"click\", () => this.layoutClick(\"TwoPI\"));\n private _toggleCirco = new ToggleButton().faChar(\"fa-cogs\").tooltip(\"Circo\").on(\"click\", () => this.layoutClick(\"Circo\"));\n private _toggleT = new ToggleButton().faChar(\"fa-sitemap fa-rotate-270\").tooltip(\"Tree\").on(\"click\", () => this.layoutClick(\"Tree\"));\n private _toggleRT = new ToggleButton().faChar(\"fa-sun-o\").tooltip(\"Radial Tree\").on(\"click\", () => this.layoutClick(\"RadialTree\"));\n private _toggleD = new ToggleButton().faChar(\"fa-sitemap fa-rotate-270\").tooltip(\"Dendrogram\").on(\"click\", () => this.layoutClick(\"Dendrogram\"));\n private _toggleRD = new ToggleButton().faChar(\"fa-asterisk\").tooltip(\"Radial Dendrogram\").on(\"click\", () => this.layoutClick(\"RadialDendrogram\"));\n\n protected _graphData = new GraphCollection<VertexPlaceholder, EdgePlaceholder, SubgraphPlaceholder>()\n .idFunc(d => d.id)\n .sourceFunc(e => e.source.id)\n .targetFunc(e => e.target.id)\n .updateFunc((b: any, a: any) => {\n b.props = a.props;\n return b;\n })\n ;\n\n protected _prevDoClickTime: number = 0;\n\n protected _centroidFilter: SVGGlowFilter;\n\n protected _svgDefsAnn: any;\n protected _svgDefsCat: any;\n protected _subgraphG: Selection<SVGGElement, any, SVGGElement, any>;\n protected _edgeG: Selection<SVGGElement, any, SVGGElement, any>;\n protected _vertexG: Selection<SVGGElement, any, SVGGElement, any>;\n\n protected _tooltip: HTMLTooltip = new HTMLTooltip();\n\n protected _selection = new Utility.Selection(this);\n private _dragHandler = d3Drag<Element, VertexPlaceholder>();\n\n protected _catPalette = Palette.ordinal(\"hpcc10\");\n _svgDefs: any;\n\n constructor() {\n super();\n const context = this;\n this._drawStartPos = \"origin\";\n\n const buttons: Widget[] = [\n this._toggleHierarchy,\n this._toggleForceDirected,\n this._toggleForceDirected2,\n this._toggleCircle,\n new Spacer(),\n this._toggleDot,\n this._toggleNeato,\n this._toggleFDP,\n this._toggleTwoPI,\n this._toggleCirco,\n new Spacer(),\n this._toggleT,\n this._toggleRT,\n this._toggleD,\n this._toggleRD,\n new Spacer()\n ];\n this._iconBar.buttons(buttons.concat(this._iconBar.buttons()));\n\n this._dragHandler\n .on(\"start\", function (d) {\n if (context.allowDragging()) {\n d3Select(this).classed(\"grabbed\", true);\n dragStart(d);\n Utility.safeRaise(this);\n context.moveVertexPlaceholder(d, false, true);\n\n const selection = context.selection();\n const isSelected = context.selected(d.props, selection as IVertex[]);\n if (isSelected) {\n selection\n .filter(v => v.id !== d.props.id)\n .forEach(v => {\n const n = context._graphData.vertex(v.id);\n dragStart(n);\n });\n } else if (context.dragSingleNeighbors()) {\n context._graphData.singleNeighbors(d.id).forEach(n => {\n dragStart(n);\n });\n }\n }\n })\n .on(\"drag\", function (d) {\n if (context.allowDragging()) {\n d.fx = d.sx + context.rproject(d3Event().x - d.sx);\n d.fy = d.sy + context.rproject(d3Event().y - d.sy);\n context._graphData.vertexEdges(d.id).forEach(e => delete e.points);\n context.moveVertexPlaceholder(d, false, true);\n const selection = context.selection();\n const isSelected = context.selected(d.props, selection as IVertex[]);\n\n if (isSelected) {\n selection\n .filter(v => v.id !== d.props.id)\n .forEach(v => {\n const n = context._graphData.vertex(v.id);\n dragTick(n, d);\n context.moveVertexPlaceholder(n, false, true);\n });\n } else if (context.dragSingleNeighbors()) {\n context._graphData.singleNeighbors(d.id).forEach(n => {\n dragTick(n, d);\n context.moveVertexPlaceholder(n, false, true);\n });\n }\n }\n })\n .on(\"end\", function (d) {\n let doClick = true;\n if (context.allowDragging()) {\n doClick = Math.abs(d.sx - d.fx) < 1 && Math.abs(d.sy - d.fy) < 1;\n dragEnd(d);\n\n const selection = context.selection();\n const isSelected = context.selected(d.props, selection as IVertex[]);\n if (isSelected) {\n selection\n .filter(v => v.id !== d.props.id)\n .forEach(v => {\n const n = context._graphData.vertex(v.id);\n dragEnd(n);\n });\n } else if (context.dragSingleNeighbors()) {\n context._graphData.singleNeighbors(d.id).forEach(dragEnd);\n }\n\n d3Select(this).classed(\"grabbed\", false);\n }\n if (doClick) {\n context._selection.click({\n _id: d.id,\n element: () => d.element\n }, d3Event().sourceEvent);\n context.selectionChanged();\n const selected = d.element.classed(\"selected\");\n context.vertex_click(d.props.origData || d.props, \"\", selected);\n const doClickTime = Date.now();\n if (doClickTime - context._prevDoClickTime < context.doubleClickMaxDelay()) {\n context.vertex_dblclick(d.props.origData || d.props, \"\", selected);\n }\n context._prevDoClickTime = doClickTime;\n }\n })\n .filter(() => true)\n ;\n this.zoomToFitLimit(1);\n }\n\n iconBarButtons(): Widget[] {\n return this._iconBar.buttons();\n }\n\n protected _categories: IconEx[] = [];\n categories(): IconEx[];\n categories(_: IconEx[]): this;\n categories(_?: IconEx[]): IconEx[] | this {\n if (_ === void 0) return this._categories;\n this._categories = _;\n return this;\n }\n\n protected _annotations: IconEx[] = [];\n annotations(): IconEx[];\n annotations(_: IconEx[]): this;\n annotations(_?: IconEx[]): IconEx[] | this {\n if (_ === void 0) return this._annotations;\n this._annotations = _;\n return this;\n }\n\n private _origData: IGraphData2 = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n data(): IGraphData2;\n data(_: IGraphData2, merge?: boolean): this;\n data(_?: IGraphData2, merge?: boolean): IGraphData2 | this {\n if (_ === void 0) return this._origData;\n this._origData = _;\n\n this._graphData.mergeSubgraphs((_.subgraphs || []).map(sg => ({\n id: sg.id,\n props: sg\n })));\n\n this._graphData.mergeVertices((_.vertices || []).map(v => ({\n id: v.id,\n centroid: v.centroid,\n props: v\n })));\n\n this._graphData.mergeEdges(\n (_.edges || [])\n .filter(e => {\n return this._graphData.vertexExists(e.source.id) && this._graphData.vertexExists(e.target.id);\n })\n .map(e => ({\n id: e.id,\n props: e,\n source: this._graphData.vertex(e.source.id),\n target: this._graphData.vertex(e.target.id)\n }))\n );\n\n this._graphData.clearParents();\n (_.hierarchy ? _.hierarchy : []).forEach(h => {\n if (this._graphData.subgraphExists(h.child.id)) {\n this._graphData.subgraphParent(h.child.id, h.parent.id);\n } else if (this._graphData.vertexExists(h.child.id)) {\n this._graphData.vertexParent(h.child.id, h.parent.id);\n }\n });\n\n return this;\n }\n\n selected(vertex: IVertex, _?: Array<IVertex>): boolean {\n return (_ || this.selection()).some(n => n.id === vertex.id);\n }\n\n selection(_: Array<IVertex | ISubgraph | IEdge>): this;\n selection(): Array<IVertex | ISubgraph | IEdge>;\n selection(_?: Array<IVertex | ISubgraph | IEdge>): Array<IVertex | ISubgraph | IEdge> | this {\n if (!arguments.length) return this._selection.get().map(item => this._graphData.item(item._id).props);\n this._selection.set(_.map(item => {\n const vp = this._graphData.item(item.id);\n return {\n _id: vp.id,\n element: () => vp.element\n };\n }));\n return this;\n }\n\n graphData(): GraphCollection<VertexPlaceholder, EdgePlaceholder> {\n return this._graphData;\n }\n\n resetLayout() {\n delete this._prevLayout;\n return this;\n }\n\n layoutRunning() {\n return this._layoutAlgo && this._layoutAlgo.running();\n }\n\n protected _layoutAlgo: ILayout = new Null(this);\n layoutAlgo(layout: ILayout) {\n if (this._layoutAlgo) {\n this._layoutAlgo.stop();\n }\n this._layoutAlgo = layout;\n return this._layoutAlgo.start().then(() => {\n this.updateIconBar();\n if (this.applyScaleOnLayout()) {\n // Wait for any transitions to finish ---\n setTimeout(() => {\n this.zoomToFit();\n }, this.transitionDuration());\n }\n });\n }\n\n layoutClick(layout: GraphLayoutType) {\n if (this.layoutRunning()) {\n this._layoutAlgo.stop();\n this.updateIconBar();\n } else {\n delete this._prevLayout;\n this\n .layout(layout)\n .render()\n ;\n }\n }\n\n updateIconBarItem(tb: ToggleButton, tbLayout: GraphLayoutType) {\n const layout = this.layout();\n const running = this._layoutAlgo && this._layoutAlgo.running();\n tb.enabled(!running || layout === tbLayout).selected(running && layout === tbLayout).render();\n }\n\n updateIconBar() {\n super.updateIconBar();\n this.updateIconBarItem(this._toggleHierarchy, \"Hierarchy\");\n this.updateIconBarItem(this._toggleDot, \"DOT\");\n this.updateIconBarItem(this._toggleForceDirected, \"ForceDirected\");\n this.updateIconBarItem(this._toggleNeato, \"Neato\");\n this.updateIconBarItem(this._toggleFDP, \"FDP\");\n this.updateIconBarItem(this._toggleForceDirected2, \"ForceDirected2\");\n this.updateIconBarItem(this._toggleCircle, \"Circle\");\n this.updateIconBarItem(this._toggleTwoPI, \"TwoPI\");\n this.updateIconBarItem(this._toggleCirco, \"Circo\");\n this.updateIconBarItem(this._toggleT, \"Tree\");\n this.updateIconBarItem(this._toggleRT, \"RadialTree\");\n this.updateIconBarItem(this._toggleD, \"Dendrogram\");\n this.updateIconBarItem(this._toggleRD, \"RadialDendrogram\");\n }\n\n getNeighborMap(vertex: VertexPlaceholder) {\n const vertices = {};\n const edges = {};\n\n if (vertex) {\n const nedges = this._graphData.vertexEdges(vertex.id);\n for (let i = 0; i < nedges.length; ++i) {\n const edge = this._graphData.edge(nedges[i].id);\n edges[edge.id] = edge;\n if (edge.source.id !== vertex.id) {\n vertices[edge.source.id] = edge.source;\n }\n if (edge.target.id !== vertex.id) {\n vertices[edge.target.id] = edge.target;\n }\n }\n }\n\n return {\n vertices,\n edges\n };\n }\n\n centerOnItem(id: string) {\n const item = this._graphData.item(id);\n let x;\n let y;\n if (this._graphData.isSubgraph(item) || this._graphData.isVertex(item)) {\n x = item.x;\n y = item.y;\n }\n if (this._graphData.isEdge(item)) {\n [x, y] = [0, 0]; // center(item.points);\n }\n if (x !== undefined && y !== undefined) {\n const bbox = item.element.node().getBBox();\n if (this._graphData.isVertex(item)) {\n const proj = this.projectPlacholder(item);\n x = proj.x;\n y = proj.y;\n } else if (this._graphData.isSubgraph(item)) {\n x = this.project(item.x);\n y = this.project(item.y);\n }\n const deltaX = bbox.x + bbox.width / 2;\n const deltaY = bbox.y + bbox.height / 2;\n const itemBBox = {\n x: x + deltaX - bbox.width / 2,\n y: y + deltaY - bbox.height / 2,\n width: bbox.width,\n height: bbox.height\n };\n this.centerOnBBox(itemBBox);\n }\n }\n\n hideVertex(id: string): this {\n const item = this._graphData.item(id);\n if (this._graphData.isVertex(item)) {\n item.props.hidden = true;\n }\n return this;\n }\n\n showVertex(id: string): this {\n const item = this._graphData.item(id);\n if (this._graphData.isVertex(item)) {\n item.props.hidden = false;\n }\n return this;\n }\n\n protected highlight = {\n zoom: 1.1,\n opacity: 0.33,\n edge: \"1.25px\"\n };\n\n highlightVerticies(vertexMap?: { [id: string]: boolean }) {\n const context = this;\n const vertexElements = this._vertexG.selectAll<SVGGElement, VertexPlaceholder>(\".graphVertex\");\n const forceLabelOnHighlight = !context.showVertexLabels() && context.showVertexLabelsOnHighlight();\n vertexElements\n .classed(\"graphVertex-highlighted\", d => !vertexMap || vertexMap[d.id])\n .style(\"filter\", d => vertexMap && vertexMap[d.id] ? \"url(#\" + this.id() + \"_glow)\" : null)\n .each(function (d) {\n if (forceLabelOnHighlight) {\n const props = context.calcProps(\n d.centroid,\n {\n showLabel: !!(vertexMap && vertexMap[d.id]),\n ...context.vertexMapper(d.props, d.props.origData)\n }\n );\n render(\n d.centroid ? context._centroidRenderer : context._vertexRenderer,\n props,\n this\n );\n }\n })\n .transition().duration(this.transitionDuration())\n .on(\"end\", function (d) {\n if (vertexMap && vertexMap[d.id]) {\n if (d.element.node() && d.element.node().parentNode) {\n d.element.node().parentNode.appendChild(d.element.node());\n }\n }\n })\n .style(\"opacity\", function (d) {\n if (d.props.hidden) return 0;\n if (!vertexMap || vertexMap[d.id]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightEdges(edgeMap) {\n const context = this;\n const edgeElements = this._edgeG.selectAll<SVGGElement, EdgePlaceholder>(\".graphEdge\");\n edgeElements\n .classed(\"graphEdge-highlighted\", function (d) { return !edgeMap || edgeMap[d.id]; })\n .style(\"stroke-width\", function (o) {\n if (edgeMap && edgeMap[o.id]) {\n return context.highlight.edge;\n }\n return context.edgeStrokeWidth() + \"px\";\n }).transition().duration(this.transitionDuration())\n .style(\"opacity\", function (o) {\n if (o.source.props.hidden || o.target.props.hidden) return 0;\n if (!edgeMap || edgeMap[o.id]) {\n return 1;\n }\n return context.highlight.opacity;\n })\n ;\n return this;\n }\n\n highlightVertex(_element, d: VertexPlaceholder) {\n if (this.highlightOnMouseOverVertex()) {\n if (d) {\n const highlight = this.getNeighborMap(d);\n highlight.vertices[d.id] = d;\n this.highlightVerticies(highlight.vertices);\n this.highlightEdges(highlight.edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n highlightEdge(_element, d: EdgePlaceholder) {\n if (this.highlightOnMouseOverEdge()) {\n if (d) {\n const vertices = {};\n vertices[d.source.id] = d.source;\n vertices[d.target.id] = d.target;\n const edges = {};\n edges[d.id] = d;\n this.highlightVerticies(vertices);\n this.highlightEdges(edges);\n } else {\n this.highlightVerticies(null);\n this.highlightEdges(null);\n }\n }\n }\n\n moveSubgraphPlaceholder(sp: SubgraphPlaceholder, transition: boolean): this {\n const x = this.project(sp.x);\n const y = this.project(sp.y);\n const width = this.project(sp.props.width, true);\n const height = this.project(sp.props.height, true);\n if (sp.element) {\n // TODO: any should not be needed (tsc issue?)\n (transition ? sp.element.transition() as any : sp.element)\n .attr(\"transform\", `translate(${x} ${y})`)\n .each(function (d) {\n render(Subgraph, { ...d.props, width, height }, this);\n })\n ;\n }\n return this;\n }\n\n moveEdgePlaceholder(ep: EdgePlaceholder, transition: boolean): this {\n const edgeLayout = this._layoutAlgo.edgePath(ep, this.edgeArcDepth());\n if (ep.elementPath) {\n // TODO: any should not be needed (tsc issue?)\n (transition ? ep.elementPath.transition() as any : ep.elementPath)\n .attr(\"d\", edgeLayout.path)\n .attr(\"stroke-dasharray\", d => d.props.strokeDasharray)\n ;\n }\n\n if (ep.elementText) {\n const lines = ep.props.label?.split(\"\\n\") ?? [];\n ep.elementText\n .selectAll(\".textLine\")\n .data(lines, (d: string) => d)\n .join(\n enter => enter.append(\"tspan\")\n .attr(\"class\", \"textLine\")\n .attr(\"x\", 0),\n update => update\n .attr(\"dy\", (d, i) => `${i}em`)\n .text(d => d),\n exit => exit.remove()\n )\n ;\n // TODO: any should not be needed (tsc issue?)\n (transition ? ep.elementText.transition() as any : ep.elementText)\n .attr(\"transform\", `translate(${edgeLayout.labelPos[0]} ${edgeLayout.labelPos[1]})`)\n .attr(\"font-family\", d => d.props.fontFamily || null)\n ;\n }\n return this;\n }\n\n moveVertexPlaceholder(vp: VertexPlaceholder, transition: boolean, moveNeighbours: boolean): this {\n const { x, y } = this.projectPlacholder(vp);\n vp.element && (transition ? vp.element.transition() as unknown as Selection<SVGPathElement, EdgePlaceholder, SVGGElement, any> : vp.element)\n .attr(\"transform\", `translate(${x} ${y})`)\n ;\n if (moveNeighbours) {\n this._graphData.vertexEdges(vp.id).forEach(e => this.moveEdgePlaceholder(e, transition));\n }\n return this;\n }\n\n moveSubgraphs(transition: boolean): this {\n this._graphData.allSubgraphs().forEach(s => this.moveSubgraphPlaceholder(s, transition));\n return this;\n }\n\n moveEdges(transition: boolean): this {\n this._graphData.allEdges().forEach(e => this.moveEdgePlaceholder(e, transition));\n return this;\n }\n\n moveVertices(transition: boolean): this {\n this._graphData.allVertices().forEach(v => this.moveVertexPlaceholder(v, transition, false));\n return this;\n }\n\n project(pos: number, clip: boolean = false) {\n const rf = 10;\n pos = pos !== undefined ? pos : 0;\n let scale = this._transformScale;\n if (clip) {\n if (this._transformScale > this.maxScale() + (this._transformScale - this.maxScale()) / 2) {\n scale = this.maxScale() + (this._transformScale - this.maxScale()) / 2;\n } else if (this._transformScale < this.minScale() - (this._transformScale - this.minScale()) / 13) {\n // scale = this.minScale() - (this._transformScale - this.minScale()) / 13;\n }\n }\n return Math.round(pos * scale * rf) / rf;\n }\n\n rproject(pos: number) {\n const rf = 10;\n pos = pos !== undefined ? pos : 0;\n return Math.round(pos / this._transformScale * rf) / rf;\n }\n\n projectPlacholder(vp: VertexPlaceholder) {\n return {\n x: this.project(vp.fx !== undefined ? vp.fx : vp.x),\n y: this.project(vp.fy !== undefined ? vp.fy : vp.y)\n };\n }\n\n categoryID(id: string | number, prefix: \"cat\" | \"ann\" = \"cat\"): string {\n return id === undefined || id === \"\" ? \"\" : `${prefix}${this.id()}_${id}`;\n }\n\n updateCategories() {\n render(Icons, {\n icons: this._categories.map((c): IconEx => ({\n ...c,\n id: this.categoryID(c.id),\n fill: c.fill || \"transparent\",\n imageCharFill: c.imageCharFill || this._catPalette(c.id)\n }))\n }, this._svgDefsCat.node());\n }\n\n updateAnnotations() {\n render(Icons, {\n icons: this._annotations.map((c): IconEx => ({\n ...c,\n id: this.categoryID(c.id, \"ann\"),\n shape: c.shape || \"square\",\n height: c.height || 12,\n fill: c.fill || this._catPalette(c.id)\n }))\n }, this._svgDefsAnn.node());\n }\n\n updateEdges(): this {\n const context = this;\n this._edgeG.selectAll(\".graphEdge\")\n .data(this._graphData.allEdges(), (d: EdgePlaceholder) => d.id)\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"graphEdge\")\n .on(\"click.selectionBag\", function (d) {\n context._selection.click({\n _id: d.id,\n element: () => d.element\n }, d3Event());\n context.selectionChanged();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n context.edge_click(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseover\", function (d) {\n Utility.safeRaise(this);\n context.edge_mouseover(d3Select(this), d);\n })\n .on(\"mouseout\", function (d) {\n context.edge_mouseout(d3Select(this), d);\n })\n .each(function (d) {\n d.element = d3Select(this);\n d.elementPath = d.element.append(\"path\");\n d.elementText = d.element.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n ;\n })\n ,\n update => update\n .attr(\"opacity\", d => d.source.props.hidden || d.target.props.hidden ? 0 : 1)\n .classed(\"hide-text\", !context.showEdgeLabels())\n ,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .style(\"stroke\", d => {\n return d.props?.color ?? this.edgeColor();\n })\n .style(\"stroke-width\", this.edgeStrokeWidth() + \"px\")\n ;\n return this;\n }\n\n private _centroidRenderer: React.FunctionComponent<Vertex> = Vertex;\n centroidRenderer(): React.FunctionComponent;\n centroidRenderer(_: React.FunctionComponent): this;\n centroidRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n if (!arguments.length) return this._centroidRenderer;\n this._centroidRenderer = _;\n return this;\n }\n\n private _vertexRenderer: React.FunctionComponent<Vertex> = Vertex;\n vertexRenderer(): React.FunctionComponent;\n vertexRenderer(_: React.FunctionComponent): this;\n vertexRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n if (!arguments.length) return this._vertexRenderer;\n this._vertexRenderer = _;\n return this;\n }\n\n vertexMapper(props: IVertex, origRow: any): Vertex | IVertex3 {\n return {\n ...props,\n categoryID: this.categoryID(props.categoryID),\n annotationIDs: props.annotationIDs ? props.annotationIDs.map(a => this.categoryID(a, \"ann\")) : []\n };\n }\n\n updateVertices(): this {\n const context = this;\n this._vertexG.selectAll(\".graphVertex\")\n .data(this._graphData.allVertices(), (d: VertexPlaceholder) => d.id)\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"graphVertex\")\n .on(\"dblclick\", function (this: SVGElement, d) {\n d3Event().stopPropagation();\n })\n .on(\"mousein\", function (d) {\n Utility.safeRaise(this);\n context.highlightVertex(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n context.vertex_mousein(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseover\", function (d) {\n Utility.safeRaise(this);\n context.highlightVertex(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n if (d.props.tooltip) {\n context._tooltip\n .tooltipHTML(context.tooltipHTML.bind(context))\n .triggerElement(d.element)\n .tooltipWidth(context.tooltipWidth())\n .tooltipHeight(context.tooltipHeight())\n .enablePointerEvents(context.enableTooltipPointerEvents())\n .closeDelay(context.tooltipCloseDelay())\n .direction(\"n\")\n .data(d)\n .visible(true)\n .render()\n ;\n }\n context.vertex_mouseover(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseout\", function (d) {\n context.highlightVertex(null, null);\n const selected = d.element.classed(\"selected\");\n context.vertex_mouseout(d.props.origData || d.props, \"\", selected);\n if (d.props.tooltip) {\n context._tooltip.mouseout();\n }\n })\n .call(this._dragHandler)\n .each(function (d) {\n d.element = d3Select(this);\n }),\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .classed(\"centroid\", d => d.centroid)\n .attr(\"opacity\", d => d.props.hidden ? 0 : 1)\n .attr(\"filter\", d => d.centroid ? \"url(#\" + this.id() + \"_glow)\" : null)\n .each(function (this: SVGGElement, d) {\n const props = context.calcProps(\n d.centroid,\n {\n showLabel: context.showVertexLabels(),\n ...context.vertexMapper(d.props, d.props.origData)\n }\n );\n render(\n d.centroid ? context._centroidRenderer : context._vertexRenderer,\n props,\n this\n );\n })\n ;\n return this;\n }\n\n calcProps(isCentroid: boolean, props) {\n if (!props.icon) props.icon = {};\n if (isCentroid) {\n props.textHeight = props.textHeight ? props.textHeight : this.centroidTextHeight() * this.centroidScale();\n props.textPadding = props.textPadding ? props.textPadding : this.centroidTextPadding() * this.centroidScale();\n props.textFontFamily = props.textFontFamily ? props.textFontFamily : this.centroidLabelFontFamily();\n props.icon.height = props.icon.height ? props.icon.height : this.centroidIconHeight() * this.centroidScale();\n props.icon.padding = props.icon.padding ? props.icon.padding : this.centroidIconPadding() * this.centroidScale();\n props.icon.strokeWidth = props.icon.strokeWidth ? props.icon.strokeWidth : this.centroidIconStrokeWidth();\n props.icon.imageFontFamily = props.icon.imageFontFamily ? props.icon.imageFontFamily : this.centroidIconFontFamily();\n } else {\n props.textHeight = props.textHeight ? props.textHeight : this.vertexTextHeight();\n props.textPadding = props.textPadding ? props.textPadding : this.vertexTextPadding();\n props.textFontFamily = props.textFontFamily ? props.textFontFamily : this.vertexLabelFontFamily();\n props.icon.height = props.icon.height ? props.icon.height : this.vertexIconHeight();\n props.icon.padding = props.icon.padding ? props.icon.padding : this.vertexIconPadding();\n props.icon.strokeWidth = props.icon.strokeWidth ? props.icon.strokeWidth : this.vertexIconStrokeWidth();\n props.icon.imageFontFamily = props.icon.imageFontFamily ? props.icon.imageFontFamily : this.vertexIconFontFamily();\n }\n const text = props.icon.imageChar;\n const fontFamily = props.icon.imageFontFamily;\n const fontSize = props.icon.height - props.icon.padding;\n const rect = this.textRect(text, fontFamily, fontSize);\n\n props.icon.yOffset = -(rect.top - (fontSize / 2)) - (rect.height / 2) + (props.icon.padding > 0 ? fontSize / props.icon.padding / 2 : 0);\n return props;\n }\n\n hasSubgraphs() {\n switch (this.layout()) {\n case \"DOT\":\n case \"Hierarchy\":\n return true;\n }\n return false;\n }\n\n updateSubgraphs(): this {\n const context = this;\n this._subgraphG.selectAll(\".subgraphPlaceholder\")\n .data(this.hasSubgraphs() ? this._graphData.allSubgraphs() : [], (d: SubgraphPlaceholder) => d.id)\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"subgraphPlaceholder\")\n .on(\"click.selectionBag\", function (d) {\n context._selection.click({\n _id: d.id,\n element: () => d.element\n }, d3Event());\n context.selectionChanged();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n context.subgraph_click(d.props.origData || d.props, \"\", selected);\n })\n .on(\"mouseover\", function () {\n Utility.safeRaise(this);\n })\n .each(function (d) {\n d.element = d3Select(this);\n })\n ,\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .transition()\n .style(\"opacity\", 0)\n .remove()\n )\n .each(function (d) {\n context.moveSubgraphPlaceholder(d, false);\n })\n ;\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n const svg = this.locateSVGNode(domNode);\n this._svgDefs = d3Select(svg).select<SVGDefsElement>(\"defs\");\n this._centroidFilter = new SVGGlowFilter(this._svgDefs, this._id + \"_glow\");\n\n this._svgDefsCat = this._svgDefs.append(\"g\");\n this._svgDefsAnn = this._svgDefs.append(\"g\");\n this._subgraphG = this._renderElement.append(\"g\");\n this._edgeG = this._renderElement.append(\"g\");\n this._vertexG = this._renderElement.append(\"g\");\n\n this._tooltip.target(domNode);\n\n this.on(\"startMarqueeSelection\", () => {\n }).on(\"updateMarqueeSelection\", rect => {\n const vertices: VertexPlaceholder[] = this._graphData.allVertices().filter(v => v.x >= rect.x && v.x <= rect.x + rect.width && v.y >= rect.y && v.y <= rect.y + rect.height);\n this.selection(vertices.map(v => v.props));\n }).on(\"endMarqueeSelection\", () => {\n this.selectionChanged();\n });\n }\n\n protected forceDirectedOptions(): FDOptions {\n return {\n alpha: this.forceDirectedAlpha(),\n alphaMin: this.forceDirectedAlphaMin(),\n alphaDecay: this.forceDirectedAlphaDecay(),\n velocityDecay: this.forceDirectedVelocityDecay(),\n repulsionStrength: this.forceDirectedRepulsionStrength(),\n iterations: this.forceDirectedIterations(),\n linkDistance: this.forceDirectedLinkDistance(),\n linkStrength: this.forceDirectedLinkStrength(),\n pinCentroid: this.forceDirectedPinCentroid(),\n forceStrength: this.forceDirectedForceStrength(),\n distanceMin: this.forceDirectedMinDistance(),\n distanceMax: this.forceDirectedMaxDistance(),\n };\n }\n\n private layoutOptions(layout: GraphLayoutType) {\n switch (layout) {\n case \"ForceDirected\":\n case \"ForceDirected2\":\n case \"ForceDirectedHybrid\":\n return this.forceDirectedOptions();\n case \"Hierarchy\":\n return {\n rankdir: this.hierarchyRankDirection(),\n nodesep: this.hierarchyNodeSeparation(),\n edgesep: this.hierarchyEdgeSeparation(),\n ranksep: this.hierarchyRankSeparation(),\n digraph: this.hierarchyDigraph()\n };\n case \"Tree\":\n case \"Dendrogram\":\n return { rankdir: this.treeRankDirection() };\n case \"DOT\":\n case \"Neato\":\n case \"FDP\":\n case \"TwoPI\":\n case \"Circo\":\n return this.wasmFolder() || wasmFolder;\n case \"None\":\n case \"Circle\":\n case \"RadialTree\":\n case \"RadialDendrogram\":\n default:\n return undefined;\n }\n }\n\n private _prevLayout: string;\n updateLayout() {\n const layout = this.layout();\n const options: any = this.layoutOptions(layout);\n const hash = hashSum([layout, options]);\n if (this._prevLayout !== hash) {\n this._prevLayout = hash;\n switch (layout) {\n case \"None\":\n this.layoutAlgo(new Null(this));\n break;\n case \"Circle\":\n this.layoutAlgo(new Circle(this));\n break;\n case \"ForceDirected\":\n this.layoutAlgo(new ForceDirected(this, options));\n break;\n case \"ForceDirected2\":\n this.layoutAlgo(new ForceDirectedAnimated(this, options));\n break;\n case \"ForceDirectedHybrid\":\n this.layoutAlgo(new ForceDirected(this, options)).then(() => {\n this.layoutAlgo(new ForceDirectedAnimated(this, options));\n });\n break;\n case \"Hierarchy\":\n this.layoutAlgo(new Dagre(this, options));\n break;\n case \"DOT\":\n this.layoutAlgo(new Graphviz(this, \"dot\", options));\n break;\n case \"Tree\":\n this.layoutAlgo(new Tree(this, options));\n break;\n case \"RadialTree\":\n this.layoutAlgo(new RadialTree(this));\n break;\n case \"Dendrogram\":\n this.layoutAlgo(new Dendrogram(this, options));\n break;\n case \"RadialDendrogram\":\n this.layoutAlgo(new RadialDendrogram(this));\n break;\n case \"Neato\":\n this.layoutAlgo(new Graphviz(this, \"neato\", options));\n break;\n case \"FDP\":\n this.layoutAlgo(new Graphviz(this, \"fdp\", options));\n break;\n case \"TwoPI\":\n this.layoutAlgo(new Graphviz(this, \"twopi\", options));\n break;\n case \"Circo\":\n this.layoutAlgo(new Graphviz(this, \"circo\", options));\n break;\n }\n }\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._centroidFilter.update(this.centroidColor());\n this._renderElement.classed(\"allowDragging\", this.allowDragging());\n\n this.updateCategories();\n this.updateAnnotations();\n\n this.updateSubgraphs();\n this.updateVertices();\n this.updateEdges();\n\n this.updateLayout();\n\n this.updateIconBar();\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n this._tooltip.target(null);\n }\n\n render(callback?: (w: Widget) => void): this {\n this.progress(\"start\");\n super.render(w => {\n this.progress(\"stop\");\n if (callback) {\n callback(w);\n }\n });\n return this;\n }\n\n private _prevWidth;\n private _prevHeight;\n private _prevTransformScale;\n private _transformScale = 1;\n zoomed(transform) {\n super.zoomed(transform);\n const { width, height } = this.size();\n\n if (transform.k < this.minScale()) {\n this._edgeG.attr(\"transform\", `scale(${this.minScale() / transform.k})`);\n this._subgraphG.attr(\"transform\", `scale(${this.minScale() / transform.k})`);\n this._vertexG.attr(\"transform\", `scale(${this.minScale() / transform.k})`);\n this._transformScale = transform.k / this.minScale();\n } else if (transform.k > this.maxScale()) {\n this._edgeG.attr(\"transform\", `scale(${this.maxScale() / transform.k})`);\n this._subgraphG.attr(\"transform\", `scale(${this.maxScale() / transform.k})`);\n this._vertexG.attr(\"transform\", `scale(${this.maxScale() / transform.k})`);\n this._transformScale = transform.k / this.maxScale();\n } else {\n this._transformScale = 1;\n this._edgeG.attr(\"transform\", null);\n this._subgraphG.attr(\"transform\", null);\n this._vertexG.attr(\"transform\", null);\n }\n\n if (this._prevTransformScale !== this._transformScale ||\n this._prevWidth !== width ||\n this._prevHeight !== height) {\n this._prevTransformScale = this._transformScale;\n this._prevWidth = width;\n this._prevHeight = height;\n this\n .moveSubgraphs(false)\n .moveVertices(false)\n .moveEdges(false)\n ;\n }\n }\n\n // Events ---\n centroids(): VertexPlaceholder[] {\n return this._graphData.allVertices().filter(vp => !!vp.centroid);\n }\n\n selectionChanged() {\n if (this.highlightSelectedPathToCentroid()) {\n const highlightedVertices = {};\n this.centroids().forEach(centroid => {\n this.selection().forEach(selection => {\n const { ids, len } = this._graphData.dijkstra(centroid.id, selection.id);\n if (len) {\n ids.forEach(id => {\n highlightedVertices[id] = true;\n });\n }\n });\n });\n this._edgeG.selectAll(\".graphEdge\")\n // .classed(\"shortest-path\", d => highlightedEdges[d.id()] === true)\n ;\n }\n }\n\n tooltipHTML(data) {\n return data.props.tooltip;\n }\n\n subgraph_click(row, _col, sel) {\n }\n\n vertex_click(row, _col, sel) {\n }\n\n vertex_dblclick(row, _col, sel) {\n }\n\n vertex_mousein(row, _col, sel) {\n }\n\n vertex_mouseover(row, _col, sel) {\n }\n\n vertex_mouseout(row, _col, sel) {\n }\n\n edge_click(row, _col, sel) {\n }\n\n edge_mouseover(element, d) {\n this.highlightEdge(element, d);\n }\n\n edge_mouseout(_element, _d) {\n this.highlightEdge(null, null);\n }\n\n progress(what: \"start\" | \"stop\" | \"layout-start\" | \"layout-tick\" | \"layout-stop\") {\n }\n}\nGraph2.prototype._class += \" graph_Graph2\";\n\nexport interface Graph2 {\n allowDragging(): boolean;\n allowDragging(_: boolean): this;\n dragSingleNeighbors(): boolean;\n dragSingleNeighbors(_: boolean): this;\n layout(): GraphLayoutType;\n layout(_: GraphLayoutType): this;\n applyScaleOnLayout(): boolean;\n applyScaleOnLayout(_: boolean): this;\n highlightOnMouseOverVertex(): boolean;\n highlightOnMouseOverVertex(_: boolean): this;\n highlightOnMouseOverEdge(): boolean;\n highlightOnMouseOverEdge(_: boolean): this;\n transitionDuration(): number;\n transitionDuration(_: number): this;\n\n centroidColor(): string;\n centroidColor(_: string): this;\n centroidScale(): number;\n centroidScale(_: number): this;\n centroidTextHeight(): number;\n centroidTextHeight(_: number): this;\n centroidTextPadding(): number;\n centroidTextPadding(_: number): this;\n centroidIconHeight(): number;\n centroidIconHeight(_: number): this;\n centroidIconPadding(): number;\n centroidIconPadding(_: number): this;\n centroidIconStrokeWidth(): number;\n centroidIconStrokeWidth(_: number): this;\n centroidIconFontFamily(): string;\n centroidIconFontFamily(_: string): this;\n centroidLabelFontFamily(): string;\n centroidLabelFontFamily(_: string): this;\n vertexTextHeight(): number;\n vertexTextHeight(_: number): this;\n vertexTextPadding(): number;\n vertexTextPadding(_: number): this;\n vertexIconHeight(): number;\n vertexIconHeight(_: number): this;\n vertexIconPadding(): number;\n vertexIconPadding(_: number): this;\n vertexIconStrokeWidth(): number;\n vertexIconStrokeWidth(_: number): this;\n vertexIconFontFamily(): string;\n vertexIconFontFamily(_: string): this;\n vertexLabelFontFamily(): string;\n vertexLabelFontFamily(_: string): this;\n highlightSelectedPathToCentroid(): boolean;\n highlightSelectedPathToCentroid(_: boolean): this;\n edgeArcDepth(): number;\n edgeArcDepth(_: number): this;\n minScale(): number;\n minScale(_: number): this;\n maxScale(): number;\n maxScale(_: number): this;\n showEdgeLabels(): boolean;\n showEdgeLabels(_: boolean): this;\n showEdgeLabelsOnHighlight(): boolean;\n showEdgeLabelsOnHighlight(_: boolean): this;\n showVertexLabels(): boolean;\n showVertexLabels(_: boolean): this;\n showVertexLabelsOnHighlight(): boolean;\n showVertexLabelsOnHighlight(_: boolean): this;\n\n hierarchyRankDirection(): \"TB\" | \"BT\" | \"LR\" | \"RL\";\n hierarchyRankDirection(_: \"TB\" | \"BT\" | \"LR\" | \"RL\"): this;\n hierarchyNodeSeparation(): number;\n hierarchyNodeSeparation(_: number): this;\n hierarchyEdgeSeparation(): number;\n hierarchyEdgeSeparation(_: number): this;\n hierarchyRankSeparation(): number;\n hierarchyRankSeparation(_: number): this;\n hierarchyDigraph(): boolean;\n hierarchyDigraph(_: boolean): this;\n\n forceDirectedAlpha(): number;\n forceDirectedAlpha(_: number): this;\n forceDirectedAlphaMin(): number;\n forceDirectedAlphaMin(_: number): this;\n forceDirectedAlphaDecay(): number;\n forceDirectedAlphaDecay(_: number): this;\n forceDirectedRepulsionStrength(): number;\n forceDirectedRepulsionStrength(_: number): this;\n forceDirectedVelocityDecay(): number;\n forceDirectedVelocityDecay(_: number): this;\n forceDirectedIterations(): number;\n forceDirectedIterations(_: number): this;\n forceDirectedLinkDistance(): number;\n forceDirectedLinkDistance(_: number): this;\n forceDirectedLinkStrength(): number;\n forceDirectedLinkStrength(_: number): this;\n forceDirectedPinCentroid(): boolean;\n forceDirectedPinCentroid(_: boolean): this;\n forceDirectedForceStrength(): number;\n forceDirectedForceStrength(_: number): this;\n forceDirectedMinDistance(): number;\n forceDirectedMinDistance(_: number): this;\n forceDirectedMaxDistance(): number;\n forceDirectedMaxDistance(_: number): this;\n\n treeRankDirection(): \"TB\" | \"LR\";\n treeRankDirection(_: \"TB\" | \"LR\"): this;\n\n edgeColor(): string;\n edgeColor(_: string): this;\n edgeStrokeWidth(): number;\n edgeStrokeWidth(_: number): this;\n tooltipWidth(): number;\n tooltipWidth(_: number): this;\n tooltipHeight(): number;\n tooltipHeight(_: number): this;\n enableTooltipPointerEvents(): boolean;\n enableTooltipPointerEvents(_: boolean): this;\n tooltipCloseDelay(): number;\n tooltipCloseDelay(_: number): this;\n doubleClickMaxDelay(): number;\n doubleClickMaxDelay(_: number): this;\n\n wasmFolder(): string;\n wasmFolder(_: string): this;\n}\n\nGraph2.prototype.publish(\"allowDragging\", true, \"boolean\", \"Allow Dragging of Vertices\");\nGraph2.prototype.publish(\"dragSingleNeighbors\", true, \"boolean\", \"Dragging a Vertex also moves its singleton neighbors\");\nGraph2.prototype.publish(\"layout\", \"ForceDirectedHybrid\", \"set\", \"Default Layout\", GraphLayoutTypeSet);\nGraph2.prototype.publish(\"scale\", \"100%\", \"set\", \"Zoom Level\", [\"all\", \"width\", \"selection\", \"100%\", \"90%\", \"75%\", \"50%\", \"25%\", \"10%\"]);\nGraph2.prototype.publish(\"applyScaleOnLayout\", false, \"boolean\", \"Shrink to fit on Layout\");\nGraph2.prototype.publish(\"highlightOnMouseOverVertex\", true, \"boolean\", \"Highlight Vertex on Mouse Over\");\nGraph2.prototype.publish(\"highlightOnMouseOverEdge\", true, \"boolean\", \"Highlight Edge on Mouse Over\");\nGraph2.prototype.publish(\"transitionDuration\", 250, \"number\", \"Transition Duration\");\nGraph2.prototype.publish(\"showEdges\", true, \"boolean\", \"Show Edges\");\nGraph2.prototype.publish(\"showEdgeLabels\", true, \"boolean\", \"Show Edge labels\");\nGraph2.prototype.publish(\"showEdgeLabelsOnHighlight\", true, \"boolean\", \"Show Edge labels when highlighted\");\nGraph2.prototype.publish(\"showVertexLabels\", true, \"boolean\", \"Show Vertex labels\");\nGraph2.prototype.publish(\"showVertexLabelsOnHighlight\", true, \"boolean\", \"Show Vertex labels when highlighted\");\nGraph2.prototype.publish(\"snapToGrid\", 0, \"number\", \"Snap to Grid\");\nGraph2.prototype.publish(\"selectionClearOnBackgroundClick\", false, \"boolean\", \"Clear selection on background click\");\nGraph2.prototype.publish(\"edgeArcDepth\", 8, \"number\", \"Edge Arc Depth\");\nGraph2.prototype.publish(\"edgeColor\", null, \"html-color\", \"Edge line stroke color\", null, { optional: true });\nGraph2.prototype.publish(\"edgeStrokeWidth\", 1, \"number\", \"Edge line stroke width (pixels)\");\nGraph2.prototype.publish(\"minScale\", 0.6, \"number\", \"Min scale size for text\");\nGraph2.prototype.publish(\"maxScale\", 1.0, \"number\", \"Max scale size for text\");\nGraph2.prototype.publish(\"tooltipWidth\", 256, \"number\", \"Tooltip width (pixels)\");\nGraph2.prototype.publish(\"tooltipHeight\", 128, \"number\", \"Tooltip width (pixels)\");\nGraph2.prototype.publish(\"enableTooltipPointerEvents\", false, \"boolean\", \"If true, tooltip will use the style: 'pointer-events: all'\");\nGraph2.prototype.publish(\"tooltipCloseDelay\", 0, \"number\", \"Number of milliseconds to wait before closing tooltip (cancelled on tooltip mouseover event)\");\nGraph2.prototype.publish(\"doubleClickMaxDelay\", 300, \"number\", \"Number of milliseconds to wait before a subsequent click is not considered a double click\");\n\nGraph2.prototype.publish(\"centroidColor\", \"#00A000\", \"html-color\", \"Centroid Glow Color\");\nGraph2.prototype.publish(\"centroidScale\", 1, \"number\", \"Centroid Scale\");\nGraph2.prototype.publish(\"centroidTextHeight\", 12, \"number\", \"Centroid Text Height\");\nGraph2.prototype.publish(\"centroidTextPadding\", 4, \"number\", \"Centroid Text Padding\");\nGraph2.prototype.publish(\"centroidIconHeight\", 50, \"number\", \"Centroid Icon Height\");\nGraph2.prototype.publish(\"centroidIconPadding\", 10, \"number\", \"Centroid Icon Padding\");\nGraph2.prototype.publish(\"centroidIconStrokeWidth\", 4, \"number\", \"Centroid Icon Stroke Width\");\nGraph2.prototype.publish(\"centroidIconFontFamily\", \"FontAwesome\", \"string\", \"Centroid Icon Font Family\");\nGraph2.prototype.publish(\"centroidLabelFontFamily\", \"FontAwesome\", \"string\", \"Centroid Label Font Family\");\nGraph2.prototype.publish(\"vertexTextHeight\", 10, \"number\", \"Vertex Text Height\");\nGraph2.prototype.publish(\"vertexTextPadding\", 4, \"number\", \"Vertex Text Padding\");\nGraph2.prototype.publish(\"vertexIconHeight\", 50, \"number\", \"Vertex Icon Height\");\nGraph2.prototype.publish(\"vertexIconPadding\", 10, \"number\", \"Vertex Icon Padding\");\nGraph2.prototype.publish(\"vertexIconStrokeWidth\", 0, \"number\", \"Vertex Icon Stroke Width\");\nGraph2.prototype.publish(\"vertexIconFontFamily\", \"FontAwesome\", \"string\", \"Vertex Icon Font Family\");\nGraph2.prototype.publish(\"vertexLabelFontFamily\", \"FontAwesome\", \"string\", \"Vertex Label Font Family\");\nGraph2.prototype.publish(\"highlightSelectedPathToCentroid\", true, \"boolean\", \"Highlight path to Center Vertex (for selected vertices)\");\n\nGraph2.prototype.publish(\"hierarchyRankDirection\", \"TB\", \"set\", \"Direction for Rank Nodes\", [\"TB\", \"BT\", \"LR\", \"RL\"], { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyNodeSeparation\", 50, \"number\", \"Number of pixels that separate nodes horizontally in the layout\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyEdgeSeparation\", 10, \"number\", \"Number of pixels that separate edges horizontally in the layout\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyRankSeparation\", 50, \"number\", \"Number of pixels between each rank in the layout\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\nGraph2.prototype.publish(\"hierarchyDigraph\", true, \"boolean\", \"Directional Graph2\", null, { disable: (w: Graph2) => w.layout() !== \"Hierarchy\" });\n\nGraph2.prototype.publish(\"forceDirectedAlpha\", 1, \"number\", \"Alpha\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedAlphaMin\", 0.001, \"number\", \"Min Alpha\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedAlphaDecay\", 0.0228, \"number\", \"Defaults to 1 - pow(alphaMin, 1 / 300)\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedRepulsionStrength\", -350, \"number\", \"Charge strength \", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedVelocityDecay\", 0.4, \"number\", \"Velocity Decay \", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedIterations\", 300, \"number\", \"Iterations\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedLinkDistance\", 300, \"number\", \"Target distance between linked nodes\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedLinkStrength\", 1, \"number\", \"Strength (rigidity) of links\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedPinCentroid\", false, \"boolean\", \"Pin centroid to center\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedForceStrength\", 0, \"number\", \"Strength of center force\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedMinDistance\", 1, \"number\", \"Min distance between nodes\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\nGraph2.prototype.publish(\"forceDirectedMaxDistance\", Infinity, \"number\", \"Max distance between nodes\", null, { disable: (w: Graph2) => w.layout().indexOf(\"ForceDirected\") !== 0 });\n\nGraph2.prototype.publish(\"treeRankDirection\", \"LR\", \"set\", \"Direction for Rank Nodes\", [\"TB\", \"LR\"], { disable: (w: Graph2) => w.layout() !== \"Tree\" && w.layout() !== \"Dendrogram\" });\n\nGraph2.prototype.publish(\"wasmFolder\", null, \"string\", \"WASM Folder\", null, { optional: true, disable: (w: Graph2) => [\"DOT\", \"Neato\", \"FDP\", \"TwoPI\", \"Circo\"].indexOf(w.layout()) < 0 });\n\nconst _origScale = Graph2.prototype.scale;\nGraph2.prototype.scale = function (_?, transitionDuration?) {\n const retVal = _origScale.apply(this, arguments);\n if (arguments.length) {\n this.zoomTo(_, transitionDuration);\n }\n return retVal;\n};\n\nexport function graphviz(dot: string, engine: Engine = \"dot\", _wasmFolder: string = wasmFolder) {\n return gvWorker({\n items: [],\n links: [],\n raw: dot\n }, {\n engine: engine,\n wasmFolder: _wasmFolder\n });\n}\n","import { PropertyExt, publish, Widget } from \"@hpcc-js/common\";\nimport { CentroidVertex3, Vertex3 } from \"@hpcc-js/react\";\nimport { compare2 } from \"@hpcc-js/util\";\nimport { Graph2 } from \"./graph\";\nimport { IEdge, IHierarchy, ISubgraph, IVertex } from \"./layouts/placeholders\";\n\nexport function toJsonObj(row, columns) {\n const retVal = {};\n columns.forEach((c, i) => retVal[c] = row[i]);\n return retVal;\n}\n\nexport class AnnotationColumn extends PropertyExt {\n\n @publish(\"\", \"set\", \"Annotation column (boolean)\", function (this: AnnotationColumn) { return this._owner.vertexColumns(); })\n columnID: publish<this, string>;\n @publish(\"\", \"string\", \"Annotation ID\")\n annotationID: publish<this, string>;\n\n protected _owner: DataGraph;\n owner(): DataGraph;\n owner(_: DataGraph): this;\n owner(_?: DataGraph): DataGraph | this {\n if (!arguments.length) return this._owner;\n this._owner = _;\n return this;\n }\n\n valid(): boolean {\n return !!this.columnID();\n }\n}\nAnnotationColumn.prototype._class += \" graph_AnnotationColumn\";\n\nexport class DataGraph extends Graph2 {\n\n @publish([], \"any\", \"Subgraph Columns\", null, { internal: true })\n subgraphColumns: publish<this, string[]>;\n @publish([], \"any\", \"Subgraphs\", null, { internal: true })\n subgraphs: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"string\", \"Subgraph ID column\")\n subgraphIDColumn: publish<this, string>;\n @publish(\"\", \"string\", \"Subgraph Label column\")\n subgraphLabelColumn: publish<this, string>;\n\n @publish([], \"any\", \"Vertex Columns\", null, { internal: true })\n vertexColumns: publish<this, string[]>;\n @publish([], \"any\", \"Vertices (Nodes)\", null, { internal: true })\n vertices: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Vertex Category ID column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCategoryColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex ID column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex label column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex centroid column (boolean)\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCentroidColumn: publish<this, string>;\n @publish(\"?\", \"string\", \"Vertex default FAChar\")\n vertexFAChar: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex FAChar column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexFACharColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex tooltip column\", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true })\n vertexTooltipColumn: publish<this, string>;\n @publish([], \"propertyArray\", \"Annotations\", null, { autoExpand: AnnotationColumn })\n vertexAnnotationColumns: publish<this, AnnotationColumn[]>;\n\n @publish([], \"any\", \"Edge columns\", null, { internal: true })\n edgeColumns: publish<this, string[]>;\n @publish([], \"any\", \"Edges (Edges)\", null, { internal: true })\n edges: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Edge ID column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge label column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge source ID column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeSourceColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge target ID column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeTargetColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge weight column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeWeightColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge color column\", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true })\n edgeColorColumn: publish<this, string>;\n\n @publish([], \"any\", \"Subgraph Columns\")\n hierarchyColumns: publish<this, string[]>;\n @publish([], \"any\", \"Subgraphs\")\n hierarchy: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"string\", \"Subgraph ID column\")\n hierarchyParentIDColumn: publish<this, string>;\n @publish(\"\", \"string\", \"Subgraph Label column\")\n hierarchyChildIDColumn: publish<this, string>;\n\n constructor() {\n super();\n this\n .vertexRenderer(Vertex3)\n .centroidRenderer(CentroidVertex3)\n .edgeColor(\"#287EC4\")\n .edgeStrokeWidth(2)\n .edgeArcDepth(0)\n ;\n }\n\n clear() {\n this._prevSubgraphs = [];\n this._masterSubgraphs = [];\n this._masterSubgraphsMap = {};\n\n this._prevVertices = [];\n this._masterVertices = [];\n this._masterVerticesMap = {};\n\n this._prevEdges = [];\n this._masterEdges = [];\n\n this._prevHierarchy = [];\n this._masterHierarchy = [];\n this._masterHierarchyMap = {};\n\n this._graphData.clear();\n this.resetLayout();\n }\n\n indexOf(columns: readonly string[], column: string, defColumn: string = \"\"): number {\n const retVal = columns.indexOf(column);\n return retVal >= 0 ? retVal : columns.indexOf(defColumn);\n }\n\n private _prevSubgraphs: readonly ISubgraph[] = [];\n private _masterSubgraphs: ISubgraph[] = [];\n private _masterSubgraphsMap: { [key: string]: ISubgraph } = {};\n mergeSubgraphs() {\n const columns = this.subgraphColumns();\n const idIdx = this.indexOf(columns, this.subgraphIDColumn(), \"id\");\n const labelIdx = this.indexOf(columns, this.subgraphLabelColumn(), \"label\");\n const subgraphs = this.subgraphs().map((sg): ISubgraph => {\n return {\n id: \"\" + sg[idIdx],\n text: \"\" + sg[labelIdx],\n origData: toJsonObj(sg, columns)\n };\n });\n const diff = compare2(this._prevSubgraphs, subgraphs, d => d.id);\n diff.exit.forEach(item => {\n this._masterSubgraphs = this._masterSubgraphs.filter(i => i.id !== item.id);\n delete this._masterSubgraphsMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterSubgraphs.push(item);\n this._masterSubgraphsMap[item.id] = item;\n });\n diff.update.forEach(item => {\n this._masterSubgraphsMap[item.id].origData = item.origData;\n });\n this._prevSubgraphs = subgraphs;\n }\n\n private _prevVertices: readonly IVertex[] = [];\n private _masterVertices: IVertex[] = [];\n private _masterVerticesMap: { [key: string]: IVertex } = {};\n mergeVertices() {\n const columns = this.vertexColumns();\n const annotationColumns = this.vertexAnnotationColumns();\n const catIdx = this.indexOf(columns, this.vertexCategoryColumn(), \"category\");\n const idIdx = this.indexOf(columns, this.vertexIDColumn(), \"id\");\n const labelIdx = this.indexOf(columns, this.vertexLabelColumn(), \"label\");\n const centroidIdx = this.indexOf(columns, this.vertexCentroidColumn(), \"centroid\");\n const faCharIdx = this.indexOf(columns, this.vertexFACharColumn(), \"faChar\");\n const vertexTooltipIdx = this.indexOf(columns, this.vertexTooltipColumn(), \"tooltip\");\n const annotationIdxs = annotationColumns.map(ac => this.indexOf(columns, ac.columnID(), \"\"));\n const vertices: IVertex[] = this.vertices().map((v): IVertex => {\n return {\n categoryID: \"\" + v[catIdx],\n id: \"\" + v[idIdx],\n text: \"\" + v[labelIdx],\n tooltip: \"\" + v[vertexTooltipIdx],\n origData: toJsonObj(v, columns),\n centroid: !!v[centroidIdx],\n icon: {\n imageChar: \"\" + (v[faCharIdx] || this.vertexFAChar())\n },\n annotationIDs: annotationIdxs.map((ai, i) => !!v[ai] ? annotationColumns[i].annotationID() : undefined).filter(a => !!a)\n };\n });\n const diff = compare2(this._prevVertices, vertices, d => d.id);\n diff.exit.forEach(item => {\n this._masterVertices = this._masterVertices.filter(i => i.id !== item.id);\n delete this._masterVerticesMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterVertices.push(item);\n this._masterVerticesMap[item.id] = item;\n });\n diff.update.forEach(item => {\n this._masterVerticesMap[item.id].origData = item.origData;\n });\n this._prevVertices = vertices;\n }\n\n protected _prevEdges: readonly IEdge[] = [];\n protected _masterEdges: IEdge[] = [];\n private _masterEdgesMap: { [key: string]: IEdge } = {};\n mergeEdges() {\n const columns = this.edgeColumns();\n const idIdx = this.indexOf(columns, this.edgeIDColumn(), \"id\");\n const sourceIdx = this.indexOf(columns, this.edgeSourceColumn(), \"source\");\n const targetIdx = this.indexOf(columns, this.edgeTargetColumn(), \"target\");\n const labelIdx = this.indexOf(columns, this.edgeLabelColumn(), \"label\");\n const weightIdx = this.indexOf(columns, this.edgeWeightColumn(), \"weight\");\n const colorIdx = this.indexOf(columns, this.edgeColorColumn(), \"color\");\n const edges: IEdge[] = this.edges().map(e => {\n const source = this._masterVerticesMap[\"\" + e[sourceIdx]];\n if (!source) console.error(`Invalid edge source entity \"${e[sourceIdx]}\" does not exist.`);\n const target = this._masterVerticesMap[\"\" + e[targetIdx]];\n if (!target) console.error(`Invalid edge target entity \"${e[targetIdx]}\" does not exist.`);\n return {\n type: \"edge\",\n id: idIdx >= 0 ? \"\" + e[idIdx] : \"\" + e[sourceIdx] + \"->\" + e[targetIdx],\n source,\n target,\n weight: +e[weightIdx] || 1,\n color: e[colorIdx] as string,\n label: labelIdx >= 0 ? (\"\" + e[labelIdx]) : \"\",\n origData: toJsonObj(e, columns)\n };\n }).filter(e => e.source && e.target);\n const diff = compare2(this._masterEdges, edges, d => d.id);\n diff.exit.forEach(item => {\n this._masterEdges = this._masterEdges.filter(i => i.id !== item.id);\n delete this._masterEdgesMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterEdges.push(item);\n this._masterEdgesMap[item.id] = item;\n\n });\n diff.update.forEach(item => {\n this._masterEdgesMap[item.id].origData = item.origData;\n });\n this._prevEdges = edges;\n }\n\n private _prevHierarchy: readonly IHierarchy[] = [];\n private _masterHierarchy: IHierarchy[] = [];\n private _masterHierarchyMap: { [key: string]: IHierarchy } = {};\n mergeHierarchy() {\n const columns = this.hierarchyColumns();\n const parentIDIdx = this.indexOf(columns, this.hierarchyParentIDColumn(), \"parentID\");\n const childIDIdx = this.indexOf(columns, this.hierarchyChildIDColumn(), \"childID\");\n const hierarchy: IHierarchy[] = this.hierarchy().map((h): IHierarchy => {\n return {\n id: \"\" + h[parentIDIdx] + \"=>\" + h[childIDIdx],\n parent: this._masterSubgraphsMap[\"\" + h[parentIDIdx]],\n child: this._masterSubgraphsMap[\"\" + h[childIDIdx]] || this._masterVerticesMap[\"\" + h[childIDIdx]]\n };\n });\n const diff = compare2(this._prevHierarchy, hierarchy, d => d.id);\n diff.exit.forEach(item => {\n this._masterHierarchy = this._masterHierarchy.filter(i => i.id !== item.id);\n delete this._masterHierarchyMap[item.id];\n });\n diff.enter.forEach(item => {\n this._masterHierarchy.push(item);\n this._masterHierarchyMap[item.id] = item;\n });\n this._prevHierarchy = hierarchy;\n }\n\n update(domNode, element) {\n this.mergeSubgraphs();\n this.mergeVertices();\n this.mergeEdges();\n this.mergeHierarchy();\n this.data({ subgraphs: this._masterSubgraphs, vertices: this._masterVertices, edges: this._masterEdges, hierarchy: this._masterHierarchy });\n super.update(domNode, element);\n }\n\n render(callback?: (w: Widget) => void): this {\n super.render(w => {\n if (callback) {\n callback(w);\n }\n });\n return this;\n }\n}\nDataGraph.prototype._class += \" graph_DataGraph\";\n","import { Palette, publish, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { compare2 } from \"@hpcc-js/util\";\nimport { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from \"d3-sankey\";\nimport { select as d3Select } from \"d3-selection\";\nimport { AnnotationColumn, toJsonObj } from \"./dataGraph\";\nimport { IEdge, IVertex } from \"./graph\";\n\nimport \"../../src/graph2/sankeyGraph.css\";\n\nexport class SankeyGraph extends SVGWidget {\n @publish([], \"any\", \"Vertex Columns\", null, { internal: true })\n vertexColumns: publish<this, string[]>;\n @publish([], \"any\", \"Vertices (Nodes)\", null, { internal: true })\n vertices: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Vertex Category ID column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCategoryColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex ID column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex label column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex centroid column (boolean)\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexCentroidColumn: publish<this, string>;\n @publish(\"?\", \"string\", \"Vertex default FAChar\")\n vertexFAChar: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex FAChar column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexFACharColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Vertex tooltip column\", function (this: SankeyGraph) { return this.vertexColumns(); }, { optional: true })\n vertexTooltipColumn: publish<this, string>;\n @publish([], \"propertyArray\", \"Annotations\", null, { autoExpand: AnnotationColumn })\n vertexAnnotationColumns: publish<this, AnnotationColumn[]>;\n\n @publish([], \"any\", \"Edge columns\", null, { internal: true })\n edgeColumns: publish<this, string[]>;\n @publish([], \"any\", \"Edges (Edges)\", null, { internal: true })\n edges: publish<this, Array<Array<string | number | boolean>>>;\n @publish(\"\", \"set\", \"Edge ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeIDColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge label column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeLabelColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge source ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeSourceColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge target ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeTargetColumn: publish<this, string>;\n @publish(\"\", \"set\", \"Edge target ID column\", function (this: SankeyGraph) { return this.edgeColumns(); }, { optional: true })\n edgeWeightColumn: publish<this, string>;\n\n protected _d3Sankey: any;\n protected _selection: any;\n _palette: any;\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n }\n\n private _prevVertices: readonly IVertex[] = [];\n private _masterVertices: IVertex[] = [];\n private _masterVerticesMap: { [key: string]: IVertex } = {};\n mergeVertices() {\n const columns = this.vertexColumns();\n const annotationColumns = this.vertexAnnotationColumns();\n const catIdx = this.indexOf(columns, this.vertexCategoryColumn(), \"category\");\n const idIdx = this.indexOf(columns, this.vertexIDColumn(), \"id\");\n const labelIdx = this.indexOf(columns, this.vertexLabelColumn(), \"label\");\n const centroidIdx = this.indexOf(columns, this.vertexCentroidColumn(), \"centroid\");\n const faCharIdx = this.indexOf(columns, this.vertexFACharColumn(), \"faChar\");\n const vertexTooltipIdx = this.indexOf(columns, this.vertexTooltipColumn(), \"tooltip\");\n const annotationIdxs = annotationColumns.map(ac => this.indexOf(columns, ac.columnID(), \"\"));\n const vertices: IVertex[] = this.vertices().map((v): IVertex => {\n return {\n categoryID: \"\" + v[catIdx],\n id: \"\" + v[idIdx],\n text: \"\" + v[labelIdx],\n tooltip: \"\" + v[vertexTooltipIdx],\n origData: toJsonObj(v, columns),\n centroid: !!v[centroidIdx],\n icon: {\n imageChar: \"\" + (v[faCharIdx] || this.vertexFAChar())\n },\n annotationIDs: annotationIdxs.map((ai, i) => !!v[ai] ? annotationColumns[i].annotationID() : undefined).filter(a => !!a)\n };\n });\n const diff = compare2(this._prevVertices, vertices, d => d.id);\n diff.exit.forEach(item => {\n this._masterVertices = this._masterVertices.filter(i => i.id !== item.id);\n });\n diff.enter.forEach(item => {\n this._masterVertices.push(item);\n this._masterVerticesMap[item.id] = item;\n });\n this._prevVertices = vertices;\n }\n\n indexOf(columns: readonly string[], column: string, defColumn: string = \"\"): number {\n const retVal = columns.indexOf(column);\n return retVal >= 0 ? retVal : columns.indexOf(defColumn);\n }\n\n protected _prevEdges: readonly IEdge[] = [];\n protected _masterEdges: IEdge[] = [];\n mergeEdges() {\n const columns = this.edgeColumns();\n const idIdx = this.indexOf(columns, this.edgeIDColumn(), \"id\");\n const sourceIdx = this.indexOf(columns, this.edgeSourceColumn(), \"source\");\n const targetIdx = this.indexOf(columns, this.edgeTargetColumn(), \"target\");\n const labelIdx = this.indexOf(columns, this.edgeLabelColumn(), \"label\");\n const weightIdx = this.indexOf(columns, this.edgeWeightColumn(), \"weight\");\n const edges: IEdge[] = this.edges().map(e => {\n const source = this._masterVerticesMap[\"\" + e[sourceIdx]];\n if (!source) console.error(`Invalid edge source entity \"${e[sourceIdx]}\" does not exist.`);\n const target = this._masterVerticesMap[\"\" + e[targetIdx]];\n if (!target) console.error(`Invalid edge target entity \"${e[targetIdx]}\" does not exist.`);\n return {\n type: \"edge\",\n id: idIdx >= 0 ? \"\" + e[idIdx] : \"\" + e[sourceIdx] + \"->\" + e[targetIdx],\n source,\n target,\n value: +e[weightIdx] || 0,\n label: labelIdx >= 0 ? (\"\" + e[labelIdx]) : \"\",\n origData: toJsonObj(e, columns)\n };\n }).filter(e => e.source && e.target);\n const diff = compare2(this._masterEdges, edges, d => d.id);\n diff.exit.forEach(item => {\n this._masterEdges = this._masterEdges.filter(i => i.id !== item.id);\n });\n diff.enter.forEach(item => {\n this._masterEdges.push(item);\n });\n this._prevEdges = edges;\n }\n\n sankeyData() {\n this.mergeVertices();\n this.mergeEdges();\n return {\n vertices: this._masterVertices,\n edges: this._masterEdges\n };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._d3Sankey = d3Sankey();\n this._selection.widgetElement(element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._palette = this._palette.switch(this.paletteID());\n\n const strokeWidth = this.vertexStrokeWidth();\n\n const sankeyData = this.sankeyData();\n this._d3Sankey\n .nodeId(d => d.id)\n .extent([\n [0, 0],\n [this.width(), this.height()]\n ])\n // .nodeAlign(sankeyCenter)\n // .nodeWidth(this.vertexWidth())\n // .nodePadding(this.vertexPadding())\n ;\n if (sankeyData.vertices.length > 0) {\n this._d3Sankey({\n nodes: sankeyData.vertices,\n links: sankeyData.edges\n });\n }\n const context = this;\n\n // Links --- \n const link = element.selectAll(\".link\").data(sankeyData.edges);\n link.enter().append(\"path\")\n .attr(\"class\", \"link\")\n .each(function () {\n d3Select(this)\n .append(\"title\")\n ;\n })\n .merge(link)\n .attr(\"d\", d3SankeyLinkHorizontal())\n .style(\"stroke-width\", (d: any) => Math.max(1, d.width))\n // .sort(function (a, b) { return b.width - a.width; })\n .select(\"title\")\n .text(function (d) {\n return d.source.text + \" → \" + d.target.text + \"\\n\" + d.value;\n })\n ;\n link.exit().remove();\n\n // Nodes ---\n const node = element.selectAll(\".node\").data(sankeyData.vertices);\n node.enter().append(\"g\")\n .attr(\"class\", \"node\")\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(d.origData, \"\", context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(d.origData, \"\", context._selection.selected(this));\n })\n .each(function () {\n const gElement = d3Select(this);\n gElement.append(\"rect\");\n gElement.append(\"text\");\n })\n /*\n .call(d3.behavior.drag()\n .origin(function (d) { return d; })\n .on(\"dragstart\", function () {\n this.parentNode.appendChild(this);\n })\n .on(\"drag\", dragmove)\n )\n */\n .merge(node)\n .attr(\"transform\", function (d) {\n let _x = 0;\n let _y = 0;\n if (d.x0) _x = d.x0;\n if (d.y0) _y = d.y0;\n return \"translate(\" + (_x + strokeWidth) + \",\" + (_y + strokeWidth) + \")\";\n })\n .each(function () {\n const n = d3Select(this);\n n.select(\"rect\")\n .attr(\"height\", (d: any) => {\n return d.y1 - d.y0;\n })\n .attr(\"width\", (d: any) => d.x1 - d.x0)\n .style(\"fill\", function (d: any) { return context._palette(d.categoryID); })\n .style(\"stroke\", function (d: any) { return context.vertexStrokeColor(); })\n .style(\"stroke-width\", function (d: any) { return strokeWidth; })\n .style(\"cursor\", (context.xAxisMovement() || context.yAxisMovement()) ? null : \"default\")\n ;\n n.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d: any) {\n return (d.y1 - d.y0) / 2;\n })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d: any) {\n return d.text;\n })\n .filter(function (d: any) {\n return d.x0 < context.width() / 2;\n })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n });\n node.exit().remove();\n\n /*\n function dragmove(d) {\n var gElement = d3.select(this);\n if (context.xAxisMovement()) {\n d.x = Math.max(0, Math.min(context.width() - d.dx, d3.event.x));\n }\n if (context.yAxisMovement()) {\n d.y = Math.max(0, Math.min(context.height() - d.dy, d3.event.y));\n }\n gElement.attr(\"transform\", \"translate(\" + d.x + \",\" + d.y + \")\");\n context._d3Sankey.relayout();\n link.attr(\"d\", context._d3SankeyPath);\n \n gElement.select(\"text\")\n .attr(\"x\", -6)\n .attr(\"y\", function (d) { return d.dy / 2; })\n .attr(\"dy\", \".35em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", null)\n .text(function (d) { return d.name; })\n .filter(function (d) { return d.x < context.width() / 2; })\n .attr(\"x\", 6 + context._d3Sankey.nodeWidth())\n .attr(\"text-anchor\", \"start\")\n ;\n }\n */\n }\n\n paletteID: { (): string; (_: string): SankeyGraph; };\n vertexStrokeWidth: { (): number; (_: number): SankeyGraph; };\n vertexStrokeColor: { (): string; (_: string): SankeyGraph; };\n vertexWidth: { (): number; (_: number): SankeyGraph; };\n vertexPadding: { (): number; (_: number): SankeyGraph; };\n xAxisMovement: { (): boolean; (_: boolean): SankeyGraph; };\n yAxisMovement: { (): boolean; (_: boolean): SankeyGraph; };\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n // Events ---\n click(row, column, selected) {\n console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n\n dblclick(row, column, selected) {\n console.log(\"Double Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n }\n}\nSankeyGraph.prototype._class += \" graph_SankeyGraph\";\nSankeyGraph.prototype.mixin(Utility.SimpleSelectionMixin);\n\nSankeyGraph.prototype._palette = Palette.ordinal(\"category10\");\n\nSankeyGraph.prototype.publish(\"paletteID\", \"category10\", \"set\", \"Color palette for this widget\", SankeyGraph.prototype._palette.switch());\nSankeyGraph.prototype.publish(\"vertexStrokeWidth\", 1, \"number\", \"Vertex Stroke Width\");\nSankeyGraph.prototype.publish(\"vertexStrokeColor\", \"darkgray\", \"string\", \"Vertex Stroke Color\");\nSankeyGraph.prototype.publish(\"vertexWidth\", 36, \"number\", \"Vertex Width\");\nSankeyGraph.prototype.publish(\"vertexPadding\", 20, \"number\", \"Vertex Padding\");\nSankeyGraph.prototype.publish(\"xAxisMovement\", false, \"boolean\", \"Enable x-axis movement\");\nSankeyGraph.prototype.publish(\"yAxisMovement\", false, \"boolean\", \"Enable y-axis movement\");\n"]}
|