!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.dagreD3=t()}}(function(){var t;return function n(t,e,r){function i(a,u){if(!e[a]){if(!t[a]){var c="function"==typeof require&&require;if(!u&&c)return c(a,!0);if(o)return o(a,!0);var s=new Error("Cannot find module '"+a+"'");throw s.code="MODULE_NOT_FOUND",s}var f=e[a]={exports:{}};t[a][0].call(f.exports,function(n){var e=t[a][1][n];return i(e?e:n)},f,f.exports,n,t,e,r)}return e[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(t,n,e){/**
 * @license
 * Copyright (c) 2012-2013 Chris Pettitt
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
n.exports={graphlib:t("./lib/graphlib"),dagre:t("./lib/dagre"),intersect:t("./lib/intersect"),render:t("./lib/render"),util:t("./lib/util"),version:t("./lib/version")}},{"./lib/dagre":8,"./lib/graphlib":9,"./lib/intersect":10,"./lib/render":25,"./lib/util":27,"./lib/version":28}],2:[function(t,n,e){function r(t,n,e,r){var i=t.append("marker").attr("id",n).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),o=i.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");a.applyStyle(o,e[r+"Style"]),e[r+"Class"]&&o.attr("class",e[r+"Class"])}function i(t,n,e,r){var i=t.append("marker").attr("id",n).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),o=i.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");a.applyStyle(o,e[r+"Style"]),e[r+"Class"]&&o.attr("class",e[r+"Class"])}function o(t,n,e,r){var i=t.append("marker").attr("id",n).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),o=i.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");a.applyStyle(o,e[r+"Style"]),e[r+"Class"]&&o.attr("class",e[r+"Class"])}var a=t("./util");n.exports={"default":r,normal:r,vee:i,undirected:o}},{"./util":27}],3:[function(t,n,e){function r(t,n){var e=n.nodes().filter(function(t){return i.isSubgraph(n,t)}),r=t.selectAll("g.cluster").data(e,function(t){return t});return r.selectAll("*").remove(),r.enter().append("g").attr("class","cluster").attr("id",function(t){var e=n.node(t);return e.id}).style("opacity",0),i.applyTransition(r,n).style("opacity",1),r.each(function(t){var e=n.node(t),r=d3.select(this);d3.select(this).append("rect");var i=r.append("g").attr("class","label");o(i,e,e.clusterLabelPos)}),r.selectAll("rect").each(function(t){var e=n.node(t),r=d3.select(this);i.applyStyle(r,e.style)}),i.applyTransition(r.exit(),n).style("opacity",0).remove(),r}var i=t("./util"),o=t("./label/add-label");n.exports=r},{"./label/add-label":18,"./util":27}],4:[function(t,n,e){"use strict";function r(t,n){var e=t.selectAll("g.edgeLabel").data(n.edges(),function(t){return a.edgeToId(t)}).classed("update",!0);return e.selectAll("*").remove(),e.enter().append("g").classed("edgeLabel",!0).style("opacity",0),e.each(function(t){var e=n.edge(t),r=o(u.select(this),n.edge(t),0,0).classed("label",!0),a=r.node().getBBox();e.labelId&&r.attr("id",e.labelId),i.has(e,"width")||(e.width=a.width),i.has(e,"height")||(e.height=a.height)}),a.applyTransition(e.exit(),n).style("opacity",0).remove(),e}var i=t("./lodash"),o=t("./label/add-label"),a=t("./util"),u=t("./d3");n.exports=r},{"./d3":7,"./label/add-label":18,"./lodash":21,"./util":27}],5:[function(t,n,e){"use strict";function r(t,n,e){var r=t.selectAll("g.edgePath").data(n.edges(),function(t){return h.edgeToId(t)}).classed("update",!0);return c(r,n),s(r,n),h.applyTransition(r,n).style("opacity",1),r.each(function(t){var e=d.select(this),r=n.edge(t);r.elem=this,r.id&&e.attr("id",r.id),h.applyClass(e,r["class"],(e.classed("update")?"update ":"")+"edgePath")}),r.selectAll("path.path").each(function(t){var e=n.edge(t);e.arrowheadId=f.uniqueId("arrowhead");var r=d.select(this).attr("marker-end",function(){return"url("+i(location.href,e.arrowheadId)+")"}).style("fill","none");h.applyTransition(r,n).attr("d",function(t){return o(n,t)}),h.applyStyle(r,e.style)}),r.selectAll("defs *").remove(),r.selectAll("defs").each(function(t){var r=n.edge(t),i=e[r.arrowhead];i(d.select(this),r.arrowheadId,r,"arrowhead")}),r}function i(t,n){var e=t.split("#")[0];return e+"#"+n}function o(t,n){var e=t.edge(n),r=t.node(n.v),i=t.node(n.w),o=e.points.slice(1,e.points.length-1);return o.unshift(l(r,o[0])),o.push(l(i,o[o.length-1])),a(e,o)}function a(t,n){var e=d.svg.line().x(function(t){return t.x}).y(function(t){return t.y});return f.has(t,"lineInterpolate")&&e.interpolate(t.lineInterpolate),f.has(t,"lineTension")&&e.tension(Number(t.lineTension)),e(n)}function u(t){var n=t.getBBox(),e=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(n.width/2,n.height/2);return{x:e.e,y:e.f}}function c(t,n){var e=t.enter().append("g").attr("class","edgePath").style("opacity",0);e.append("path").attr("class","path").attr("d",function(t){var e=n.edge(t),r=n.node(t.v).elem,i=f.range(e.points.length).map(function(){return u(r)});return a(e,i)}),e.append("defs")}function s(t,n){var e=t.exit();h.applyTransition(e,n).style("opacity",0).remove(),h.applyTransition(e.select("path.path"),n).attr("d",function(t){var e=n.node(t.v);if(e){var r=f.range(this.getTotalLength()).map(function(){return e});return a({},r)}return d.select(this).attr("d")})}var f=t("./lodash"),l=t("./intersect/intersect-node"),h=t("./util"),d=t("./d3");n.exports=r},{"./d3":7,"./intersect/intersect-node":14,"./lodash":21,"./util":27}],6:[function(t,n,e){"use strict";function r(t,n,e){var r=n.nodes().filter(function(t){return!a.isSubgraph(n,t)}),c=t.selectAll("g.node").data(r,function(t){return t}).classed("update",!0);return c.selectAll("*").remove(),c.enter().append("g").attr("class","node").style("opacity",0),c.each(function(t){var r=n.node(t),c=u.select(this),s=c.append("g").attr("class","label"),f=o(s,r),l=e[r.shape],h=i.pick(f.node().getBBox(),"width","height");r.elem=this,r.id&&c.attr("id",r.id),r.labelId&&s.attr("id",r.labelId),a.applyClass(c,r["class"],(c.classed("update")?"update ":"")+"node"),i.has(r,"width")&&(h.width=r.width),i.has(r,"height")&&(h.height=r.height),h.width+=r.paddingLeft+r.paddingRight,h.height+=r.paddingTop+r.paddingBottom,s.attr("transform","translate("+(r.paddingLeft-r.paddingRight)/2+","+(r.paddingTop-r.paddingBottom)/2+")");var d=l(u.select(this),h,r);a.applyStyle(d,r.style);var p=d.node().getBBox();r.width=p.width,r.height=p.height}),a.applyTransition(c.exit(),n).style("opacity",0).remove(),c}var i=t("./lodash"),o=t("./label/add-label"),a=t("./util"),u=t("./d3");n.exports=r},{"./d3":7,"./label/add-label":18,"./lodash":21,"./util":27}],7:[function(t,n,e){n.exports=window.d3},{}],8:[function(t,n,e){var r;if(t)try{r=t("dagre")}catch(i){}r||(r=window.dagre),n.exports=r},{dagre:29}],9:[function(t,n,e){var r;if(t)try{r=t("graphlib")}catch(i){}r||(r=window.graphlib),n.exports=r},{graphlib:59}],10:[function(t,n,e){n.exports={node:t("./intersect-node"),circle:t("./intersect-circle"),ellipse:t("./intersect-ellipse"),polygon:t("./intersect-polygon"),rect:t("./intersect-rect")}},{"./intersect-circle":11,"./intersect-ellipse":12,"./intersect-node":14,"./intersect-polygon":15,"./intersect-rect":16}],11:[function(t,n,e){function r(t,n,e){return i(t,n,n,e)}var i=t("./intersect-ellipse");n.exports=r},{"./intersect-ellipse":12}],12:[function(t,n,e){function r(t,n,e,r){var i=t.x,o=t.y,a=i-r.x,u=o-r.y,c=Math.sqrt(n*n*u*u+e*e*a*a),s=Math.abs(n*e*a/c);r.x<i&&(s=-s);var f=Math.abs(n*e*u/c);return r.y<o&&(f=-f),{x:i+s,y:o+f}}n.exports=r},{}],13:[function(t,n,e){function r(t,n,e,r){var o,a,u,c,s,f,l,h,d,p,g,v,y,_,m;return o=n.y-t.y,u=t.x-n.x,s=n.x*t.y-t.x*n.y,d=o*e.x+u*e.y+s,p=o*r.x+u*r.y+s,0!==d&&0!==p&&i(d,p)||(a=r.y-e.y,c=e.x-r.x,f=r.x*e.y-e.x*r.y,l=a*t.x+c*t.y+f,h=a*n.x+c*n.y+f,0!==l&&0!==h&&i(l,h)||(g=o*c-a*u,0===g))?void 0:(v=Math.abs(g/2),y=u*f-c*s,_=0>y?(y-v)/g:(y+v)/g,y=a*s-o*f,m=0>y?(y-v)/g:(y+v)/g,{x:_,y:m})}function i(t,n){return t*n>0}n.exports=r},{}],14:[function(t,n,e){function r(t,n){return t.intersect(n)}n.exports=r},{}],15:[function(t,n,e){function r(t,n,e){var r=t.x,o=t.y,a=[],u=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;n.forEach(function(t){u=Math.min(u,t.x),c=Math.min(c,t.y)});for(var s=r-t.width/2-u,f=o-t.height/2-c,l=0;l<n.length;l++){var h=n[l],d=n[l<n.length-1?l+1:0],p=i(t,e,{x:s+h.x,y:f+h.y},{x:s+d.x,y:f+d.y});p&&a.push(p)}return a.length?(a.length>1&&a.sort(function(t,n){var r=t.x-e.x,i=t.y-e.y,o=Math.sqrt(r*r+i*i),a=n.x-e.x,u=n.y-e.y,c=Math.sqrt(a*a+u*u);return c>o?-1:o===c?0:1}),a[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}var i=t("./intersect-line");n.exports=r},{"./intersect-line":13}],16:[function(t,n,e){function r(t,n){var e,r,i=t.x,o=t.y,a=n.x-i,u=n.y-o,c=t.width/2,s=t.height/2;return Math.abs(u)*c>Math.abs(a)*s?(0>u&&(s=-s),e=0===u?0:s*a/u,r=s):(0>a&&(c=-c),e=c,r=0===a?0:c*u/a),{x:i+e,y:o+r}}n.exports=r},{}],17:[function(t,n,e){function r(t,n){var e=t.append("foreignObject").attr("width","100000"),r=e.append("xhtml:div");r.attr("xmlns","http://www.w3.org/1999/xhtml");var o=n.label;switch(typeof o){case"function":r.insert(o);break;case"object":r.insert(function(){return o});break;default:r.html(o)}i.applyStyle(r,n.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap");var a=r[0][0].getBoundingClientRect();return e.attr("width",a.width).attr("height",a.height),e}var i=t("../util");n.exports=r},{"../util":27}],18:[function(t,n,e){function r(t,n,e){var r=n.label,u=t.append("g");"svg"===n.labelType?a(u,n):"string"!=typeof r||"html"===n.labelType?o(u,n):i(u,n);var c,s=u.node().getBBox();switch(e){case"top":c=-n.height/2;break;case"bottom":c=n.height/2-s.height;break;default:c=-s.height/2}return u.attr("transform","translate("+-s.width/2+","+c+")"),u}var i=t("./add-text-label"),o=t("./add-html-label"),a=t("./add-svg-label");n.exports=r},{"./add-html-label":17,"./add-svg-label":19,"./add-text-label":20}],19:[function(t,n,e){function r(t,n){var e=t;return e.node().appendChild(n.label),i.applyStyle(e,n.labelStyle),e}var i=t("../util");n.exports=r},{"../util":27}],20:[function(t,n,e){function r(t,n){for(var e=t.append("text"),r=i(n.label).split("\n"),a=0;a<r.length;a++)e.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(r[a]);return o.applyStyle(e,n.labelStyle),e}function i(t){for(var n,e="",r=!1,i=0;i<t.length;++i)if(n=t[i],r){switch(n){case"n":e+="\n";break;default:e+=n}r=!1}else"\\"===n?r=!0:e+=n;return e}var o=t("../util");n.exports=r},{"../util":27}],21:[function(t,n,e){var r;if(t)try{r=t("lodash")}catch(i){}r||(r=window._),n.exports=r},{lodash:79}],22:[function(t,n,e){"use strict";function r(t,n){function e(t){var e=n.node(t);return"translate("+e.x+","+e.y+")"}var r=t.filter(function(){return!o.select(this).classed("update")});r.attr("transform",e),i.applyTransition(t,n).style("opacity",1).attr("transform",e),i.applyTransition(r.selectAll("rect"),n).attr("width",function(t){return n.node(t).width}).attr("height",function(t){return n.node(t).height}).attr("x",function(t){var e=n.node(t);return-e.width/2}).attr("y",function(t){var e=n.node(t);return-e.height/2})}var i=t("./util"),o=t("./d3");n.exports=r},{"./d3":7,"./util":27}],23:[function(t,n,e){"use strict";function r(t,n){function e(t){var e=n.edge(t);return a.has(e,"x")?"translate("+e.x+","+e.y+")":""}var r=t.filter(function(){return!o.select(this).classed("update")});r.attr("transform",e),i.applyTransition(t,n).style("opacity",1).attr("transform",e)}var i=t("./util"),o=t("./d3"),a=t("./lodash");n.exports=r},{"./d3":7,"./lodash":21,"./util":27}],24:[function(t,n,e){"use strict";function r(t,n){function e(t){var e=n.node(t);return"translate("+e.x+","+e.y+")"}var r=t.filter(function(){return!o.select(this).classed("update")});r.attr("transform",e),i.applyTransition(t,n).style("opacity",1).attr("transform",e)}var i=t("./util"),o=t("./d3");n.exports=r},{"./d3":7,"./util":27}],25:[function(t,n,e){function r(){var n=t("./create-nodes"),e=t("./create-clusters"),r=t("./create-edge-labels"),u=t("./create-edge-paths"),s=t("./position-nodes"),f=t("./position-edge-labels"),l=t("./position-clusters"),h=t("./shapes"),d=t("./arrows"),p=function(t,p){i(p);var g=a(t,"output"),v=a(g,"clusters"),y=a(g,"edgePaths"),_=r(a(g,"edgeLabels"),p),m=n(a(g,"nodes"),p,h);c(p),s(m,p),f(_,p),u(y,p,d);var w=e(v,p);l(w,p),o(p)};return p.createNodes=function(t){return arguments.length?(n=t,p):n},p.createClusters=function(t){return arguments.length?(e=t,p):e},p.createEdgeLabels=function(t){return arguments.length?(r=t,p):r},p.createEdgePaths=function(t){return arguments.length?(u=t,p):u},p.shapes=function(t){return arguments.length?(h=t,p):h},p.arrows=function(t){return arguments.length?(d=t,p):d},p}function i(t){t.nodes().forEach(function(n){var e=t.node(n);u.has(e,"label")||t.children(n).length||(e.label=n),u.has(e,"paddingX")&&u.defaults(e,{paddingLeft:e.paddingX,paddingRight:e.paddingX}),u.has(e,"paddingY")&&u.defaults(e,{paddingTop:e.paddingY,paddingBottom:e.paddingY}),u.has(e,"padding")&&u.defaults(e,{paddingLeft:e.padding,paddingRight:e.padding,paddingTop:e.padding,paddingBottom:e.padding}),u.defaults(e,s),u.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(t){e[t]=Number(e[t])}),u.has(e,"width")&&(e._prevWidth=e.width),u.has(e,"height")&&(e._prevHeight=e.height)}),t.edges().forEach(function(n){var e=t.edge(n);u.has(e,"label")||(e.label=""),u.defaults(e,f)})}function o(t){u.each(t.nodes(),function(n){var e=t.node(n);u.has(e,"_prevWidth")?e.width=e._prevWidth:delete e.width,u.has(e,"_prevHeight")?e.height=e._prevHeight:delete e.height,delete e._prevWidth,delete e._prevHeight})}function a(t,n){var e=t.select("g."+n);return e.empty()&&(e=t.append("g").attr("class",n)),e}var u=t("./lodash"),c=t("./dagre").layout;n.exports=r;var s={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},f={arrowhead:"normal",lineInterpolate:"linear"}},{"./arrows":2,"./create-clusters":3,"./create-edge-labels":4,"./create-edge-paths":5,"./create-nodes":6,"./dagre":8,"./lodash":21,"./position-clusters":22,"./position-edge-labels":23,"./position-nodes":24,"./shapes":26}],26:[function(t,n,e){"use strict";function r(t,n,e){var r=t.insert("rect",":first-child").attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2).attr("y",-n.height/2).attr("width",n.width).attr("height",n.height);return e.intersect=function(t){return u(e,t)},r}function i(t,n,e){var r=n.width/2,i=n.height/2,o=t.insert("ellipse",":first-child").attr("x",-n.width/2).attr("y",-n.height/2).attr("rx",r).attr("ry",i);return e.intersect=function(t){return c(e,r,i,t)},o}function o(t,n,e){var r=Math.max(n.width,n.height)/2,i=t.insert("circle",":first-child").attr("x",-n.width/2).attr("y",-n.height/2).attr("r",r);return e.intersect=function(t){return s(e,r,t)},i}function a(t,n,e){var r=n.width*Math.SQRT2/2,i=n.height*Math.SQRT2/2,o=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],a=t.insert("polygon",":first-child").attr("points",o.map(function(t){return t.x+","+t.y}).join(" "));return e.intersect=function(t){return f(e,o,t)},a}var u=t("./intersect/intersect-rect"),c=t("./intersect/intersect-ellipse"),s=t("./intersect/intersect-circle"),f=t("./intersect/intersect-polygon");n.exports={rect:r,ellipse:i,circle:o,diamond:a}},{"./intersect/intersect-circle":11,"./intersect/intersect-ellipse":12,"./intersect/intersect-polygon":15,"./intersect/intersect-rect":16}],27:[function(t,n,e){function r(t,n){return!!t.children(n).length}function i(t){return o(t.v)+":"+o(t.w)+":"+o(t.name)}function o(t){return t?String(t).replace(f,"\\:"):""}function a(t,n){n&&t.attr("style",n)}function u(t,n,e){n&&t.attr("class",n).attr("class",e+" "+t.attr("class"))}function c(t,n){var e=n.graph();if(s.isPlainObject(e)){var r=e.transition;if(s.isFunction(r))return r(t)}return t}var s=t("./lodash");n.exports={isSubgraph:r,edgeToId:i,applyStyle:a,applyClass:u,applyTransition:c};var f=/:/g},{"./lodash":21}],28:[function(t,n,e){n.exports="0.4.17"},{}],29:[function(t,n,e){n.exports={graphlib:t("./lib/graphlib"),layout:t("./lib/layout"),debug:t("./lib/debug"),util:{time:t("./lib/util").time,notime:t("./lib/util").notime},version:t("./lib/version")}},{"./lib/debug":34,"./lib/graphlib":35,"./lib/layout":37,"./lib/util":57,"./lib/version":58}],30:[function(t,n,e){"use strict";function r(t){function n(t){return function(n){return t.edge(n).weight}}var e="greedy"===t.graph().acyclicer?u(t,n(t)):i(t);a.each(e,function(n){var e=t.edge(n);t.removeEdge(n),e.forwardName=n.name,e.reversed=!0,t.setEdge(n.w,n.v,e,a.uniqueId("rev"))})}function i(t){function n(o){a.has(i,o)||(i[o]=!0,r[o]=!0,a.each(t.outEdges(o),function(t){a.has(r,t.w)?e.push(t):n(t.w)}),delete r[o])}var e=[],r={},i={};return a.each(t.nodes(),n),e}function o(t){a.each(t.edges(),function(n){var e=t.edge(n);if(e.reversed){t.removeEdge(n);var r=e.forwardName;delete e.reversed,delete e.forwardName,t.setEdge(n.w,n.v,e,r)}})}var a=t("./lodash"),u=t("./greedy-fas");n.exports={run:r,undo:o}},{"./greedy-fas":36,"./lodash":38}],31:[function(t,n,e){function r(t){function n(e){var r=t.children(e),a=t.node(e);if(r.length&&o.each(r,n),o.has(a,"minRank")){a.borderLeft=[],a.borderRight=[];for(var u=a.minRank,c=a.maxRank+1;c>u;++u)i(t,"borderLeft","_bl",e,a,u),i(t,"borderRight","_br",e,a,u)}}o.each(t.children(),n)}function i(t,n,e,r,i,o){var u={width:0,height:0,rank:o,borderType:n},c=i[n][o-1],s=a.addDummyNode(t,"border",u,e);i[n][o]=s,t.setParent(s,r),c&&t.setEdge(c,s,{weight:1})}var o=t("./lodash"),a=t("./util");n.exports=r},{"./lodash":38,"./util":57}],32:[function(t,n,e){"use strict";function r(t){var n=t.graph().rankdir.toLowerCase();("lr"===n||"rl"===n)&&o(t)}function i(t){var n=t.graph().rankdir.toLowerCase();("bt"===n||"rl"===n)&&u(t),("lr"===n||"rl"===n)&&(s(t),o(t))}function o(t){l.each(t.nodes(),function(n){a(t.node(n))}),l.each(t.edges(),function(n){a(t.edge(n))})}function a(t){var n=t.width;t.width=t.height,t.height=n}function u(t){l.each(t.nodes(),function(n){c(t.node(n))}),l.each(t.edges(),function(n){var e=t.edge(n);l.each(e.points,c),l.has(e,"y")&&c(e)})}function c(t){t.y=-t.y}function s(t){l.each(t.nodes(),function(n){f(t.node(n))}),l.each(t.edges(),function(n){var e=t.edge(n);l.each(e.points,f),l.has(e,"x")&&f(e)})}function f(t){var n=t.x;t.x=t.y,t.y=n}var l=t("./lodash");n.exports={adjust:r,undo:i}},{"./lodash":38}],33:[function(t,n,e){function r(){var t={};t._next=t._prev=t,this._sentinel=t}function i(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function o(t,n){return"_next"!==t&&"_prev"!==t?n:void 0}n.exports=r,r.prototype.dequeue=function(){var t=this._sentinel,n=t._prev;return n!==t?(i(n),n):void 0},r.prototype.enqueue=function(t){var n=this._sentinel;t._prev&&t._next&&i(t),t._next=n._next,n._next._prev=t,n._next=t,t._prev=n},r.prototype.toString=function(){for(var t=[],n=this._sentinel,e=n._prev;e!==n;)t.push(JSON.stringify(e,o)),e=e._prev;return"["+t.join(", ")+"]"}},{}],34:[function(t,n,e){function r(t){var n=o.buildLayerMatrix(t),e=new a({compound:!0,multigraph:!0}).setGraph({});return i.each(t.nodes(),function(n){e.setNode(n,{label:n}),e.setParent(n,"layer"+t.node(n).rank)}),i.each(t.edges(),function(t){e.setEdge(t.v,t.w,{},t.name)}),i.each(n,function(t,n){var r="layer"+n;e.setNode(r,{rank:"same"}),i.reduce(t,function(t,n){return e.setEdge(t,n,{style:"invis"}),n})}),e}var i=t("./lodash"),o=t("./util"),a=t("./graphlib").Graph;n.exports={debugOrdering:r}},{"./graphlib":35,"./lodash":38,"./util":57}],35:[function(t,n,e){arguments[4][9][0].apply(e,arguments)},{dup:9,graphlib:59}],36:[function(t,n,e){function r(t,n){if(t.nodeCount()<=1)return[];var e=a(t,n||l),r=i(e.graph,e.buckets,e.zeroIdx);return c.flatten(c.map(r,function(n){return t.outEdges(n.v,n.w)}),!0)}function i(t,n,e){for(var r,i=[],a=n[n.length-1],u=n[0];t.nodeCount();){for(;r=u.dequeue();)o(t,n,e,r);for(;r=a.dequeue();)o(t,n,e,r);if(t.nodeCount())for(var c=n.length-2;c>0;--c)if(r=n[c].dequeue()){i=i.concat(o(t,n,e,r,!0));break}}return i}function o(t,n,e,r,i){var o=i?[]:void 0;return c.each(t.inEdges(r.v),function(r){var a=t.edge(r),c=t.node(r.v);i&&o.push({v:r.v,w:r.w}),c.out-=a,u(n,e,c)}),c.each(t.outEdges(r.v),function(r){var i=t.edge(r),o=r.w,a=t.node(o);a["in"]-=i,u(n,e,a)}),t.removeNode(r.v),o}function a(t,n){var e=new s,r=0,i=0;c.each(t.nodes(),function(t){e.setNode(t,{v:t,"in":0,out:0})}),c.each(t.edges(),function(t){var o=e.edge(t.v,t.w)||0,a=n(t),u=o+a;e.setEdge(t.v,t.w,u),i=Math.max(i,e.node(t.v).out+=a),r=Math.max(r,e.node(t.w)["in"]+=a)});var o=c.range(i+r+3).map(function(){return new f}),a=r+1;return c.each(e.nodes(),function(t){u(o,a,e.node(t))}),{graph:e,buckets:o,zeroIdx:a}}function u(t,n,e){e.out?e["in"]?t[e.out-e["in"]+n].enqueue(e):t[t.length-1].enqueue(e):t[0].enqueue(e)}var c=t("./lodash"),s=t("./graphlib").Graph,f=t("./data/list");n.exports=r;var l=c.constant(1)},{"./data/list":33,"./graphlib":35,"./lodash":38}],37:[function(t,n,e){"use strict";function r(t,n){var e=n&&n.debugTiming?O.time:O.notime;e("layout",function(){var n=e("  buildLayoutGraph",function(){return a(t)});e("  runLayout",function(){i(n,e)}),e("  updateInputGraph",function(){o(t,n)})})}function i(t,n){n("    makeSpaceForEdgeLabels",function(){u(t)}),n("    removeSelfEdges",function(){v(t)}),n("    acyclic",function(){x.run(t)}),n("    nestingGraph.run",function(){j.run(t)}),n("    rank",function(){E(O.asNonCompoundGraph(t))}),n("    injectEdgeLabelProxies",function(){c(t)}),n("    removeEmptyRanks",function(){C(t)}),n("    nestingGraph.cleanup",function(){j.cleanup(t)}),n("    normalizeRanks",function(){I(t)}),n("    assignRankMinMax",function(){s(t)}),n("    removeEdgeLabelProxies",function(){f(t)}),n("    normalize.run",function(){k.run(t)}),n("    parentDummyChains",function(){N(t)}),n("    addBorderSegments",function(){R(t)}),n("    order",function(){L(t)}),n("    insertSelfEdges",function(){y(t)}),n("    adjustCoordinateSystem",function(){T.adjust(t)}),n("    position",function(){A(t)}),n("    positionSelfEdges",function(){_(t)}),n("    removeBorderNodes",function(){g(t)}),n("    normalize.undo",function(){k.undo(t)}),n("    fixupEdgeLabelCoords",function(){d(t)}),n("    undoCoordinateSystem",function(){T.undo(t)}),n("    translateGraph",function(){l(t)}),n("    assignNodeIntersects",function(){h(t)}),n("    reversePoints",function(){p(t)}),n("    acyclic.undo",function(){x.undo(t)})}function o(t,n){b.each(t.nodes(),function(e){var r=t.node(e),i=n.node(e);r&&(r.x=i.x,r.y=i.y,n.children(e).length&&(r.width=i.width,r.height=i.height))}),b.each(t.edges(),function(e){var r=t.edge(e),i=n.edge(e);r.points=i.points,b.has(i,"x")&&(r.x=i.x,r.y=i.y)}),t.graph().width=n.graph().width,t.graph().height=n.graph().height}function a(t){var n=new S({multigraph:!0,compound:!0}),e=w(t.graph());return n.setGraph(b.merge({},B,m(e,M),b.pick(e,U))),b.each(t.nodes(),function(e){var r=w(t.node(e));n.setNode(e,b.defaults(m(r,P),F)),n.setParent(e,t.parent(e))}),b.each(t.edges(),function(e){var r=w(t.edge(e));n.setEdge(e,b.merge({},W,m(r,D),b.pick(r,z)))}),n}function u(t){var n=t.graph();n.ranksep/=2,b.each(t.edges(),function(e){var r=t.edge(e);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===n.rankdir||"BT"===n.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)})}function c(t){b.each(t.edges(),function(n){var e=t.edge(n);if(e.width&&e.height){var r=t.node(n.v),i=t.node(n.w),o={rank:(i.rank-r.rank)/2+r.rank,e:n};O.addDummyNode(t,"edge-proxy",o,"_ep")}})}function s(t){var n=0;b.each(t.nodes(),function(e){var r=t.node(e);r.borderTop&&(r.minRank=t.node(r.borderTop).rank,r.maxRank=t.node(r.borderBottom).rank,n=b.max(n,r.maxRank))}),t.graph().maxRank=n}function f(t){b.each(t.nodes(),function(n){var e=t.node(n);"edge-proxy"===e.dummy&&(t.edge(e.e).labelRank=e.rank,t.removeNode(n))})}function l(t){function n(t){var n=t.x,a=t.y,u=t.width,c=t.height;e=Math.min(e,n-u/2),r=Math.max(r,n+u/2),i=Math.min(i,a-c/2),o=Math.max(o,a+c/2)}var e=Number.POSITIVE_INFINITY,r=0,i=Number.POSITIVE_INFINITY,o=0,a=t.graph(),u=a.marginx||0,c=a.marginy||0;b.each(t.nodes(),function(e){n(t.node(e))}),b.each(t.edges(),function(e){var r=t.edge(e);b.has(r,"x")&&n(r)}),e-=u,i-=c,b.each(t.nodes(),function(n){var r=t.node(n);r.x-=e,r.y-=i}),b.each(t.edges(),function(n){var r=t.edge(n);b.each(r.points,function(t){t.x-=e,t.y-=i}),b.has(r,"x")&&(r.x-=e),b.has(r,"y")&&(r.y-=i)}),a.width=r-e+u,a.height=o-i+c}function h(t){b.each(t.edges(),function(n){var e,r,i=t.edge(n),o=t.node(n.v),a=t.node(n.w);i.points?(e=i.points[0],r=i.points[i.points.length-1]):(i.points=[],e=a,r=o),i.points.unshift(O.intersectRect(o,e)),i.points.push(O.intersectRect(a,r))})}function d(t){b.each(t.edges(),function(n){var e=t.edge(n);if(b.has(e,"x"))switch(("l"===e.labelpos||"r"===e.labelpos)&&(e.width-=e.labeloffset),e.labelpos){case"l":e.x-=e.width/2+e.labeloffset;break;case"r":e.x+=e.width/2+e.labeloffset}})}function p(t){b.each(t.edges(),function(n){var e=t.edge(n);e.reversed&&e.points.reverse()})}function g(t){b.each(t.nodes(),function(n){if(t.children(n).length){var e=t.node(n),r=t.node(e.borderTop),i=t.node(e.borderBottom),o=t.node(b.last(e.borderLeft)),a=t.node(b.last(e.borderRight));e.width=Math.abs(a.x-o.x),e.height=Math.abs(i.y-r.y),e.x=o.x+e.width/2,e.y=r.y+e.height/2}}),b.each(t.nodes(),function(n){"border"===t.node(n).dummy&&t.removeNode(n)})}function v(t){b.each(t.edges(),function(n){if(n.v===n.w){var e=t.node(n.v);e.selfEdges||(e.selfEdges=[]),e.selfEdges.push({e:n,label:t.edge(n)}),t.removeEdge(n)}})}function y(t){var n=O.buildLayerMatrix(t);b.each(n,function(n){var e=0;b.each(n,function(n,r){var i=t.node(n);i.order=r+e,b.each(i.selfEdges,function(n){O.addDummyNode(t,"selfedge",{width:n.label.width,height:n.label.height,rank:i.rank,order:r+ ++e,e:n.e,label:n.label},"_se")}),delete i.selfEdges})})}function _(t){b.each(t.nodes(),function(n){var e=t.node(n);if("selfedge"===e.dummy){var r=t.node(e.e.v),i=r.x+r.width/2,o=r.y,a=e.x-i,u=r.height/2;t.setEdge(e.e,e.label),t.removeNode(n),e.label.points=[{x:i+2*a/3,y:o-u},{x:i+5*a/6,y:o-u},{x:i+a,y:o},{x:i+5*a/6,y:o+u},{x:i+2*a/3,y:o+u}],e.label.x=e.x,e.label.y=e.y}})}function m(t,n){return b.mapValues(b.pick(t,n),Number)}function w(t){var n={};return b.each(t,function(t,e){n[e.toLowerCase()]=t}),n}var b=t("./lodash"),x=t("./acyclic"),k=t("./normalize"),E=t("./rank"),I=t("./util").normalizeRanks,N=t("./parent-dummy-chains"),C=t("./util").removeEmptyRanks,j=t("./nesting-graph"),R=t("./add-border-segments"),T=t("./coordinate-system"),L=t("./order"),A=t("./position"),O=t("./util"),S=t("./graphlib").Graph;n.exports=r;var M=["nodesep","edgesep","ranksep","marginx","marginy"],B={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},U=["acyclicer","ranker","rankdir","align"],P=["width","height"],F={width:0,height:0},D=["minlen","weight","width","height","labeloffset"],W={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},z=["labelpos"]},{"./acyclic":30,"./add-border-segments":31,"./coordinate-system":32,"./graphlib":35,"./lodash":38,"./nesting-graph":39,"./normalize":40,"./order":45,"./parent-dummy-chains":50,"./position":52,"./rank":54,"./util":57}],38:[function(t,n,e){arguments[4][21][0].apply(e,arguments)},{dup:21,lodash:79}],39:[function(t,n,e){function r(t){var n=s.addDummyNode(t,"root",{},"_root"),e=o(t),r=c.max(e)-1,u=2*r+1;t.graph().nestingRoot=n,c.each(t.edges(),function(n){t.edge(n).minlen*=u});var f=a(t)+1;c.each(t.children(),function(o){i(t,n,u,f,r,e,o)}),t.graph().nodeRankFactor=u}function i(t,n,e,r,o,a,u){var f=t.children(u);if(!f.length)return void(u!==n&&t.setEdge(n,u,{weight:0,minlen:e}));var l=s.addBorderNode(t,"_bt"),h=s.addBorderNode(t,"_bb"),d=t.node(u);t.setParent(l,u),d.borderTop=l,t.setParent(h,u),d.borderBottom=h,c.each(f,function(c){i(t,n,e,r,o,a,c);var s=t.node(c),f=s.borderTop?s.borderTop:c,d=s.borderBottom?s.borderBottom:c,p=s.borderTop?r:2*r,g=f!==d?1:o-a[u]+1;t.setEdge(l,f,{weight:p,minlen:g,nestingEdge:!0}),t.setEdge(d,h,{weight:p,minlen:g,nestingEdge:!0})}),t.parent(u)||t.setEdge(n,l,{weight:0,minlen:o+a[u]})}function o(t){function n(r,i){var o=t.children(r);o&&o.length&&c.each(o,function(t){n(t,i+1)}),e[r]=i}var e={};return c.each(t.children(),function(t){n(t,1)}),e}function a(t){return c.reduce(t.edges(),function(n,e){return n+t.edge(e).weight},0)}function u(t){var n=t.graph();t.removeNode(n.nestingRoot),delete n.nestingRoot,c.each(t.edges(),function(n){var e=t.edge(n);e.nestingEdge&&t.removeEdge(n)})}var c=t("./lodash"),s=t("./util");n.exports={run:r,cleanup:u}},{"./lodash":38,"./util":57}],40:[function(t,n,e){"use strict";function r(t){t.graph().dummyChains=[],a.each(t.edges(),function(n){i(t,n)})}function i(t,n){var e=n.v,r=t.node(e).rank,i=n.w,o=t.node(i).rank,a=n.name,c=t.edge(n),s=c.labelRank;if(o!==r+1){t.removeEdge(n);var f,l,h;for(h=0,++r;o>r;++h,++r)c.points=[],l={width:0,height:0,edgeLabel:c,edgeObj:n,rank:r},f=u.addDummyNode(t,"edge",l,"_d"),r===s&&(l.width=c.width,l.height=c.height,l.dummy="edge-label",l.labelpos=c.labelpos),t.setEdge(e,f,{weight:c.weight},a),0===h&&t.graph().dummyChains.push(f),e=f;t.setEdge(e,i,{weight:c.weight},a)}}function o(t){a.each(t.graph().dummyChains,function(n){var e,r=t.node(n),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)e=t.successors(n)[0],t.removeNode(n),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),n=e,r=t.node(n)})}var a=t("./lodash"),u=t("./util");n.exports={run:r,undo:o}},{"./lodash":38,"./util":57}],41:[function(t,n,e){function r(t,n,e){var r,o={};i.each(e,function(e){for(var i,a,u=t.parent(e);u;){if(i=t.parent(u),i?(a=o[i],o[i]=u):(a=r,r=u),a&&a!==u)return void n.setEdge(a,u);u=i}})}var i=t("../lodash");n.exports=r},{"../lodash":38}],42:[function(t,n,e){function r(t,n){return i.map(n,function(n){var e=t.inEdges(n);if(e.length){var r=i.reduce(e,function(n,e){var r=t.edge(e),i=t.node(e.v);return{sum:n.sum+r.weight*i.order,weight:n.weight+r.weight}},{sum:0,weight:0});return{v:n,barycenter:r.sum/r.weight,weight:r.weight}}return{v:n}})}var i=t("../lodash");n.exports=r},{"../lodash":38}],43:[function(t,n,e){function r(t,n,e){var r=i(t),u=new a({compound:!0}).setGraph({root:r}).setDefaultNodeLabel(function(n){return t.node(n)});return o.each(t.nodes(),function(i){var a=t.node(i),c=t.parent(i);(a.rank===n||a.minRank<=n&&n<=a.maxRank)&&(u.setNode(i),u.setParent(i,c||r),o.each(t[e](i),function(n){var e=n.v===i?n.w:n.v,r=u.edge(e,i),a=o.isUndefined(r)?0:r.weight;u.setEdge(e,i,{weight:t.edge(n).weight+a})}),o.has(a,"minRank")&&u.setNode(i,{borderLeft:a.borderLeft[n],borderRight:a.borderRight[n]}))}),u}function i(t){for(var n;t.hasNode(n=o.uniqueId("_root")););return n}var o=t("../lodash"),a=t("../graphlib").Graph;n.exports=r},{"../graphlib":35,"../lodash":38}],44:[function(t,n,e){"use strict";function r(t,n){for(var e=0,r=1;r<n.length;++r)e+=i(t,n[r-1],n[r]);return e}function i(t,n,e){for(var r=o.zipObject(e,o.map(e,function(t,n){return n})),i=o.flatten(o.map(n,function(n){return o.chain(t.outEdges(n)).map(function(n){return{pos:r[n.w],weight:t.edge(n).weight}}).sortBy("pos").value()}),!0),a=1;a<e.length;)a<<=1;var u=2*a-1;a-=1;var c=o.map(new Array(u),function(){return 0}),s=0;return o.each(i.forEach(function(t){var n=t.pos+a;c[n]+=t.weight;for(var e=0;n>0;)n%2&&(e+=c[n+1]),n=n-1>>1,c[n]+=t.weight;s+=t.weight*e})),s}var o=t("../lodash");n.exports=r},{"../lodash":38}],45:[function(t,n,e){"use strict";function r(t){var n=p.maxRank(t),e=i(t,u.range(1,n+1),"inEdges"),r=i(t,u.range(n-1,-1,-1),"outEdges"),f=c(t);a(t,f);for(var l,h=Number.POSITIVE_INFINITY,d=0,g=0;4>g;++d,++g){o(d%2?e:r,d%4>=2),f=p.buildLayerMatrix(t);var v=s(t,f);h>v&&(g=0,l=u.cloneDeep(f),h=v)}a(t,l)}function i(t,n,e){return u.map(n,function(n){return l(t,n,e)})}function o(t,n){var e=new d;u.each(t,function(t){var r=t.graph().root,i=f(t,r,e,n);u.each(i.vs,function(n,e){t.node(n).order=e}),h(t,e,i.vs)})}function a(t,n){u.each(n,function(n){u.each(n,function(n,e){t.node(n).order=e})})}var u=t("../lodash"),c=t("./init-order"),s=t("./cross-count"),f=t("./sort-subgraph"),l=t("./build-layer-graph"),h=t("./add-subgraph-constraints"),d=t("../graphlib").Graph,p=t("../util");n.exports=r},{"../graphlib":35,"../lodash":38,"../util":57,"./add-subgraph-constraints":41,"./build-layer-graph":43,"./cross-count":44,"./init-order":46,"./sort-subgraph":48}],46:[function(t,n,e){"use strict";

function r(t){function n(r){if(!i.has(e,r)){e[r]=!0;var o=t.node(r);a[o.rank].push(r),i.each(t.successors(r),n)}}var e={},r=i.filter(t.nodes(),function(n){return!t.children(n).length}),o=i.max(i.map(r,function(n){return t.node(n).rank})),a=i.map(i.range(o+1),function(){return[]}),u=i.sortBy(r,function(n){return t.node(n).rank});return i.each(u,n),a}var i=t("../lodash");n.exports=r},{"../lodash":38}],47:[function(t,n,e){"use strict";function r(t,n){var e={};a.each(t,function(t,n){var r=e[t.v]={indegree:0,"in":[],out:[],vs:[t.v],i:n};a.isUndefined(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)}),a.each(n.edges(),function(t){var n=e[t.v],r=e[t.w];a.isUndefined(n)||a.isUndefined(r)||(r.indegree++,n.out.push(e[t.w]))});var r=a.filter(e,function(t){return!t.indegree});return i(r)}function i(t){function n(t){return function(n){n.merged||(a.isUndefined(n.barycenter)||a.isUndefined(t.barycenter)||n.barycenter>=t.barycenter)&&o(t,n)}}function e(n){return function(e){e["in"].push(n),0===--e.indegree&&t.push(e)}}for(var r=[];t.length;){var i=t.pop();r.push(i),a.each(i["in"].reverse(),n(i)),a.each(i.out,e(i))}return a.chain(r).filter(function(t){return!t.merged}).map(function(t){return a.pick(t,["vs","i","barycenter","weight"])}).value()}function o(t,n){var e=0,r=0;t.weight&&(e+=t.barycenter*t.weight,r+=t.weight),n.weight&&(e+=n.barycenter*n.weight,r+=n.weight),t.vs=n.vs.concat(t.vs),t.barycenter=e/r,t.weight=r,t.i=Math.min(n.i,t.i),n.merged=!0}var a=t("../lodash");n.exports=r},{"../lodash":38}],48:[function(t,n,e){function r(t,n,e,f){var l=t.children(n),h=t.node(n),d=h?h.borderLeft:void 0,p=h?h.borderRight:void 0,g={};d&&(l=a.filter(l,function(t){return t!==d&&t!==p}));var v=u(t,l);a.each(v,function(n){if(t.children(n.v).length){var i=r(t,n.v,e,f);g[n.v]=i,a.has(i,"barycenter")&&o(n,i)}});var y=c(v,e);i(y,g);var _=s(y,f);if(d&&(_.vs=a.flatten([d,_.vs,p],!0),t.predecessors(d).length)){var m=t.node(t.predecessors(d)[0]),w=t.node(t.predecessors(p)[0]);a.has(_,"barycenter")||(_.barycenter=0,_.weight=0),_.barycenter=(_.barycenter*_.weight+m.order+w.order)/(_.weight+2),_.weight+=2}return _}function i(t,n){a.each(t,function(t){t.vs=a.flatten(t.vs.map(function(t){return n[t]?n[t].vs:t}),!0)})}function o(t,n){a.isUndefined(t.barycenter)?(t.barycenter=n.barycenter,t.weight=n.weight):(t.barycenter=(t.barycenter*t.weight+n.barycenter*n.weight)/(t.weight+n.weight),t.weight+=n.weight)}var a=t("../lodash"),u=t("./barycenter"),c=t("./resolve-conflicts"),s=t("./sort");n.exports=r},{"../lodash":38,"./barycenter":42,"./resolve-conflicts":47,"./sort":49}],49:[function(t,n,e){function r(t,n){var e=u.partition(t,function(t){return a.has(t,"barycenter")}),r=e.lhs,c=a.sortBy(e.rhs,function(t){return-t.i}),s=[],f=0,l=0,h=0;r.sort(o(!!n)),h=i(s,c,h),a.each(r,function(t){h+=t.vs.length,s.push(t.vs),f+=t.barycenter*t.weight,l+=t.weight,h=i(s,c,h)});var d={vs:a.flatten(s,!0)};return l&&(d.barycenter=f/l,d.weight=l),d}function i(t,n,e){for(var r;n.length&&(r=a.last(n)).i<=e;)n.pop(),t.push(r.vs),e++;return e}function o(t){return function(n,e){return n.barycenter<e.barycenter?-1:n.barycenter>e.barycenter?1:t?e.i-n.i:n.i-e.i}}var a=t("../lodash"),u=t("../util");n.exports=r},{"../lodash":38,"../util":57}],50:[function(t,n,e){function r(t){var n=o(t);a.each(t.graph().dummyChains,function(e){for(var r=t.node(e),o=r.edgeObj,a=i(t,n,o.v,o.w),u=a.path,c=a.lca,s=0,f=u[s],l=!0;e!==o.w;){if(r=t.node(e),l){for(;(f=u[s])!==c&&t.node(f).maxRank<r.rank;)s++;f===c&&(l=!1)}if(!l){for(;s<u.length-1&&t.node(f=u[s+1]).minRank<=r.rank;)s++;f=u[s]}t.setParent(e,f),e=t.successors(e)[0]}})}function i(t,n,e,r){var i,o,a=[],u=[],c=Math.min(n[e].low,n[r].low),s=Math.max(n[e].lim,n[r].lim);i=e;do i=t.parent(i),a.push(i);while(i&&(n[i].low>c||s>n[i].lim));for(o=i,i=r;(i=t.parent(i))!==o;)u.push(i);return{path:a.concat(u.reverse()),lca:o}}function o(t){function n(i){var o=r;a.each(t.children(i),n),e[i]={low:o,lim:r++}}var e={},r=0;return a.each(t.children(),n),e}var a=t("./lodash");n.exports=r},{"./lodash":38}],51:[function(t,n,e){"use strict";function r(t,n){function e(n,e){var i=0,u=0,c=n.length,s=y.last(e);return y.each(e,function(n,f){var l=o(t,n),h=l?t.node(l).order:c;(l||n===s)&&(y.each(e.slice(u,f+1),function(n){y.each(t.predecessors(n),function(e){var o=t.node(e),u=o.order;!(i>u||u>h)||o.dummy&&t.node(n).dummy||a(r,e,n)})}),u=f+1,i=h)}),e}var r={};return y.reduce(n,e),r}function i(t,n){function e(n,e,r,o,u){var c;y.each(y.range(e,r),function(e){c=n[e],t.node(c).dummy&&y.each(t.predecessors(c),function(n){var e=t.node(n);e.dummy&&(e.order<o||e.order>u)&&a(i,n,c)})})}function r(n,r){var i,o=-1,a=0;return y.each(r,function(u,c){if("border"===t.node(u).dummy){var s=t.predecessors(u);s.length&&(i=t.node(s[0]).order,e(r,a,c,o,i),a=c,o=i)}e(r,a,r.length,i,n.length)}),r}var i={};return y.reduce(n,r),i}function o(t,n){return t.node(n).dummy?y.find(t.predecessors(n),function(n){return t.node(n).dummy}):void 0}function a(t,n,e){if(n>e){var r=n;n=e,e=r}var i=t[n];i||(t[n]=i={}),i[e]=!0}function u(t,n,e){if(n>e){var r=n;n=e,e=r}return y.has(t[n],e)}function c(t,n,e,r){var i={},o={},a={};return y.each(n,function(t){y.each(t,function(t,n){i[t]=t,o[t]=t,a[t]=n})}),y.each(n,function(t){var n=-1;y.each(t,function(t){var c=r(t);if(c.length){c=y.sortBy(c,function(t){return a[t]});for(var s=(c.length-1)/2,f=Math.floor(s),l=Math.ceil(s);l>=f;++f){var h=c[f];o[t]===t&&n<a[h]&&!u(e,t,h)&&(o[h]=t,o[t]=i[t]=i[h],n=a[h])}}})}),{root:i,align:o}}function s(t,n,e,r,i){function o(t){y.has(s,t)||(s[t]=!0,u[t]=y.reduce(c.inEdges(t),function(t,n){return o(n.v),Math.max(t,u[n.v]+c.edge(n))},0))}function a(n){if(2!==s[n]){s[n]++;var e=t.node(n),r=y.reduce(c.outEdges(n),function(t,n){return a(n.w),Math.min(t,u[n.w]-c.edge(n))},Number.POSITIVE_INFINITY);r!==Number.POSITIVE_INFINITY&&e.borderType!==l&&(u[n]=Math.max(u[n],r))}}var u={},c=f(t,n,e,i),s={};y.each(c.nodes(),o);var l=i?"borderLeft":"borderRight";return y.each(c.nodes(),a),y.each(r,function(t){u[t]=u[e[t]]}),u}function f(t,n,e,r){var i=new _,o=t.graph(),a=g(o.nodesep,o.edgesep,r);return y.each(n,function(n){var r;y.each(n,function(n){var o=e[n];if(i.setNode(o),r){var u=e[r],c=i.edge(u,o);i.setEdge(u,o,Math.max(a(t,n,r),c||0))}r=n})}),i}function l(t,n){return y.min(n,function(n){var e=y.min(n,function(n,e){return n-v(t,e)/2}),r=y.max(n,function(n,e){return n+v(t,e)/2});return r-e})}function h(t,n){var e=y.min(n),r=y.max(n);y.each(["u","d"],function(i){y.each(["l","r"],function(o){var a,u=i+o,c=t[u];c!==n&&(a="l"===o?e-y.min(c):r-y.max(c),a&&(t[u]=y.mapValues(c,function(t){return t+a})))})})}function d(t,n){return y.mapValues(t.ul,function(e,r){if(n)return t[n.toLowerCase()][r];var i=y.sortBy(y.pluck(t,r));return(i[1]+i[2])/2})}function p(t){var n,e=m.buildLayerMatrix(t),o=y.merge(r(t,e),i(t,e)),a={};y.each(["u","d"],function(r){n="u"===r?e:y.values(e).reverse(),y.each(["l","r"],function(e){"r"===e&&(n=y.map(n,function(t){return y.values(t).reverse()}));var i=y.bind("u"===r?t.predecessors:t.successors,t),u=c(t,n,o,i),f=s(t,n,u.root,u.align,"r"===e);"r"===e&&(f=y.mapValues(f,function(t){return-t})),a[r+e]=f})});var u=l(t,a);return h(a,u),d(a,t.graph().align)}function g(t,n,e){return function(r,i,o){var a,u=r.node(i),c=r.node(o),s=0;if(s+=u.width/2,y.has(u,"labelpos"))switch(u.labelpos.toLowerCase()){case"l":a=-u.width/2;break;case"r":a=u.width/2}if(a&&(s+=e?a:-a),a=0,s+=(u.dummy?n:t)/2,s+=(c.dummy?n:t)/2,s+=c.width/2,y.has(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=c.width/2;break;case"r":a=-c.width/2}return a&&(s+=e?a:-a),a=0,s}}function v(t,n){return t.node(n).width}var y=t("../lodash"),_=t("../graphlib").Graph,m=t("../util");n.exports={positionX:p,findType1Conflicts:r,findType2Conflicts:i,addConflict:a,hasConflict:u,verticalAlignment:c,horizontalCompaction:s,alignCoordinates:h,findSmallestWidthAlignment:l,balance:d}},{"../graphlib":35,"../lodash":38,"../util":57}],52:[function(t,n,e){"use strict";function r(t){t=a.asNonCompoundGraph(t),i(t),o.each(u(t),function(n,e){t.node(e).x=n})}function i(t){var n=a.buildLayerMatrix(t),e=t.graph().ranksep,r=0;o.each(n,function(n){var i=o.max(o.map(n,function(n){return t.node(n).height}));o.each(n,function(n){t.node(n).y=r+i/2}),r+=i+e})}var o=t("../lodash"),a=t("../util"),u=t("./bk").positionX;n.exports=r},{"../lodash":38,"../util":57,"./bk":51}],53:[function(t,n,e){"use strict";function r(t){var n=new c({directed:!1}),e=t.nodes()[0],r=t.nodeCount();n.setNode(e,{});for(var u,f;i(n,t)<r;)u=o(n,t),f=n.hasNode(u.v)?s(t,u):-s(t,u),a(n,t,f);return n}function i(t,n){function e(r){u.each(n.nodeEdges(r),function(i){var o=i.v,a=r===o?i.w:o;t.hasNode(a)||s(n,i)||(t.setNode(a,{}),t.setEdge(r,a,{}),e(a))})}return u.each(t.nodes(),e),t.nodeCount()}function o(t,n){return u.min(n.edges(),function(e){return t.hasNode(e.v)!==t.hasNode(e.w)?s(n,e):void 0})}function a(t,n,e){u.each(t.nodes(),function(t){n.node(t).rank+=e})}var u=t("../lodash"),c=t("../graphlib").Graph,s=t("./util").slack;n.exports=r},{"../graphlib":35,"../lodash":38,"./util":56}],54:[function(t,n,e){"use strict";function r(t){switch(t.graph().ranker){case"network-simplex":o(t);break;case"tight-tree":i(t);break;case"longest-path":f(t);break;default:o(t)}}function i(t){u(t),c(t)}function o(t){s(t)}var a=t("./util"),u=a.longestPath,c=t("./feasible-tree"),s=t("./network-simplex");n.exports=r;var f=u},{"./feasible-tree":53,"./network-simplex":55,"./util":56}],55:[function(t,n,e){"use strict";function r(t){t=b(t),_(t);var n=v(t);u(n),i(n,t);for(var e,r;e=s(n);)r=f(n,t,e),l(n,t,e,r)}function i(t,n){var e=w(t,t.nodes());e=e.slice(0,e.length-1),g.each(e,function(e){o(t,n,e)})}function o(t,n,e){var r=t.node(e),i=r.parent;t.edge(e,i).cutvalue=a(t,n,e)}function a(t,n,e){var r=t.node(e),i=r.parent,o=!0,a=n.edge(e,i),u=0;return a||(o=!1,a=n.edge(i,e)),u=a.weight,g.each(n.nodeEdges(e),function(r){var a=r.v===e,c=a?r.w:r.v;if(c!==i){var s=a===o,f=n.edge(r).weight;if(u+=s?f:-f,d(t,e,c)){var l=t.edge(e,c).cutvalue;u+=s?-l:l}}}),u}function u(t,n){arguments.length<2&&(n=t.nodes()[0]),c(t,{},1,n)}function c(t,n,e,r,i){var o=e,a=t.node(r);return n[r]=!0,g.each(t.neighbors(r),function(i){g.has(n,i)||(e=c(t,n,e,i,r))}),a.low=o,a.lim=e++,i?a.parent=i:delete a.parent,e}function s(t){return g.find(t.edges(),function(n){return t.edge(n).cutvalue<0})}function f(t,n,e){var r=e.v,i=e.w;n.hasEdge(r,i)||(r=e.w,i=e.v);var o=t.node(r),a=t.node(i),u=o,c=!1;o.lim>a.lim&&(u=a,c=!0);var s=g.filter(n.edges(),function(n){return c===p(t,t.node(n.v),u)&&c!==p(t,t.node(n.w),u)});return g.min(s,function(t){return y(n,t)})}function l(t,n,e,r){var o=e.v,a=e.w;t.removeEdge(o,a),t.setEdge(r.v,r.w,{}),u(t),i(t,n),h(t,n)}function h(t,n){var e=g.find(t.nodes(),function(t){return!n.node(t).parent}),r=m(t,e);r=r.slice(1),g.each(r,function(e){var r=t.node(e).parent,i=n.edge(e,r),o=!1;i||(i=n.edge(r,e),o=!0),n.node(e).rank=n.node(r).rank+(o?i.minlen:-i.minlen)})}function d(t,n,e){return t.hasEdge(n,e)}function p(t,n,e){return e.low<=n.lim&&n.lim<=e.lim}var g=t("../lodash"),v=t("./feasible-tree"),y=t("./util").slack,_=t("./util").longestPath,m=t("../graphlib").alg.preorder,w=t("../graphlib").alg.postorder,b=t("../util").simplify;n.exports=r,r.initLowLimValues=u,r.initCutValues=i,r.calcCutValue=a,r.leaveEdge=s,r.enterEdge=f,r.exchangeEdges=l},{"../graphlib":35,"../lodash":38,"../util":57,"./feasible-tree":53,"./util":56}],56:[function(t,n,e){"use strict";function r(t){function n(r){var i=t.node(r);if(o.has(e,r))return i.rank;e[r]=!0;var a=o.min(o.map(t.outEdges(r),function(e){return n(e.w)-t.edge(e).minlen}));return a===Number.POSITIVE_INFINITY&&(a=0),i.rank=a}var e={};o.each(t.sources(),n)}function i(t,n){return t.node(n.w).rank-t.node(n.v).rank-t.edge(n).minlen}var o=t("../lodash");n.exports={longestPath:r,slack:i}},{"../lodash":38}],57:[function(t,n,e){"use strict";function r(t,n,e,r){var i;do i=y.uniqueId(r);while(t.hasNode(i));return e.dummy=n,t.setNode(i,e),i}function i(t){var n=(new _).setGraph(t.graph());return y.each(t.nodes(),function(e){n.setNode(e,t.node(e))}),y.each(t.edges(),function(e){var r=n.edge(e.v,e.w)||{weight:0,minlen:1},i=t.edge(e);n.setEdge(e.v,e.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})}),n}function o(t){var n=new _({multigraph:t.isMultigraph()}).setGraph(t.graph());return y.each(t.nodes(),function(e){t.children(e).length||n.setNode(e,t.node(e))}),y.each(t.edges(),function(e){n.setEdge(e,t.edge(e))}),n}function a(t){var n=y.map(t.nodes(),function(n){var e={};return y.each(t.outEdges(n),function(n){e[n.w]=(e[n.w]||0)+t.edge(n).weight}),e});return y.zipObject(t.nodes(),n)}function u(t){var n=y.map(t.nodes(),function(n){var e={};return y.each(t.inEdges(n),function(n){e[n.v]=(e[n.v]||0)+t.edge(n).weight}),e});return y.zipObject(t.nodes(),n)}function c(t,n){var e=t.x,r=t.y,i=n.x-e,o=n.y-r,a=t.width/2,u=t.height/2;if(!i&&!o)throw new Error("Not possible to find intersection inside of the rectangle");var c,s;return Math.abs(o)*a>Math.abs(i)*u?(0>o&&(u=-u),c=u*i/o,s=u):(0>i&&(a=-a),c=a,s=a*o/i),{x:e+c,y:r+s}}function s(t){var n=y.map(y.range(d(t)+1),function(){return[]});return y.each(t.nodes(),function(e){var r=t.node(e),i=r.rank;y.isUndefined(i)||(n[i][r.order]=e)}),n}function f(t){var n=y.min(y.map(t.nodes(),function(n){return t.node(n).rank}));y.each(t.nodes(),function(e){var r=t.node(e);y.has(r,"rank")&&(r.rank-=n)})}function l(t){var n=y.min(y.map(t.nodes(),function(n){return t.node(n).rank})),e=[];y.each(t.nodes(),function(r){var i=t.node(r).rank-n;e[i]||(e[i]=[]),e[i].push(r)});var r=0,i=t.graph().nodeRankFactor;y.each(e,function(n,e){y.isUndefined(n)&&e%i!==0?--r:r&&y.each(n,function(n){t.node(n).rank+=r})})}function h(t,n,e,i){var o={width:0,height:0};return arguments.length>=4&&(o.rank=e,o.order=i),r(t,"border",o,n)}function d(t){return y.max(y.map(t.nodes(),function(n){var e=t.node(n).rank;return y.isUndefined(e)?void 0:e}))}function p(t,n){var e={lhs:[],rhs:[]};return y.each(t,function(t){n(t)?e.lhs.push(t):e.rhs.push(t)}),e}function g(t,n){var e=y.now();try{return n()}finally{console.log(t+" time: "+(y.now()-e)+"ms")}}function v(t,n){return n()}var y=t("./lodash"),_=t("./graphlib").Graph;n.exports={addDummyNode:r,simplify:i,asNonCompoundGraph:o,successorWeights:a,predecessorWeights:u,intersectRect:c,buildLayerMatrix:s,normalizeRanks:f,removeEmptyRanks:l,addBorderNode:h,maxRank:d,partition:p,time:g,notime:v}},{"./graphlib":35,"./lodash":38}],58:[function(t,n,e){n.exports="0.7.3"},{}],59:[function(t,n,e){var r=t("./lib");n.exports={Graph:r.Graph,json:t("./lib/json"),alg:t("./lib/alg"),version:r.version}},{"./lib":75,"./lib/alg":66,"./lib/json":76}],60:[function(t,n,e){function r(t){function n(o){i.has(r,o)||(r[o]=!0,e.push(o),i.each(t.successors(o),n),i.each(t.predecessors(o),n))}var e,r={},o=[];return i.each(t.nodes(),function(t){e=[],n(t),e.length&&o.push(e)}),o}var i=t("../lodash");n.exports=r},{"../lodash":77}],61:[function(t,n,e){function r(t,n,e){o.isArray(n)||(n=[n]);var r=[],a={};return o.each(n,function(n){if(!t.hasNode(n))throw new Error("Graph does not have node: "+n);i(t,n,"post"===e,a,r)}),r}function i(t,n,e,r,a){o.has(r,n)||(r[n]=!0,e||a.push(n),o.each(t.neighbors(n),function(n){i(t,n,e,r,a)}),e&&a.push(n))}var o=t("../lodash");n.exports=r},{"../lodash":77}],62:[function(t,n,e){function r(t,n,e){return o.transform(t.nodes(),function(r,o){r[o]=i(t,o,n,e)},{})}var i=t("./dijkstra"),o=t("../lodash");n.exports=r},{"../lodash":77,"./dijkstra":63}],63:[function(t,n,e){function r(t,n,e,r){return i(t,String(n),e||u,r||function(n){return t.outEdges(n)})}function i(t,n,e,r){var i,o,u={},c=new a,s=function(t){var n=t.v!==i?t.v:t.w,r=u[n],a=e(t),s=o.distance+a;if(0>a)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+a);s<r.distance&&(r.distance=s,r.predecessor=i,c.decrease(n,s))};for(t.nodes().forEach(function(t){var e=t===n?0:Number.POSITIVE_INFINITY;u[t]={distance:e},c.add(t,e)});c.size()>0&&(i=c.removeMin(),o=u[i],o.distance!==Number.POSITIVE_INFINITY);)r(i).forEach(s);return u}var o=t("../lodash"),a=t("../data/priority-queue");n.exports=r;var u=o.constant(1)},{"../data/priority-queue":73,"../lodash":77}],64:[function(t,n,e){function r(t){return i.filter(o(t),function(n){return n.length>1||1===n.length&&t.hasEdge(n[0],n[0])})}var i=t("../lodash"),o=t("./tarjan");n.exports=r},{"../lodash":77,"./tarjan":71}],65:[function(t,n,e){function r(t,n,e){return i(t,n||a,e||function(n){return t.outEdges(n)})}function i(t,n,e){var r={},i=t.nodes();return i.forEach(function(t){r[t]={},r[t][t]={distance:0},i.forEach(function(n){t!==n&&(r[t][n]={distance:Number.POSITIVE_INFINITY})}),e(t).forEach(function(e){var i=e.v===t?e.w:e.v,o=n(e);r[t][i]={distance:o,predecessor:t}})}),i.forEach(function(t){var n=r[t];i.forEach(function(e){var o=r[e];i.forEach(function(e){var r=o[t],i=n[e],a=o[e],u=r.distance+i.distance;u<a.distance&&(a.distance=u,a.predecessor=i.predecessor)})})}),r}var o=t("../lodash");n.exports=r;var a=o.constant(1)},{"../lodash":77}],66:[function(t,n,e){n.exports={components:t("./components"),dijkstra:t("./dijkstra"),dijkstraAll:t("./dijkstra-all"),findCycles:t("./find-cycles"),floydWarshall:t("./floyd-warshall"),isAcyclic:t("./is-acyclic"),postorder:t("./postorder"),preorder:t("./preorder"),prim:t("./prim"),tarjan:t("./tarjan"),topsort:t("./topsort")}},{"./components":60,"./dijkstra":63,"./dijkstra-all":62,"./find-cycles":64,"./floyd-warshall":65,"./is-acyclic":67,"./postorder":68,"./preorder":69,"./prim":70,"./tarjan":71,"./topsort":72}],67:[function(t,n,e){function r(t){try{i(t)}catch(n){if(n instanceof i.CycleException)return!1;throw n}return!0}var i=t("./topsort");n.exports=r},{"./topsort":72}],68:[function(t,n,e){function r(t,n){return i(t,n,"post")}var i=t("./dfs");n.exports=r},{"./dfs":61}],69:[function(t,n,e){function r(t,n){return i(t,n,"pre")}var i=t("./dfs");n.exports=r},{"./dfs":61}],70:[function(t,n,e){function r(t,n){function e(t){var e=t.v===r?t.w:t.v,i=s.priority(e);if(void 0!==i){var o=n(t);i>o&&(c[e]=r,s.decrease(e,o))}}var r,u=new o,c={},s=new a;if(0===t.nodeCount())return u;i.each(t.nodes(),function(t){s.add(t,Number.POSITIVE_INFINITY),u.setNode(t)}),s.decrease(t.nodes()[0],0);for(var f=!1;s.size()>0;){if(r=s.removeMin(),i.has(c,r))u.setEdge(r,c[r]);else{if(f)throw new Error("Input graph is not connected: "+t);f=!0}t.nodeEdges(r).forEach(e)}return u}var i=t("../lodash"),o=t("../graph"),a=t("../data/priority-queue");n.exports=r},{"../data/priority-queue":73,"../graph":74,"../lodash":77}],71:[function(t,n,e){function r(t){function n(u){var c=o[u]={onStack:!0,lowlink:e,index:e++};if(r.push(u),t.successors(u).forEach(function(t){i.has(o,t)?o[t].onStack&&(c.lowlink=Math.min(c.lowlink,o[t].index)):(n(t),c.lowlink=Math.min(c.lowlink,o[t].lowlink))}),c.lowlink===c.index){var s,f=[];do s=r.pop(),o[s].onStack=!1,f.push(s);while(u!==s);a.push(f)}}var e=0,r=[],o={},a=[];return t.nodes().forEach(function(t){i.has(o,t)||n(t)}),a}var i=t("../lodash");n.exports=r},{"../lodash":77}],72:[function(t,n,e){function r(t){function n(u){if(o.has(r,u))throw new i;o.has(e,u)||(r[u]=!0,e[u]=!0,o.each(t.predecessors(u),n),delete r[u],a.push(u))}var e={},r={},a=[];if(o.each(t.sinks(),n),o.size(e)!==t.nodeCount())throw new i;return a}function i(){}var o=t("../lodash");n.exports=r,r.CycleException=i},{"../lodash":77}],73:[function(t,n,e){function r(){this._arr=[],this._keyIndices={}}var i=t("../lodash");n.exports=r,r.prototype.size=function(){return this._arr.length},r.prototype.keys=function(){return this._arr.map(function(t){return t.key})},r.prototype.has=function(t){return i.has(this._keyIndices,t)},r.prototype.priority=function(t){var n=this._keyIndices[t];return void 0!==n?this._arr[n].priority:void 0},r.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},r.prototype.add=function(t,n){var e=this._keyIndices;if(t=String(t),!i.has(e,t)){var r=this._arr,o=r.length;return e[t]=o,r.push({key:t,priority:n}),this._decrease(o),!0}return!1},r.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},r.prototype.decrease=function(t,n){var e=this._keyIndices[t];if(n>this._arr[e].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[e].priority+" New: "+n);this._arr[e].priority=n,this._decrease(e)},r.prototype._heapify=function(t){var n=this._arr,e=2*t,r=e+1,i=t;e<n.length&&(i=n[e].priority<n[i].priority?e:i,r<n.length&&(i=n[r].priority<n[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},r.prototype._decrease=function(t){for(var n,e=this._arr,r=e[t].priority;0!==t&&(n=t>>1,!(e[n].priority<r));)this._swap(t,n),t=n},r.prototype._swap=function(t,n){var e=this._arr,r=this._keyIndices,i=e[t],o=e[n];e[t]=o,e[n]=i,r[o.key]=t,r[i.key]=n}},{"../lodash":77}],74:[function(t,n,e){"use strict";function r(t){this._isDirected=s.has(t,"directed")?t.directed:!0,this._isMultigraph=s.has(t,"multigraph")?t.multigraph:!1,this._isCompound=s.has(t,"compound")?t.compound:!1,this._label=void 0,this._defaultNodeLabelFn=s.constant(void 0),this._defaultEdgeLabelFn=s.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[l]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function i(t,n){s.has(t,n)?t[n]++:t[n]=1}function o(t,n){--t[n]||delete t[n]}function a(t,n,e,r){if(!t&&n>e){var i=n;n=e,e=i}return n+h+e+h+(s.isUndefined(r)?f:r)}function u(t,n,e,r){if(!t&&n>e){var i=n;n=e,e=i}var o={v:n,w:e};return r&&(o.name=r),o}function c(t,n){return a(t,n.v,n.w,n.name)}var s=t("./lodash");n.exports=r;var f="\x00",l="\x00",h="";r.prototype._nodeCount=0,r.prototype._edgeCount=0,r.prototype.isDirected=function(){return this._isDirected},r.prototype.isMultigraph=function(){return this._isMultigraph},r.prototype.isCompound=function(){return this._isCompound},r.prototype.setGraph=function(t){return this._label=t,this},r.prototype.graph=function(){return this._label},r.prototype.setDefaultNodeLabel=function(t){return s.isFunction(t)||(t=s.constant(t)),this._defaultNodeLabelFn=t,this},r.prototype.nodeCount=function(){return this._nodeCount},r.prototype.nodes=function(){return s.keys(this._nodes)},r.prototype.sources=function(){return s.filter(this.nodes(),function(t){return s.isEmpty(this._in[t])},this)},r.prototype.sinks=function(){return s.filter(this.nodes(),function(t){return s.isEmpty(this._out[t])},this)},r.prototype.setNodes=function(t,n){var e=arguments;return s.each(t,function(t){e.length>1?this.setNode(t,n):this.setNode(t)},this),this},r.prototype.setNode=function(t,n){return s.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=n),this):(this._nodes[t]=arguments.length>1?n:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=l,this._children[t]={},this._children[l][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},r.prototype.node=function(t){return this._nodes[t]},r.prototype.hasNode=function(t){return s.has(this._nodes,t)},r.prototype.removeNode=function(t){var n=this;if(s.has(this._nodes,t)){var e=function(t){n.removeEdge(n._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],s.each(this.children(t),function(t){this.setParent(t)},this),delete this._children[t]),s.each(s.keys(this._in[t]),e),delete this._in[t],delete this._preds[t],s.each(s.keys(this._out[t]),e),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},r.prototype.setParent=function(t,n){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(s.isUndefined(n))n=l;else{n+="";for(var e=n;!s.isUndefined(e);e=this.parent(e))if(e===t)throw new Error("Setting "+n+" as parent of "+t+" would create create a cycle");this.setNode(n)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=n,this._children[n][t]=!0,this},r.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},r.prototype.parent=function(t){if(this._isCompound){var n=this._parent[t];if(n!==l)return n}},r.prototype.children=function(t){if(s.isUndefined(t)&&(t=l),this._isCompound){var n=this._children[t];if(n)return s.keys(n)}else{if(t===l)return this.nodes();if(this.hasNode(t))return[]}},r.prototype.predecessors=function(t){var n=this._preds[t];return n?s.keys(n):void 0},r.prototype.successors=function(t){var n=this._sucs[t];return n?s.keys(n):void 0},r.prototype.neighbors=function(t){var n=this.predecessors(t);return n?s.union(n,this.successors(t)):void 0},r.prototype.setDefaultEdgeLabel=function(t){return s.isFunction(t)||(t=s.constant(t)),this._defaultEdgeLabelFn=t,this},r.prototype.edgeCount=function(){return this._edgeCount},r.prototype.edges=function(){return s.values(this._edgeObjs)},r.prototype.setPath=function(t,n){var e=this,r=arguments;return s.reduce(t,function(t,i){return r.length>1?e.setEdge(t,i,n):e.setEdge(t,i),i}),this},r.prototype.setEdge=function(){var t,n,e,r,o=!1;s.isPlainObject(arguments[0])?(t=arguments[0].v,n=arguments[0].w,e=arguments[0].name,2===arguments.length&&(r=arguments[1],o=!0)):(t=arguments[0],n=arguments[1],e=arguments[3],arguments.length>2&&(r=arguments[2],o=!0)),t=""+t,n=""+n,s.isUndefined(e)||(e=""+e);var c=a(this._isDirected,t,n,e);if(s.has(this._edgeLabels,c))return o&&(this._edgeLabels[c]=r),this;if(!s.isUndefined(e)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(n),this._edgeLabels[c]=o?r:this._defaultEdgeLabelFn(t,n,e);var f=u(this._isDirected,t,n,e);return t=f.v,n=f.w,Object.freeze(f),this._edgeObjs[c]=f,i(this._preds[n],t),i(this._sucs[t],n),this._in[n][c]=f,this._out[t][c]=f,this._edgeCount++,this},r.prototype.edge=function(t,n,e){var r=1===arguments.length?c(this._isDirected,arguments[0]):a(this._isDirected,t,n,e);return this._edgeLabels[r]},r.prototype.hasEdge=function(t,n,e){var r=1===arguments.length?c(this._isDirected,arguments[0]):a(this._isDirected,t,n,e);return s.has(this._edgeLabels,r)},r.prototype.removeEdge=function(t,n,e){var r=1===arguments.length?c(this._isDirected,arguments[0]):a(this._isDirected,t,n,e),i=this._edgeObjs[r];return i&&(t=i.v,n=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[n],t),o(this._sucs[t],n),delete this._in[n][r],delete this._out[t][r],this._edgeCount--),this},r.prototype.inEdges=function(t,n){var e=this._in[t];if(e){var r=s.values(e);return n?s.filter(r,function(t){return t.v===n}):r}},r.prototype.outEdges=function(t,n){var e=this._out[t];if(e){var r=s.values(e);return n?s.filter(r,function(t){return t.w===n}):r}},r.prototype.nodeEdges=function(t,n){var e=this.inEdges(t,n);return e?e.concat(this.outEdges(t,n)):void 0}},{"./lodash":77}],75:[function(t,n,e){n.exports={Graph:t("./graph"),version:t("./version")}},{"./graph":74,"./version":78}],76:[function(t,n,e){function r(t){var n={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:i(t),edges:o(t)};return u.isUndefined(t.graph())||(n.value=u.clone(t.graph())),n}function i(t){return u.map(t.nodes(),function(n){var e=t.node(n),r=t.parent(n),i={v:n};return u.isUndefined(e)||(i.value=e),u.isUndefined(r)||(i.parent=r),i})}function o(t){return u.map(t.edges(),function(n){var e=t.edge(n),r={v:n.v,w:n.w};return u.isUndefined(n.name)||(r.name=n.name),u.isUndefined(e)||(r.value=e),r})}function a(t){var n=new c(t.options).setGraph(t.value);return u.each(t.nodes,function(t){n.setNode(t.v,t.value),t.parent&&n.setParent(t.v,t.parent)}),u.each(t.edges,function(t){n.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),n}var u=t("./lodash"),c=t("./graph");n.exports={write:r,read:a}},{"./graph":74,"./lodash":77}],77:[function(t,n,e){var r;if("function"==typeof t)try{r=t("lodash")}catch(i){}r||(r=window._),n.exports=r},{lodash:79}],78:[function(t,n,e){n.exports="1.0.5"},{}],79:[function(n,e,r){(function(n){(function(){function i(t,n){if(t!==n){var e=null===t,r=t===N,i=t===t,o=null===n,a=n===N,u=n===n;if(t>n&&!o||!i||e&&!a&&u||r&&u)return 1;if(n>t&&!e||!u||o&&!r&&i||a&&i)return-1}return 0}function o(t,n,e){for(var r=t.length,i=e?r:-1;e?i--:++i<r;)if(n(t[i],i,t))return i;return-1}function a(t,n,e){if(n!==n)return y(t,e);for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}function u(t){return"function"==typeof t||!1}function c(t){return null==t?"":t+""}function s(t,n){for(var e=-1,r=t.length;++e<r&&n.indexOf(t.charAt(e))>-1;);return e}function f(t,n){for(var e=t.length;e--&&n.indexOf(t.charAt(e))>-1;);return e}function l(t,n){return i(t.criteria,n.criteria)||t.index-n.index}function h(t,n,e){for(var r=-1,o=t.criteria,a=n.criteria,u=o.length,c=e.length;++r<u;){var s=i(o[r],a[r]);if(s){if(r>=c)return s;var f=e[r];return s*("asc"===f||f===!0?1:-1)}}return t.index-n.index}function d(t){return Vt[t]}function p(t){return Yt[t]}function g(t,n,e){return n?t=Ht[t]:e&&(t=Kt[t]),"\\"+t}function v(t){return"\\"+Kt[t]}function y(t,n,e){for(var r=t.length,i=n+(e?0:-1);e?i--:++i<r;){var o=t[i];if(o!==o)return i}return-1}function _(t){return!!t&&"object"==typeof t}function m(t){return 160>=t&&t>=9&&13>=t||32==t||160==t||5760==t||6158==t||t>=8192&&(8202>=t||8232==t||8233==t||8239==t||8287==t||12288==t||65279==t)}function w(t,n){for(var e=-1,r=t.length,i=-1,o=[];++e<r;)t[e]===n&&(t[e]=V,o[++i]=e);return o}function b(t,n){for(var e,r=-1,i=t.length,o=-1,a=[];++r<i;){var u=t[r],c=n?n(u,r,t):u;r&&e===c||(e=c,a[++o]=u)}return a}function x(t){for(var n=-1,e=t.length;++n<e&&m(t.charCodeAt(n)););return n}function k(t){for(var n=t.length;n--&&m(t.charCodeAt(n)););return n}function E(t){return $t[t]}function I(t){function n(t){if(_(t)&&!Ru(t)&&!(t instanceof m)){if(t instanceof r)return t;if(na.call(t,"__chain__")&&na.call(t,"__wrapped__"))return dr(t)}return new r(t)}function e(){}function r(t,n,e){this.__wrapped__=t,this.__actions__=e||[],this.__chain__=!!n}function m(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=ja,this.__views__=[]}function J(){var t=new m(this.__wrapped__);return t.__actions__=tn(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=tn(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=tn(this.__views__),t}function et(){if(this.__filtered__){var t=new m(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function it(){var t=this.__wrapped__.value(),n=this.__dir__,e=Ru(t),r=0>n,i=e?t.length:0,o=Ye(0,i,this.__views__),a=o.start,u=o.end,c=u-a,s=r?u:a-1,f=this.__iteratees__,l=f.length,h=0,d=ka(c,this.__takeCount__);if(!e||W>i||i==c&&d==c)return re(r&&e?t.reverse():t,this.__actions__);var p=[];t:for(;c--&&d>h;){s+=n;for(var g=-1,v=t[s];++g<l;){var y=f[g],_=y.iteratee,m=y.type,w=_(v);if(m==q)v=w;else if(!w){if(m==z)continue t;break t}}p[h++]=v}return p}function Vt(){this.__data__={}}function Yt(t){return this.has(t)&&delete this.__data__[t]}function $t(t){return"__proto__"==t?N:this.__data__[t]}function Xt(t){return"__proto__"!=t&&na.call(this.__data__,t)}function Ht(t,n){return"__proto__"!=t&&(this.__data__[t]=n),this}function Kt(t){var n=t?t.length:0;for(this.data={hash:ya(null),set:new la};n--;)this.push(t[n])}function Qt(t,n){var e=t.data,r="string"==typeof n||Si(n)?e.set.has(n):e.hash[n];return r?0:-1}function Jt(t){var n=this.data;"string"==typeof t||Si(t)?n.set.add(t):n.hash[t]=!0}function Zt(t,n){for(var e=-1,r=t.length,i=-1,o=n.length,a=Wo(r+o);++e<r;)a[e]=t[e];for(;++i<o;)a[e++]=n[i];return a}function tn(t,n){var e=-1,r=t.length;for(n||(n=Wo(r));++e<r;)n[e]=t[e];return n}function nn(t,n){for(var e=-1,r=t.length;++e<r&&n(t[e],e,t)!==!1;);return t}function en(t,n){for(var e=t.length;e--&&n(t[e],e,t)!==!1;);return t}function an(t,n){for(var e=-1,r=t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function un(t,n,e,r){for(var i=-1,o=t.length,a=r,u=a;++i<o;){var c=t[i],s=+n(c);e(s,a)&&(a=s,u=c)}return u}function cn(t,n){
for(var e=-1,r=t.length,i=-1,o=[];++e<r;){var a=t[e];n(a,e,t)&&(o[++i]=a)}return o}function sn(t,n){for(var e=-1,r=t.length,i=Wo(r);++e<r;)i[e]=n(t[e],e,t);return i}function fn(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function ln(t,n,e,r){var i=-1,o=t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function hn(t,n,e,r){var i=t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function dn(t,n){for(var e=-1,r=t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}function pn(t,n){for(var e=t.length,r=0;e--;)r+=+n(t[e])||0;return r}function gn(t,n){return t===N?n:t}function vn(t,n,e,r){return t!==N&&na.call(r,e)?t:n}function yn(t,n,e){for(var r=-1,i=Du(n),o=i.length;++r<o;){var a=i[r],u=t[a],c=e(u,n[a],a,t,n);(c===c?c===u:u!==u)&&(u!==N||a in t)||(t[a]=c)}return t}function _n(t,n){return null==n?t:wn(n,Du(n),t)}function mn(t,n){for(var e=-1,r=null==t,i=!r&&Qe(t),o=i?t.length:0,a=n.length,u=Wo(a);++e<a;){var c=n[e];u[e]=i?Je(c,o)?t[c]:N:r?N:t[c]}return u}function wn(t,n,e){e||(e={});for(var r=-1,i=n.length;++r<i;){var o=n[r];e[o]=t[o]}return e}function bn(t,n,e){var r=typeof t;return"function"==r?n===N?t:ae(t,n,e):null==t?jo:"object"==r?Dn(t):n===N?So(t):Wn(t,n)}function xn(t,n,e,r,i,o,a){var u;if(e&&(u=i?e(t,r,i):e(t)),u!==N)return u;if(!Si(t))return t;var c=Ru(t);if(c){if(u=$e(t),!n)return tn(t,u)}else{var s=ra.call(t),f=s==Q;if(s!=tt&&s!=Y&&(!f||i))return Gt[s]?He(t,s,n):i?t:{};if(u=Xe(f?{}:t),!n)return _n(u,t)}o||(o=[]),a||(a=[]);for(var l=o.length;l--;)if(o[l]==t)return a[l];return o.push(t),a.push(u),(c?nn:An)(t,function(r,i){u[i]=xn(r,n,e,i,t,o,a)}),u}function kn(t,n,e){if("function"!=typeof t)throw new Ko(G);return ha(function(){t.apply(N,e)},n)}function En(t,n){var e=t?t.length:0,r=[];if(!e)return r;var i=-1,o=qe(),u=o==a,c=u&&n.length>=W?ge(n):null,s=n.length;c&&(o=Qt,u=!1,n=c);t:for(;++i<e;){var f=t[i];if(u&&f===f){for(var l=s;l--;)if(n[l]===f)continue t;r.push(f)}else o(n,f,0)<0&&r.push(f)}return r}function In(t,n){var e=!0;return Ba(t,function(t,r,i){return e=!!n(t,r,i)}),e}function Nn(t,n,e,r){var i=r,o=i;return Ba(t,function(t,a,u){var c=+n(t,a,u);(e(c,i)||c===r&&c===o)&&(i=c,o=t)}),o}function Cn(t,n,e,r){var i=t.length;for(e=null==e?0:+e||0,0>e&&(e=-e>i?0:i+e),r=r===N||r>i?i:+r||0,0>r&&(r+=i),i=e>r?0:r>>>0,e>>>=0;i>e;)t[e++]=n;return t}function jn(t,n){var e=[];return Ba(t,function(t,r,i){n(t,r,i)&&e.push(t)}),e}function Rn(t,n,e,r){var i;return e(t,function(t,e,o){return n(t,e,o)?(i=r?e:t,!1):void 0}),i}function Tn(t,n,e,r){r||(r=[]);for(var i=-1,o=t.length;++i<o;){var a=t[i];_(a)&&Qe(a)&&(e||Ru(a)||Ii(a))?n?Tn(a,n,e,r):fn(r,a):e||(r[r.length]=a)}return r}function Ln(t,n){return Pa(t,n,to)}function An(t,n){return Pa(t,n,Du)}function On(t,n){return Fa(t,n,Du)}function Sn(t,n){for(var e=-1,r=n.length,i=-1,o=[];++e<r;){var a=n[e];Oi(t[a])&&(o[++i]=a)}return o}function Mn(t,n,e){if(null!=t){e!==N&&e in lr(t)&&(n=[e]);for(var r=0,i=n.length;null!=t&&i>r;)t=t[n[r++]];return r&&r==i?t:N}}function Bn(t,n,e,r,i,o){return t===n?!0:null==t||null==n||!Si(t)&&!_(n)?t!==t&&n!==n:Un(t,n,Bn,e,r,i,o)}function Un(t,n,e,r,i,o,a){var u=Ru(t),c=Ru(n),s=$,f=$;u||(s=ra.call(t),s==Y?s=tt:s!=tt&&(u=qi(t))),c||(f=ra.call(n),f==Y?f=tt:f!=tt&&(c=qi(n)));var l=s==tt,h=f==tt,d=s==f;if(d&&!u&&!l)return Fe(t,n,s);if(!i){var p=l&&na.call(t,"__wrapped__"),g=h&&na.call(n,"__wrapped__");if(p||g)return e(p?t.value():t,g?n.value():n,r,i,o,a)}if(!d)return!1;o||(o=[]),a||(a=[]);for(var v=o.length;v--;)if(o[v]==t)return a[v]==n;o.push(t),a.push(n);var y=(u?Pe:De)(t,n,e,r,i,o,a);return o.pop(),a.pop(),y}function Pn(t,n,e){var r=n.length,i=r,o=!e;if(null==t)return!i;for(t=lr(t);r--;){var a=n[r];if(o&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++r<i;){a=n[r];var u=a[0],c=t[u],s=a[1];if(o&&a[2]){if(c===N&&!(u in t))return!1}else{var f=e?e(c,s,u):N;if(!(f===N?Bn(s,c,e,!0):f))return!1}}return!0}function Fn(t,n){var e=-1,r=Qe(t)?Wo(t.length):[];return Ba(t,function(t,i,o){r[++e]=n(t,i,o)}),r}function Dn(t){var n=Ge(t);if(1==n.length&&n[0][2]){var e=n[0][0],r=n[0][1];return function(t){return null==t?!1:t[e]===r&&(r!==N||e in lr(t))}}return function(t){return Pn(t,n)}}function Wn(t,n){var e=Ru(t),r=tr(t)&&rr(n),i=t+"";return t=hr(t),function(o){if(null==o)return!1;var a=i;if(o=lr(o),!(!e&&r||a in o)){if(o=1==t.length?o:Mn(o,Hn(t,0,-1)),null==o)return!1;a=Nr(t),o=lr(o)}return o[a]===n?n!==N||a in o:Bn(n,o[a],N,!0)}}function zn(t,n,e,r,i){if(!Si(t))return t;var o=Qe(n)&&(Ru(n)||qi(n)),a=o?N:Du(n);return nn(a||n,function(u,c){if(a&&(c=u,u=n[c]),_(u))r||(r=[]),i||(i=[]),qn(t,n,c,zn,e,r,i);else{var s=t[c],f=e?e(s,u,c,t,n):N,l=f===N;l&&(f=u),f===N&&(!o||c in t)||!l&&(f===f?f===s:s!==s)||(t[c]=f)}}),t}function qn(t,n,e,r,i,o,a){for(var u=o.length,c=n[e];u--;)if(o[u]==c)return void(t[e]=a[u]);var s=t[e],f=i?i(s,c,e,t,n):N,l=f===N;l&&(f=c,Qe(c)&&(Ru(c)||qi(c))?f=Ru(s)?s:Qe(s)?tn(s):[]:Di(c)||Ii(c)?f=Ii(s)?Xi(s):Di(s)?s:{}:l=!1),o.push(c),a.push(f),l?t[e]=r(f,c,i,o,a):(f===f?f!==s:s===s)&&(t[e]=f)}function Gn(t){return function(n){return null==n?N:n[t]}}function Vn(t){var n=t+"";return t=hr(t),function(e){return Mn(e,t,n)}}function Yn(t,n){for(var e=t?n.length:0;e--;){var r=n[e];if(r!=i&&Je(r)){var i=r;da.call(t,r,1)}}return t}function $n(t,n){return t+_a(Na()*(n-t+1))}function Xn(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function Hn(t,n,e){var r=-1,i=t.length;n=null==n?0:+n||0,0>n&&(n=-n>i?0:i+n),e=e===N||e>i?i:+e||0,0>e&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var o=Wo(i);++r<i;)o[r]=t[r+n];return o}function Kn(t,n){var e;return Ba(t,function(t,r,i){return e=n(t,r,i),!e}),!!e}function Qn(t,n){var e=t.length;for(t.sort(n);e--;)t[e]=t[e].value;return t}function Jn(t,n,e){var r=We(),i=-1;n=sn(n,function(t){return r(t)});var o=Fn(t,function(t){var e=sn(n,function(n){return n(t)});return{criteria:e,index:++i,value:t}});return Qn(o,function(t,n){return h(t,n,e)})}function Zn(t,n){var e=0;return Ba(t,function(t,r,i){e+=+n(t,r,i)||0}),e}function te(t,n){var e=-1,r=qe(),i=t.length,o=r==a,u=o&&i>=W,c=u?ge():null,s=[];c?(r=Qt,o=!1):(u=!1,c=n?[]:s);t:for(;++e<i;){var f=t[e],l=n?n(f,e,t):f;if(o&&f===f){for(var h=c.length;h--;)if(c[h]===l)continue t;n&&c.push(l),s.push(f)}else r(c,l,0)<0&&((n||u)&&c.push(l),s.push(f))}return s}function ne(t,n){for(var e=-1,r=n.length,i=Wo(r);++e<r;)i[e]=t[n[e]];return i}function ee(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?Hn(t,r?0:o,r?o+1:i):Hn(t,r?o+1:0,r?i:o)}function re(t,n){var e=t;e instanceof m&&(e=e.value());for(var r=-1,i=n.length;++r<i;){var o=n[r];e=o.func.apply(o.thisArg,fn([e],o.args))}return e}function ie(t,n,e){var r=0,i=t?t.length:r;if("number"==typeof n&&n===n&&La>=i){for(;i>r;){var o=r+i>>>1,a=t[o];(e?n>=a:n>a)&&null!==a?r=o+1:i=o}return i}return oe(t,n,jo,e)}function oe(t,n,e,r){n=e(n);for(var i=0,o=t?t.length:0,a=n!==n,u=null===n,c=n===N;o>i;){var s=_a((i+o)/2),f=e(t[s]),l=f!==N,h=f===f;if(a)var d=h||r;else d=u?h&&l&&(r||null!=f):c?h&&(r||l):null==f?!1:r?n>=f:n>f;d?i=s+1:o=s}return ka(o,Ta)}function ae(t,n,e){if("function"!=typeof t)return jo;if(n===N)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 3:return function(e,r,i){return t.call(n,e,r,i)};case 4:return function(e,r,i,o){return t.call(n,e,r,i,o)};case 5:return function(e,r,i,o,a){return t.call(n,e,r,i,o,a)}}return function(){return t.apply(n,arguments)}}function ue(t){var n=new aa(t.byteLength),e=new pa(n);return e.set(new pa(t)),n}function ce(t,n,e){for(var r=e.length,i=-1,o=xa(t.length-r,0),a=-1,u=n.length,c=Wo(u+o);++a<u;)c[a]=n[a];for(;++i<r;)c[e[i]]=t[i];for(;o--;)c[a++]=t[i++];return c}function se(t,n,e){for(var r=-1,i=e.length,o=-1,a=xa(t.length-i,0),u=-1,c=n.length,s=Wo(a+c);++o<a;)s[o]=t[o];for(var f=o;++u<c;)s[f+u]=n[u];for(;++r<i;)s[f+e[r]]=t[o++];return s}function fe(t,n){return function(e,r,i){var o=n?n():{};if(r=We(r,i,3),Ru(e))for(var a=-1,u=e.length;++a<u;){var c=e[a];t(o,c,r(c,a,e),e)}else Ba(e,function(n,e,i){t(o,n,r(n,e,i),i)});return o}}function le(t){return yi(function(n,e){var r=-1,i=null==n?0:e.length,o=i>2?e[i-2]:N,a=i>2?e[2]:N,u=i>1?e[i-1]:N;for("function"==typeof o?(o=ae(o,u,5),i-=2):(o="function"==typeof u?u:N,i-=o?1:0),a&&Ze(e[0],e[1],a)&&(o=3>i?N:o,i=1);++r<i;){var c=e[r];c&&t(n,c,o)}return n})}function he(t,n){return function(e,r){var i=e?za(e):0;if(!er(i))return t(e,r);for(var o=n?i:-1,a=lr(e);(n?o--:++o<i)&&r(a[o],o,a)!==!1;);return e}}function de(t){return function(n,e,r){for(var i=lr(n),o=r(n),a=o.length,u=t?a:-1;t?u--:++u<a;){var c=o[u];if(e(i[c],c,i)===!1)break}return n}}function pe(t,n){function e(){var i=this&&this!==rn&&this instanceof e?r:t;return i.apply(n,arguments)}var r=ye(t);return e}function ge(t){return ya&&la?new Kt(t):null}function ve(t){return function(n){for(var e=-1,r=Io(fo(n)),i=r.length,o="";++e<i;)o=t(o,r[e],e);return o}}function ye(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Ma(t.prototype),r=t.apply(e,n);return Si(r)?r:e}}function _e(t){function n(e,r,i){i&&Ze(e,r,i)&&(r=N);var o=Ue(e,t,N,N,N,N,N,r);return o.placeholder=n.placeholder,o}return n}function me(t,n){return yi(function(e){var r=e[0];return null==r?r:(e.push(n),t.apply(N,e))})}function we(t,n){return function(e,r,i){if(i&&Ze(e,r,i)&&(r=N),r=We(r,i,3),1==r.length){e=Ru(e)?e:fr(e);var o=un(e,r,t,n);if(!e.length||o!==n)return o}return Nn(e,r,t,n)}}function be(t,n){return function(e,r,i){if(r=We(r,i,3),Ru(e)){var a=o(e,r,n);return a>-1?e[a]:N}return Rn(e,r,t)}}function xe(t){return function(n,e,r){return n&&n.length?(e=We(e,r,3),o(n,e,t)):-1}}function ke(t){return function(n,e,r){return e=We(e,r,3),Rn(n,e,t,!0)}}function Ee(t){return function(){for(var n,e=arguments.length,i=t?e:-1,o=0,a=Wo(e);t?i--:++i<e;){var u=a[o++]=arguments[i];if("function"!=typeof u)throw new Ko(G);!n&&r.prototype.thru&&"wrapper"==ze(u)&&(n=new r([],!0))}for(i=n?-1:e;++i<e;){u=a[i];var c=ze(u),s="wrapper"==c?Wa(u):N;n=s&&nr(s[0])&&s[1]==(M|L|O|B)&&!s[4].length&&1==s[9]?n[ze(s[0])].apply(n,s[3]):1==u.length&&nr(u)?n[c]():n.thru(u)}return function(){var t=arguments,r=t[0];if(n&&1==t.length&&Ru(r)&&r.length>=W)return n.plant(r).value();for(var i=0,o=e?a[i].apply(this,t):r;++i<e;)o=a[i].call(this,o);return o}}}function Ie(t,n){return function(e,r,i){return"function"==typeof r&&i===N&&Ru(e)?t(e,r):n(e,ae(r,i,3))}}function Ne(t){return function(n,e,r){return("function"!=typeof e||r!==N)&&(e=ae(e,r,3)),t(n,e,to)}}function Ce(t){return function(n,e,r){return("function"!=typeof e||r!==N)&&(e=ae(e,r,3)),t(n,e)}}function je(t){return function(n,e,r){var i={};return e=We(e,r,3),An(n,function(n,r,o){var a=e(n,r,o);r=t?a:r,n=t?n:a,i[r]=n}),i}}function Re(t){return function(n,e,r){return n=c(n),(t?n:"")+Oe(n,e,r)+(t?"":n)}}function Te(t){var n=yi(function(e,r){var i=w(r,n.placeholder);return Ue(e,t,N,r,i)});return n}function Le(t,n){return function(e,r,i,o){var a=arguments.length<3;return"function"==typeof r&&o===N&&Ru(e)?t(e,r,i,a):Xn(e,We(r,o,4),i,a,n)}}function Ae(t,n,e,r,i,o,a,u,c,s){function f(){for(var _=arguments.length,m=_,b=Wo(_);m--;)b[m]=arguments[m];if(r&&(b=ce(b,r,i)),o&&(b=se(b,o,a)),p||v){var x=f.placeholder,k=w(b,x);if(_-=k.length,s>_){var E=u?tn(u):N,I=xa(s-_,0),C=p?k:N,T=p?N:k,L=p?b:N,A=p?N:b;n|=p?O:S,n&=~(p?S:O),g||(n&=~(j|R));var M=[t,n,e,L,C,A,T,E,c,I],B=Ae.apply(N,M);return nr(t)&&qa(B,M),B.placeholder=x,B}}var U=h?e:this,P=d?U[t]:t;return u&&(b=cr(b,u)),l&&c<b.length&&(b.length=c),this&&this!==rn&&this instanceof f&&(P=y||ye(t)),P.apply(U,b)}var l=n&M,h=n&j,d=n&R,p=n&L,g=n&T,v=n&A,y=d?N:ye(t);return f}function Oe(t,n,e){var r=t.length;if(n=+n,r>=n||!wa(n))return"";var i=n-r;return e=null==e?" ":e+"",yo(e,va(i/e.length)).slice(0,i)}function Se(t,n,e,r){function i(){for(var n=-1,u=arguments.length,c=-1,s=r.length,f=Wo(s+u);++c<s;)f[c]=r[c];for(;u--;)f[c++]=arguments[++n];var l=this&&this!==rn&&this instanceof i?a:t;return l.apply(o?e:this,f)}var o=n&j,a=ye(t);return i}function Me(t){var n=Vo[t];return function(t,e){return e=e===N?0:+e||0,e?(e=sa(10,e),n(t*e)/e):n(t)}}function Be(t){return function(n,e,r,i){var o=We(r);return null==r&&o===bn?ie(n,e,t):oe(n,e,o(r,i,1),t)}}function Ue(t,n,e,r,i,o,a,u){var c=n&R;if(!c&&"function"!=typeof t)throw new Ko(G);var s=r?r.length:0;if(s||(n&=~(O|S),r=i=N),s-=i?i.length:0,n&S){var f=r,l=i;r=i=N}var h=c?N:Wa(t),d=[t,n,e,r,i,f,l,o,a,u];if(h&&(ir(d,h),n=d[1],u=d[9]),d[9]=null==u?c?0:t.length:xa(u-s,0)||0,n==j)var p=pe(d[0],d[2]);else p=n!=O&&n!=(j|O)||d[4].length?Ae.apply(N,d):Se.apply(N,d);var g=h?Da:qa;return g(p,d)}function Pe(t,n,e,r,i,o,a){var u=-1,c=t.length,s=n.length;if(c!=s&&!(i&&s>c))return!1;for(;++u<c;){var f=t[u],l=n[u],h=r?r(i?l:f,i?f:l,u):N;if(h!==N){if(h)continue;return!1}if(i){if(!dn(n,function(t){return f===t||e(f,t,r,i,o,a)}))return!1}else if(f!==l&&!e(f,l,r,i,o,a))return!1}return!0}function Fe(t,n,e){switch(e){case X:case H:return+t==+n;case K:return t.name==n.name&&t.message==n.message;case Z:return t!=+t?n!=+n:t==+n;case nt:case rt:return t==n+""}return!1}function De(t,n,e,r,i,o,a){var u=Du(t),c=u.length,s=Du(n),f=s.length;if(c!=f&&!i)return!1;for(var l=c;l--;){var h=u[l];if(!(i?h in n:na.call(n,h)))return!1}for(var d=i;++l<c;){h=u[l];var p=t[h],g=n[h],v=r?r(i?g:p,i?p:g,h):N;if(!(v===N?e(p,g,r,i,o,a):v))return!1;d||(d="constructor"==h)}if(!d){var y=t.constructor,_=n.constructor;if(y!=_&&"constructor"in t&&"constructor"in n&&!("function"==typeof y&&y instanceof y&&"function"==typeof _&&_ instanceof _))return!1}return!0}function We(t,e,r){var i=n.callback||No;return i=i===No?bn:i,r?i(t,e,r):i}function ze(t){for(var n=t.name,e=Sa[n],r=e?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function qe(t,e,r){var i=n.indexOf||Er;return i=i===Er?a:i,t?i(t,e,r):i}function Ge(t){for(var n=no(t),e=n.length;e--;)n[e][2]=rr(n[e][1]);return n}function Ve(t,n){var e=null==t?N:t[n];return Ui(e)?e:N}function Ye(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],a=o.size;switch(o.type){case"drop":t+=a;break;case"dropRight":n-=a;break;case"take":n=ka(n,t+a);break;case"takeRight":t=xa(t,n-a)}}return{start:t,end:n}}function $e(t){var n=t.length,e=new t.constructor(n);return n&&"string"==typeof t[0]&&na.call(t,"index")&&(e.index=t.index,e.input=t.input),e}function Xe(t){var n=t.constructor;return"function"==typeof n&&n instanceof n||(n=$o),new n}function He(t,n,e){var r=t.constructor;switch(n){case ot:return ue(t);case X:case H:return new r(+t);case at:case ut:case ct:case st:case ft:case lt:case ht:case dt:case pt:var i=t.buffer;return new r(e?ue(i):i,t.byteOffset,t.length);case Z:case rt:return new r(t);case nt:var o=new r(t.source,Ot.exec(t));o.lastIndex=t.lastIndex}return o}function Ke(t,n,e){null==t||tr(n,t)||(n=hr(n),t=1==n.length?t:Mn(t,Hn(n,0,-1)),n=Nr(n));var r=null==t?t:t[n];return null==r?N:r.apply(t,e)}function Qe(t){return null!=t&&er(za(t))}function Je(t,n){return t="number"==typeof t||Bt.test(t)?+t:-1,n=null==n?Aa:n,t>-1&&t%1==0&&n>t}function Ze(t,n,e){if(!Si(e))return!1;var r=typeof n;if("number"==r?Qe(e)&&Je(n,e.length):"string"==r&&n in e){var i=e[n];return t===t?t===i:i!==i}return!1}function tr(t,n){var e=typeof t;if("string"==e&&Nt.test(t)||"number"==e)return!0;if(Ru(t))return!1;var r=!It.test(t);return r||null!=n&&t in lr(n)}function nr(t){var e=ze(t);if(!(e in m.prototype))return!1;var r=n[e];if(t===r)return!0;var i=Wa(r);return!!i&&t===i[0]}function er(t){return"number"==typeof t&&t>-1&&t%1==0&&Aa>=t}function rr(t){return t===t&&!Si(t)}function ir(t,n){var e=t[1],r=n[1],i=e|r,o=M>i,a=r==M&&e==L||r==M&&e==B&&t[7].length<=n[8]||r==(M|B)&&e==L;if(!o&&!a)return t;r&j&&(t[2]=n[2],i|=e&j?0:T);var u=n[3];if(u){var c=t[3];t[3]=c?ce(c,u,n[4]):tn(u),t[4]=c?w(t[3],V):tn(n[4])}return u=n[5],u&&(c=t[5],t[5]=c?se(c,u,n[6]):tn(u),t[6]=c?w(t[5],V):tn(n[6])),u=n[7],u&&(t[7]=tn(u)),r&M&&(t[8]=null==t[8]?n[8]:ka(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i,t}function or(t,n){return t===N?n:Tu(t,n,or)}function ar(t,n){t=lr(t);for(var e=-1,r=n.length,i={};++e<r;){var o=n[e];o in t&&(i[o]=t[o])}return i}function ur(t,n){var e={};return Ln(t,function(t,r,i){n(t,r,i)&&(e[r]=t)}),e}function cr(t,n){for(var e=t.length,r=ka(n.length,e),i=tn(t);r--;){var o=n[r];t[r]=Je(o,e)?i[o]:N}return t}function sr(t){for(var n=to(t),e=n.length,r=e&&t.length,i=!!r&&er(r)&&(Ru(t)||Ii(t)),o=-1,a=[];++o<e;){var u=n[o];(i&&Je(u,r)||na.call(t,u))&&a.push(u)}return a}function fr(t){return null==t?[]:Qe(t)?Si(t)?t:$o(t):oo(t)}function lr(t){return Si(t)?t:$o(t)}function hr(t){if(Ru(t))return t;var n=[];return c(t).replace(Ct,function(t,e,r,i){n.push(r?i.replace(Lt,"$1"):e||t)}),n}function dr(t){return t instanceof m?t.clone():new r(t.__wrapped__,t.__chain__,tn(t.__actions__))}function pr(t,n,e){n=(e?Ze(t,n,e):null==n)?1:xa(_a(n)||1,1);for(var r=0,i=t?t.length:0,o=-1,a=Wo(va(i/n));i>r;)a[++o]=Hn(t,r,r+=n);return a}function gr(t){for(var n=-1,e=t?t.length:0,r=-1,i=[];++n<e;){var o=t[n];o&&(i[++r]=o)}return i}function vr(t,n,e){var r=t?t.length:0;return r?((e?Ze(t,n,e):null==n)&&(n=1),Hn(t,0>n?0:n)):[]}function yr(t,n,e){var r=t?t.length:0;return r?((e?Ze(t,n,e):null==n)&&(n=1),n=r-(+n||0),Hn(t,0,0>n?0:n)):[]}function _r(t,n,e){return t&&t.length?ee(t,We(n,e,3),!0,!0):[]}function mr(t,n,e){return t&&t.length?ee(t,We(n,e,3),!0):[]}function wr(t,n,e,r){var i=t?t.length:0;return i?(e&&"number"!=typeof e&&Ze(t,n,e)&&(e=0,r=i),Cn(t,n,e,r)):[]}function br(t){return t?t[0]:N}function xr(t,n,e){var r=t?t.length:0;return e&&Ze(t,n,e)&&(n=!1),r?Tn(t,n):[]}function kr(t){var n=t?t.length:0;return n?Tn(t,!0):[]}function Er(t,n,e){var r=t?t.length:0;if(!r)return-1;if("number"==typeof e)e=0>e?xa(r+e,0):e;else if(e){var i=ie(t,n);return r>i&&(n===n?n===t[i]:t[i]!==t[i])?i:-1}return a(t,n,e||0)}function Ir(t){return yr(t,1)}function Nr(t){var n=t?t.length:0;return n?t[n-1]:N}function Cr(t,n,e){var r=t?t.length:0;if(!r)return-1;var i=r;if("number"==typeof e)i=(0>e?xa(r+e,0):ka(e||0,r-1))+1;else if(e){i=ie(t,n,!0)-1;var o=t[i];return(n===n?n===o:o!==o)?i:-1}if(n!==n)return y(t,i,!0);for(;i--;)if(t[i]===n)return i;return-1}function jr(){var t=arguments,n=t[0];if(!n||!n.length)return n;for(var e=0,r=qe(),i=t.length;++e<i;)for(var o=0,a=t[e];(o=r(n,a,o))>-1;)da.call(n,o,1);return n}function Rr(t,n,e){var r=[];if(!t||!t.length)return r;var i=-1,o=[],a=t.length;for(n=We(n,e,3);++i<a;){var u=t[i];n(u,i,t)&&(r.push(u),o.push(i))}return Yn(t,o),r}function Tr(t){return vr(t,1)}function Lr(t,n,e){var r=t?t.length:0;return r?(e&&"number"!=typeof e&&Ze(t,n,e)&&(n=0,e=r),Hn(t,n,e)):[]}function Ar(t,n,e){var r=t?t.length:0;return r?((e?Ze(t,n,e):null==n)&&(n=1),Hn(t,0,0>n?0:n)):[]}function Or(t,n,e){var r=t?t.length:0;return r?((e?Ze(t,n,e):null==n)&&(n=1),n=r-(+n||0),Hn(t,0>n?0:n)):[]}function Sr(t,n,e){return t&&t.length?ee(t,We(n,e,3),!1,!0):[]}function Mr(t,n,e){return t&&t.length?ee(t,We(n,e,3)):[]}function Br(t,n,e,r){var i=t?t.length:0;if(!i)return[];null!=n&&"boolean"!=typeof n&&(r=e,e=Ze(t,n,r)?N:n,n=!1);var o=We();return(null!=e||o!==bn)&&(e=o(e,r,3)),n&&qe()==a?b(t,e):te(t,e)}function Ur(t){if(!t||!t.length)return[];var n=-1,e=0;t=cn(t,function(t){return Qe(t)?(e=xa(t.length,e),!0):void 0});for(var r=Wo(e);++n<e;)r[n]=sn(t,Gn(n));return r}function Pr(t,n,e){var r=t?t.length:0;if(!r)return[];var i=Ur(t);return null==n?i:(n=ae(n,e,4),sn(i,function(t){return ln(t,n,N,!0)}))}function Fr(){for(var t=-1,n=arguments.length;++t<n;){var e=arguments[t];if(Qe(e))var r=r?fn(En(r,e),En(e,r)):e}return r?te(r):[]}function Dr(t,n){var e=-1,r=t?t.length:0,i={};for(!r||n||Ru(t[0])||(n=[]);++e<r;){var o=t[e];n?i[o]=n[e]:o&&(i[o[0]]=o[1])}return i}function Wr(t){var e=n(t);return e.__chain__=!0,e}function zr(t,n,e){return n.call(e,t),t}function qr(t,n,e){return n.call(e,t)}function Gr(){return Wr(this)}function Vr(){return new r(this.value(),this.__chain__)}function Yr(t){for(var n,r=this;r instanceof e;){var i=dr(r);n?o.__wrapped__=i:n=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,n}function $r(){var t=this.__wrapped__,n=function(t){return e&&e.__dir__<0?t:t.reverse()};if(t instanceof m){var e=t;return this.__actions__.length&&(e=new m(this)),e=e.reverse(),e.__actions__.push({func:qr,args:[n],thisArg:N}),new r(e,this.__chain__)}return this.thru(n)}function Xr(){return this.value()+""}function Hr(){return re(this.__wrapped__,this.__actions__)}function Kr(t,n,e){var r=Ru(t)?an:In;return e&&Ze(t,n,e)&&(n=N),("function"!=typeof n||e!==N)&&(n=We(n,e,3)),r(t,n)}function Qr(t,n,e){var r=Ru(t)?cn:jn;return n=We(n,e,3),r(t,n)}function Jr(t,n){return iu(t,Dn(n))}function Zr(t,n,e,r){var i=t?za(t):0;return er(i)||(t=oo(t),i=t.length),e="number"!=typeof e||r&&Ze(n,e,r)?0:0>e?xa(i+e,0):e||0,"string"==typeof t||!Ru(t)&&zi(t)?i>=e&&t.indexOf(n,e)>-1:!!i&&qe(t,n,e)>-1}function ti(t,n,e){var r=Ru(t)?sn:Fn;return n=We(n,e,3),r(t,n)}function ni(t,n){return ti(t,So(n))}function ei(t,n,e){var r=Ru(t)?cn:jn;return n=We(n,e,3),r(t,function(t,e,r){return!n(t,e,r)})}function ri(t,n,e){if(e?Ze(t,n,e):null==n){t=fr(t);var r=t.length;return r>0?t[$n(0,r-1)]:N}var i=-1,o=$i(t),r=o.length,a=r-1;for(n=ka(0>n?0:+n||0,r);++i<n;){var u=$n(i,a),c=o[u];o[u]=o[i],o[i]=c}return o.length=n,o}function ii(t){return ri(t,ja)}function oi(t){var n=t?za(t):0;return er(n)?n:Du(t).length}function ai(t,n,e){var r=Ru(t)?dn:Kn;return e&&Ze(t,n,e)&&(n=N),("function"!=typeof n||e!==N)&&(n=We(n,e,3)),r(t,n)}function ui(t,n,e){if(null==t)return[];e&&Ze(t,n,e)&&(n=N);var r=-1;n=We(n,e,3);var i=Fn(t,function(t,e,i){return{criteria:n(t,e,i),index:++r,value:t}});return Qn(i,l)}function ci(t,n,e,r){return null==t?[]:(r&&Ze(n,e,r)&&(e=N),Ru(n)||(n=null==n?[]:[n]),Ru(e)||(e=null==e?[]:[e]),Jn(t,n,e))}function si(t,n){return Qr(t,Dn(n))}function fi(t,n){if("function"!=typeof n){if("function"!=typeof t)throw new Ko(G);var e=t;t=n,n=e}return t=wa(t=+t)?t:0,function(){return--t<1?n.apply(this,arguments):void 0}}function li(t,n,e){return e&&Ze(t,n,e)&&(n=N),n=t&&null==n?t.length:xa(+n||0,0),Ue(t,M,N,N,N,N,n)}function hi(t,n){var e;if("function"!=typeof n){if("function"!=typeof t)throw new Ko(G);var r=t;t=n,n=r}return function(){return--t>0&&(e=n.apply(this,arguments)),1>=t&&(n=N),e}}function di(t,n,e){function r(){d&&ua(d),s&&ua(s),g=0,s=d=p=N}function i(n,e){e&&ua(e),s=d=p=N,n&&(g=gu(),f=t.apply(h,c),d||s||(c=h=N))}function o(){var t=n-(gu()-l);0>=t||t>n?i(p,s):d=ha(o,t)}function a(){i(y,d)}function u(){if(c=arguments,l=gu(),h=this,p=y&&(d||!_),v===!1)var e=_&&!d;else{s||_||(g=l);var r=v-(l-g),i=0>=r||r>v;i?(s&&(s=ua(s)),g=l,f=t.apply(h,c)):s||(s=ha(a,r))}return i&&d?d=ua(d):d||n===v||(d=ha(o,n)),e&&(i=!0,f=t.apply(h,c)),!i||d||s||(c=h=N),f}var c,s,f,l,h,d,p,g=0,v=!1,y=!0;if("function"!=typeof t)throw new Ko(G);if(n=0>n?0:+n||0,e===!0){var _=!0;y=!1}else Si(e)&&(_=!!e.leading,v="maxWait"in e&&xa(+e.maxWait||0,n),y="trailing"in e?!!e.trailing:y);return u.cancel=r,u}function pi(t,n){if("function"!=typeof t||n&&"function"!=typeof n)throw new Ko(G);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return e.cache=o.set(i,a),a};return e.cache=new pi.Cache,e}function gi(t){if("function"!=typeof t)throw new Ko(G);return function(){return!t.apply(this,arguments)}}function vi(t){return hi(2,t)}function yi(t,n){if("function"!=typeof t)throw new Ko(G);return n=xa(n===N?t.length-1:+n||0,0),function(){for(var e=arguments,r=-1,i=xa(e.length-n,0),o=Wo(i);++r<i;)o[r]=e[n+r];switch(n){case 0:return t.call(this,o);case 1:return t.call(this,e[0],o);case 2:return t.call(this,e[0],e[1],o)}var a=Wo(n+1);for(r=-1;++r<n;)a[r]=e[r];return a[n]=o,t.apply(this,a)}}function _i(t){if("function"!=typeof t)throw new Ko(G);return function(n){return t.apply(this,n)}}function mi(t,n,e){var r=!0,i=!0;if("function"!=typeof t)throw new Ko(G);return e===!1?r=!1:Si(e)&&(r="leading"in e?!!e.leading:r,i="trailing"in e?!!e.trailing:i),di(t,n,{leading:r,maxWait:+n,trailing:i})}function wi(t,n){return n=null==n?jo:n,Ue(n,O,N,[t],[])}function bi(t,n,e,r){return n&&"boolean"!=typeof n&&Ze(t,n,e)?n=!1:"function"==typeof n&&(r=e,e=n,n=!1),"function"==typeof e?xn(t,n,ae(e,r,1)):xn(t,n)}function xi(t,n,e){return"function"==typeof n?xn(t,!0,ae(n,e,1)):xn(t,!0)}function ki(t,n){return t>n}function Ei(t,n){return t>=n}function Ii(t){return _(t)&&Qe(t)&&na.call(t,"callee")&&!fa.call(t,"callee")}function Ni(t){return t===!0||t===!1||_(t)&&ra.call(t)==X}function Ci(t){return _(t)&&ra.call(t)==H}function ji(t){return!!t&&1===t.nodeType&&_(t)&&!Di(t)}function Ri(t){return null==t?!0:Qe(t)&&(Ru(t)||zi(t)||Ii(t)||_(t)&&Oi(t.splice))?!t.length:!Du(t).length}function Ti(t,n,e,r){e="function"==typeof e?ae(e,r,3):N;var i=e?e(t,n):N;return i===N?Bn(t,n,e):!!i}function Li(t){return _(t)&&"string"==typeof t.message&&ra.call(t)==K}function Ai(t){return"number"==typeof t&&wa(t)}function Oi(t){return Si(t)&&ra.call(t)==Q}function Si(t){var n=typeof t;return!!t&&("object"==n||"function"==n)}function Mi(t,n,e,r){return e="function"==typeof e?ae(e,r,3):N,Pn(t,Ge(n),e)}function Bi(t){return Fi(t)&&t!=+t}function Ui(t){return null==t?!1:Oi(t)?oa.test(ta.call(t)):_(t)&&Mt.test(t)}function Pi(t){return null===t}function Fi(t){return"number"==typeof t||_(t)&&ra.call(t)==Z}function Di(t){var n;if(!_(t)||ra.call(t)!=tt||Ii(t)||!na.call(t,"constructor")&&(n=t.constructor,"function"==typeof n&&!(n instanceof n)))return!1;var e;return Ln(t,function(t,n){e=n}),e===N||na.call(t,e)}function Wi(t){return Si(t)&&ra.call(t)==nt}function zi(t){return"string"==typeof t||_(t)&&ra.call(t)==rt}function qi(t){return _(t)&&er(t.length)&&!!qt[ra.call(t)]}function Gi(t){return t===N}function Vi(t,n){return n>t}function Yi(t,n){return n>=t}function $i(t){var n=t?za(t):0;return er(n)?n?tn(t):[]:oo(t)}function Xi(t){return wn(t,to(t))}function Hi(t,n,e){var r=Ma(t);return e&&Ze(t,n,e)&&(n=N),n?_n(r,n):r}function Ki(t){return Sn(t,to(t))}function Qi(t,n,e){var r=null==t?N:Mn(t,hr(n),n+"");return r===N?e:r}function Ji(t,n){if(null==t)return!1;var e=na.call(t,n);if(!e&&!tr(n)){if(n=hr(n),t=1==n.length?t:Mn(t,Hn(n,0,-1)),null==t)return!1;n=Nr(n),e=na.call(t,n)}return e||er(t.length)&&Je(n,t.length)&&(Ru(t)||Ii(t))}function Zi(t,n,e){e&&Ze(t,n,e)&&(n=N);for(var r=-1,i=Du(t),o=i.length,a={};++r<o;){var u=i[r],c=t[u];n?na.call(a,c)?a[c].push(u):a[c]=[u]:a[c]=u}return a}function to(t){if(null==t)return[];Si(t)||(t=$o(t));var n=t.length;n=n&&er(n)&&(Ru(t)||Ii(t))&&n||0;for(var e=t.constructor,r=-1,i="function"==typeof e&&e.prototype===t,o=Wo(n),a=n>0;++r<n;)o[r]=r+"";for(var u in t)a&&Je(u,n)||"constructor"==u&&(i||!na.call(t,u))||o.push(u);return o}function no(t){t=lr(t);for(var n=-1,e=Du(t),r=e.length,i=Wo(r);++n<r;){var o=e[n];i[n]=[o,t[o]]}return i}function eo(t,n,e){var r=null==t?N:t[n];return r===N&&(null==t||tr(n,t)||(n=hr(n),t=1==n.length?t:Mn(t,Hn(n,0,-1)),r=null==t?N:t[Nr(n)]),r=r===N?e:r),Oi(r)?r.call(t):r}function ro(t,n,e){if(null==t)return t;var r=n+"";n=null!=t[r]||tr(n,t)?[r]:hr(n);for(var i=-1,o=n.length,a=o-1,u=t;null!=u&&++i<o;){var c=n[i];Si(u)&&(i==a?u[c]=e:null==u[c]&&(u[c]=Je(n[i+1])?[]:{})),u=u[c]}return t}function io(t,n,e,r){var i=Ru(t)||qi(t);if(n=We(n,r,4),null==e)if(i||Si(t)){var o=t.constructor;e=i?Ru(t)?new o:[]:Ma(Oi(o)?o.prototype:N)}else e={};return(i?nn:An)(t,function(t,r,i){return n(e,t,r,i)}),e}function oo(t){return ne(t,Du(t))}function ao(t){return ne(t,to(t))}function uo(t,n,e){return n=+n||0,e===N?(e=n,n=0):e=+e||0,t>=ka(n,e)&&t<xa(n,e)}function co(t,n,e){e&&Ze(t,n,e)&&(n=e=N);var r=null==t,i=null==n;if(null==e&&(i&&"boolean"==typeof t?(e=t,t=1):"boolean"==typeof n&&(e=n,i=!0)),r&&i&&(n=1,i=!1),t=+t||0,i?(n=t,t=0):n=+n||0,e||t%1||n%1){var o=Na();return ka(t+o*(n-t+ca("1e-"+((o+"").length-1))),n)}return $n(t,n)}function so(t){return t=c(t),t&&t.charAt(0).toUpperCase()+t.slice(1)}function fo(t){return t=c(t),t&&t.replace(Ut,d).replace(Tt,"")}function lo(t,n,e){t=c(t),n+="";var r=t.length;return e=e===N?r:ka(0>e?0:+e||0,r),e-=n.length,e>=0&&t.indexOf(n,e)==e}function ho(t){return t=c(t),t&&bt.test(t)?t.replace(mt,p):t}function po(t){return t=c(t),t&&Rt.test(t)?t.replace(jt,g):t||"(?:)"}function go(t,n,e){t=c(t),n=+n;var r=t.length;if(r>=n||!wa(n))return t;var i=(n-r)/2,o=_a(i),a=va(i);return e=Oe("",a,e),e.slice(0,o)+t+e}function vo(t,n,e){return(e?Ze(t,n,e):null==n)?n=0:n&&(n=+n),t=wo(t),Ia(t,n||(St.test(t)?16:10))}function yo(t,n){var e="";if(t=c(t),n=+n,1>n||!t||!wa(n))return e;do n%2&&(e+=t),n=_a(n/2),t+=t;while(n);return e}function _o(t,n,e){return t=c(t),e=null==e?0:ka(0>e?0:+e||0,t.length),t.lastIndexOf(n,e)==e}function mo(t,e,r){var i=n.templateSettings;r&&Ze(t,e,r)&&(e=r=N),t=c(t),e=yn(_n({},r||e),i,vn);var o,a,u=yn(_n({},e.imports),i.imports,vn),s=Du(u),f=ne(u,s),l=0,h=e.interpolate||Pt,d="__p += '",p=Xo((e.escape||Pt).source+"|"+h.source+"|"+(h===Et?At:Pt).source+"|"+(e.evaluate||Pt).source+"|$","g"),g="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++zt+"]")+"\n";t.replace(p,function(n,e,r,i,u,c){return r||(r=i),d+=t.slice(l,c).replace(Ft,v),e&&(o=!0,d+="' +\n__e("+e+") +\n'"),u&&(a=!0,d+="';\n"+u+";\n__p += '"),r&&(d+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=c+n.length,n}),d+="';\n";var y=e.variable;y||(d="with (obj) {\n"+d+"\n}\n"),d=(a?d.replace(gt,""):d).replace(vt,"$1").replace(yt,"$1;"),d="function("+(y||"obj")+") {\n"+(y?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+d+"return __p\n}";var _=Qu(function(){return Go(s,g+"return "+d).apply(N,f)});if(_.source=d,Li(_))throw _;return _}function wo(t,n,e){var r=t;return(t=c(t))?(e?Ze(r,n,e):null==n)?t.slice(x(t),k(t)+1):(n+="",t.slice(s(t,n),f(t,n)+1)):t}function bo(t,n,e){var r=t;return t=c(t),t?t.slice((e?Ze(r,n,e):null==n)?x(t):s(t,n+"")):t}function xo(t,n,e){var r=t;return t=c(t),t?(e?Ze(r,n,e):null==n)?t.slice(0,k(t)+1):t.slice(0,f(t,n+"")+1):t}function ko(t,n,e){e&&Ze(t,n,e)&&(n=N);var r=U,i=P;if(null!=n)if(Si(n)){var o="separator"in n?n.separator:o;r="length"in n?+n.length||0:r,i="omission"in n?c(n.omission):i}else r=+n||0;if(t=c(t),r>=t.length)return t;var a=r-i.length;if(1>a)return i;var u=t.slice(0,a);if(null==o)return u+i;if(Wi(o)){if(t.slice(a).search(o)){var s,f,l=t.slice(0,a);for(o.global||(o=Xo(o.source,(Ot.exec(o)||"")+"g")),o.lastIndex=0;s=o.exec(l);)f=s.index;u=u.slice(0,null==f?a:f)}}else if(t.indexOf(o,a)!=a){var h=u.lastIndexOf(o);h>-1&&(u=u.slice(0,h))}return u+i}function Eo(t){return t=c(t),t&&wt.test(t)?t.replace(_t,E):t}function Io(t,n,e){return e&&Ze(t,n,e)&&(n=N),t=c(t),t.match(n||Dt)||[]}function No(t,n,e){return e&&Ze(t,n,e)&&(n=N),_(t)?Ro(t):bn(t,n)}function Co(t){return function(){return t}}function jo(t){return t}function Ro(t){return Dn(xn(t,!0))}function To(t,n){return Wn(t,xn(n,!0))}function Lo(t,n,e){if(null==e){var r=Si(n),i=r?Du(n):N,o=i&&i.length?Sn(n,i):N;(o?o.length:r)||(o=!1,e=n,n=t,t=this)}o||(o=Sn(n,Du(n)));var a=!0,u=-1,c=Oi(t),s=o.length;e===!1?a=!1:Si(e)&&"chain"in e&&(a=e.chain);for(;++u<s;){var f=o[u],l=n[f];t[f]=l,c&&(t.prototype[f]=function(n){return function(){var e=this.__chain__;if(a||e){var r=t(this.__wrapped__),i=r.__actions__=tn(this.__actions__);return i.push({func:n,args:arguments,thisArg:t}),r.__chain__=e,r}return n.apply(t,fn([this.value()],arguments))}}(l))}return t}function Ao(){return rn._=ia,this}function Oo(){}function So(t){return tr(t)?Gn(t):Vn(t)}function Mo(t){return function(n){return Mn(t,hr(n),n+"")}}function Bo(t,n,e){e&&Ze(t,n,e)&&(n=e=N),t=+t||0,e=null==e?1:+e||0,null==n?(n=t,t=0):n=+n||0;for(var r=-1,i=xa(va((n-t)/(e||1)),0),o=Wo(i);++r<i;)o[r]=t,t+=e;return o}function Uo(t,n,e){if(t=_a(t),1>t||!wa(t))return[];var r=-1,i=Wo(ka(t,Ra));for(n=ae(n,e,1);++r<t;)Ra>r?i[r]=n(r):n(r);return i}function Po(t){var n=++ea;return c(t)+n}function Fo(t,n){return(+t||0)+(+n||0)}function Do(t,n,e){
return e&&Ze(t,n,e)&&(n=N),n=We(n,e,3),1==n.length?pn(Ru(t)?t:fr(t),n):Zn(t,n)}t=t?on.defaults(rn.Object(),t,on.pick(rn,Wt)):rn;{var Wo=t.Array,zo=t.Date,qo=t.Error,Go=t.Function,Vo=t.Math,Yo=t.Number,$o=t.Object,Xo=t.RegExp,Ho=t.String,Ko=t.TypeError,Qo=Wo.prototype,Jo=$o.prototype,Zo=Ho.prototype,ta=Go.prototype.toString,na=Jo.hasOwnProperty,ea=0,ra=Jo.toString,ia=rn._,oa=Xo("^"+ta.call(na).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),aa=t.ArrayBuffer,ua=t.clearTimeout,ca=t.parseFloat,sa=Vo.pow,fa=Jo.propertyIsEnumerable,la=Ve(t,"Set"),ha=t.setTimeout,da=Qo.splice,pa=t.Uint8Array,ga=Ve(t,"WeakMap"),va=Vo.ceil,ya=Ve($o,"create"),_a=Vo.floor,ma=Ve(Wo,"isArray"),wa=t.isFinite,ba=Ve($o,"keys"),xa=Vo.max,ka=Vo.min,Ea=Ve(zo,"now"),Ia=t.parseInt,Na=Vo.random,Ca=Yo.NEGATIVE_INFINITY,ja=Yo.POSITIVE_INFINITY,Ra=4294967295,Ta=Ra-1,La=Ra>>>1,Aa=9007199254740991,Oa=ga&&new ga,Sa={};n.support={}}n.templateSettings={escape:xt,evaluate:kt,interpolate:Et,variable:"",imports:{_:n}};var Ma=function(){function t(){}return function(n){if(Si(n)){t.prototype=n;var e=new t;t.prototype=N}return e||{}}}(),Ba=he(An),Ua=he(On,!0),Pa=de(),Fa=de(!0),Da=Oa?function(t,n){return Oa.set(t,n),t}:jo,Wa=Oa?function(t){return Oa.get(t)}:Oo,za=Gn("length"),qa=function(){var t=0,n=0;return function(e,r){var i=gu(),o=D-(i-n);if(n=i,o>0){if(++t>=F)return e}else t=0;return Da(e,r)}}(),Ga=yi(function(t,n){return _(t)&&Qe(t)?En(t,Tn(n,!1,!0)):[]}),Va=xe(),Ya=xe(!0),$a=yi(function(t){for(var n=t.length,e=n,r=Wo(l),i=qe(),o=i==a,u=[];e--;){var c=t[e]=Qe(c=t[e])?c:[];r[e]=o&&c.length>=120?ge(e&&c):null}var s=t[0],f=-1,l=s?s.length:0,h=r[0];t:for(;++f<l;)if(c=s[f],(h?Qt(h,c):i(u,c,0))<0){for(var e=n;--e;){var d=r[e];if((d?Qt(d,c):i(t[e],c,0))<0)continue t}h&&h.push(c),u.push(c)}return u}),Xa=yi(function(t,n){n=Tn(n);var e=mn(t,n);return Yn(t,n.sort(i)),e}),Ha=Be(),Ka=Be(!0),Qa=yi(function(t){return te(Tn(t,!1,!0))}),Ja=yi(function(t,n){return Qe(t)?En(t,n):[]}),Za=yi(Ur),tu=yi(function(t){var n=t.length,e=n>2?t[n-2]:N,r=n>1?t[n-1]:N;return n>2&&"function"==typeof e?n-=2:(e=n>1&&"function"==typeof r?(--n,r):N,r=N),t.length=n,Pr(t,e,r)}),nu=yi(function(t){return t=Tn(t),this.thru(function(n){return Zt(Ru(n)?n:[lr(n)],t)})}),eu=yi(function(t,n){return mn(t,Tn(n))}),ru=fe(function(t,n,e){na.call(t,e)?++t[e]:t[e]=1}),iu=be(Ba),ou=be(Ua,!0),au=Ie(nn,Ba),uu=Ie(en,Ua),cu=fe(function(t,n,e){na.call(t,e)?t[e].push(n):t[e]=[n]}),su=fe(function(t,n,e){t[e]=n}),fu=yi(function(t,n,e){var r=-1,i="function"==typeof n,o=tr(n),a=Qe(t)?Wo(t.length):[];return Ba(t,function(t){var u=i?n:o&&null!=t?t[n]:N;a[++r]=u?u.apply(t,e):Ke(t,n,e)}),a}),lu=fe(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),hu=Le(ln,Ba),du=Le(hn,Ua),pu=yi(function(t,n){if(null==t)return[];var e=n[2];return e&&Ze(n[0],n[1],e)&&(n.length=1),Jn(t,Tn(n),[])}),gu=Ea||function(){return(new zo).getTime()},vu=yi(function(t,n,e){var r=j;if(e.length){var i=w(e,vu.placeholder);r|=O}return Ue(t,r,n,e,i)}),yu=yi(function(t,n){n=n.length?Tn(n):Ki(t);for(var e=-1,r=n.length;++e<r;){var i=n[e];t[i]=Ue(t[i],j,t)}return t}),_u=yi(function(t,n,e){var r=j|R;if(e.length){var i=w(e,_u.placeholder);r|=O}return Ue(n,r,t,e,i)}),mu=_e(L),wu=_e(A),bu=yi(function(t,n){return kn(t,1,n)}),xu=yi(function(t,n,e){return kn(t,n,e)}),ku=Ee(),Eu=Ee(!0),Iu=yi(function(t,n){if(n=Tn(n),"function"!=typeof t||!an(n,u))throw new Ko(G);var e=n.length;return yi(function(r){for(var i=ka(r.length,e);i--;)r[i]=n[i](r[i]);return t.apply(this,r)})}),Nu=Te(O),Cu=Te(S),ju=yi(function(t,n){return Ue(t,B,N,N,N,Tn(n))}),Ru=ma||function(t){return _(t)&&er(t.length)&&ra.call(t)==$},Tu=le(zn),Lu=le(function(t,n,e){return e?yn(t,n,e):_n(t,n)}),Au=me(Lu,gn),Ou=me(Tu,or),Su=ke(An),Mu=ke(On),Bu=Ne(Pa),Uu=Ne(Fa),Pu=Ce(An),Fu=Ce(On),Du=ba?function(t){var n=null==t?N:t.constructor;return"function"==typeof n&&n.prototype===t||"function"!=typeof t&&Qe(t)?sr(t):Si(t)?ba(t):[]}:sr,Wu=je(!0),zu=je(),qu=yi(function(t,n){if(null==t)return{};if("function"!=typeof n[0]){var n=sn(Tn(n),Ho);return ar(t,En(to(t),n))}var e=ae(n[0],n[1],3);return ur(t,function(t,n,r){return!e(t,n,r)})}),Gu=yi(function(t,n){return null==t?{}:"function"==typeof n[0]?ur(t,ae(n[0],n[1],3)):ar(t,Tn(n))}),Vu=ve(function(t,n,e){return n=n.toLowerCase(),t+(e?n.charAt(0).toUpperCase()+n.slice(1):n)}),Yu=ve(function(t,n,e){return t+(e?"-":"")+n.toLowerCase()}),$u=Re(),Xu=Re(!0),Hu=ve(function(t,n,e){return t+(e?"_":"")+n.toLowerCase()}),Ku=ve(function(t,n,e){return t+(e?" ":"")+(n.charAt(0).toUpperCase()+n.slice(1))}),Qu=yi(function(t,n){try{return t.apply(N,n)}catch(e){return Li(e)?e:new qo(e)}}),Ju=yi(function(t,n){return function(e){return Ke(e,t,n)}}),Zu=yi(function(t,n){return function(e){return Ke(t,e,n)}}),tc=Me("ceil"),nc=Me("floor"),ec=we(ki,Ca),rc=we(Vi,ja),ic=Me("round");return n.prototype=e.prototype,r.prototype=Ma(e.prototype),r.prototype.constructor=r,m.prototype=Ma(e.prototype),m.prototype.constructor=m,Vt.prototype["delete"]=Yt,Vt.prototype.get=$t,Vt.prototype.has=Xt,Vt.prototype.set=Ht,Kt.prototype.push=Jt,pi.Cache=Vt,n.after=fi,n.ary=li,n.assign=Lu,n.at=eu,n.before=hi,n.bind=vu,n.bindAll=yu,n.bindKey=_u,n.callback=No,n.chain=Wr,n.chunk=pr,n.compact=gr,n.constant=Co,n.countBy=ru,n.create=Hi,n.curry=mu,n.curryRight=wu,n.debounce=di,n.defaults=Au,n.defaultsDeep=Ou,n.defer=bu,n.delay=xu,n.difference=Ga,n.drop=vr,n.dropRight=yr,n.dropRightWhile=_r,n.dropWhile=mr,n.fill=wr,n.filter=Qr,n.flatten=xr,n.flattenDeep=kr,n.flow=ku,n.flowRight=Eu,n.forEach=au,n.forEachRight=uu,n.forIn=Bu,n.forInRight=Uu,n.forOwn=Pu,n.forOwnRight=Fu,n.functions=Ki,n.groupBy=cu,n.indexBy=su,n.initial=Ir,n.intersection=$a,n.invert=Zi,n.invoke=fu,n.keys=Du,n.keysIn=to,n.map=ti,n.mapKeys=Wu,n.mapValues=zu,n.matches=Ro,n.matchesProperty=To,n.memoize=pi,n.merge=Tu,n.method=Ju,n.methodOf=Zu,n.mixin=Lo,n.modArgs=Iu,n.negate=gi,n.omit=qu,n.once=vi,n.pairs=no,n.partial=Nu,n.partialRight=Cu,n.partition=lu,n.pick=Gu,n.pluck=ni,n.property=So,n.propertyOf=Mo,n.pull=jr,n.pullAt=Xa,n.range=Bo,n.rearg=ju,n.reject=ei,n.remove=Rr,n.rest=Tr,n.restParam=yi,n.set=ro,n.shuffle=ii,n.slice=Lr,n.sortBy=ui,n.sortByAll=pu,n.sortByOrder=ci,n.spread=_i,n.take=Ar,n.takeRight=Or,n.takeRightWhile=Sr,n.takeWhile=Mr,n.tap=zr,n.throttle=mi,n.thru=qr,n.times=Uo,n.toArray=$i,n.toPlainObject=Xi,n.transform=io,n.union=Qa,n.uniq=Br,n.unzip=Ur,n.unzipWith=Pr,n.values=oo,n.valuesIn=ao,n.where=si,n.without=Ja,n.wrap=wi,n.xor=Fr,n.zip=Za,n.zipObject=Dr,n.zipWith=tu,n.backflow=Eu,n.collect=ti,n.compose=Eu,n.each=au,n.eachRight=uu,n.extend=Lu,n.iteratee=No,n.methods=Ki,n.object=Dr,n.select=Qr,n.tail=Tr,n.unique=Br,Lo(n,n),n.add=Fo,n.attempt=Qu,n.camelCase=Vu,n.capitalize=so,n.ceil=tc,n.clone=bi,n.cloneDeep=xi,n.deburr=fo,n.endsWith=lo,n.escape=ho,n.escapeRegExp=po,n.every=Kr,n.find=iu,n.findIndex=Va,n.findKey=Su,n.findLast=ou,n.findLastIndex=Ya,n.findLastKey=Mu,n.findWhere=Jr,n.first=br,n.floor=nc,n.get=Qi,n.gt=ki,n.gte=Ei,n.has=Ji,n.identity=jo,n.includes=Zr,n.indexOf=Er,n.inRange=uo,n.isArguments=Ii,n.isArray=Ru,n.isBoolean=Ni,n.isDate=Ci,n.isElement=ji,n.isEmpty=Ri,n.isEqual=Ti,n.isError=Li,n.isFinite=Ai,n.isFunction=Oi,n.isMatch=Mi,n.isNaN=Bi,n.isNative=Ui,n.isNull=Pi,n.isNumber=Fi,n.isObject=Si,n.isPlainObject=Di,n.isRegExp=Wi,n.isString=zi,n.isTypedArray=qi,n.isUndefined=Gi,n.kebabCase=Yu,n.last=Nr,n.lastIndexOf=Cr,n.lt=Vi,n.lte=Yi,n.max=ec,n.min=rc,n.noConflict=Ao,n.noop=Oo,n.now=gu,n.pad=go,n.padLeft=$u,n.padRight=Xu,n.parseInt=vo,n.random=co,n.reduce=hu,n.reduceRight=du,n.repeat=yo,n.result=eo,n.round=ic,n.runInContext=I,n.size=oi,n.snakeCase=Hu,n.some=ai,n.sortedIndex=Ha,n.sortedLastIndex=Ka,n.startCase=Ku,n.startsWith=_o,n.sum=Do,n.template=mo,n.trim=wo,n.trimLeft=bo,n.trimRight=xo,n.trunc=ko,n.unescape=Eo,n.uniqueId=Po,n.words=Io,n.all=Kr,n.any=ai,n.contains=Zr,n.eq=Ti,n.detect=iu,n.foldl=hu,n.foldr=du,n.head=br,n.include=Zr,n.inject=hu,Lo(n,function(){var t={};return An(n,function(e,r){n.prototype[r]||(t[r]=e)}),t}(),!1),n.sample=ri,n.prototype.sample=function(t){return this.__chain__||null!=t?this.thru(function(n){return ri(n,t)}):ri(this.value())},n.VERSION=C,nn(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),nn(["drop","take"],function(t,n){m.prototype[t]=function(e){var r=this.__filtered__;if(r&&!n)return new m(this);e=null==e?1:xa(_a(e)||0,0);var i=this.clone();return r?i.__takeCount__=ka(i.__takeCount__,e):i.__views__.push({size:e,type:t+(i.__dir__<0?"Right":"")}),i},m.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}}),nn(["filter","map","takeWhile"],function(t,n){var e=n+1,r=e!=q;m.prototype[t]=function(t,n){var i=this.clone();return i.__iteratees__.push({iteratee:We(t,n,1),type:e}),i.__filtered__=i.__filtered__||r,i}}),nn(["first","last"],function(t,n){var e="take"+(n?"Right":"");m.prototype[t]=function(){return this[e](1).value()[0]}}),nn(["initial","rest"],function(t,n){var e="drop"+(n?"":"Right");m.prototype[t]=function(){return this.__filtered__?new m(this):this[e](1)}}),nn(["pluck","where"],function(t,n){var e=n?"filter":"map",r=n?Dn:So;m.prototype[t]=function(t){return this[e](r(t))}}),m.prototype.compact=function(){return this.filter(jo)},m.prototype.reject=function(t,n){return t=We(t,n,1),this.filter(function(n){return!t(n)})},m.prototype.slice=function(t,n){t=null==t?0:+t||0;var e=this;return e.__filtered__&&(t>0||0>n)?new m(e):(0>t?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==N&&(n=+n||0,e=0>n?e.dropRight(-n):e.take(n-t)),e)},m.prototype.takeRightWhile=function(t,n){return this.reverse().takeWhile(t,n).reverse()},m.prototype.toArray=function(){return this.take(ja)},An(m.prototype,function(t,e){var i=/^(?:filter|map|reject)|While$/.test(e),o=/^(?:first|last)$/.test(e),a=n[o?"take"+("last"==e?"Right":""):e];a&&(n.prototype[e]=function(){var n=o?[1]:arguments,e=this.__chain__,u=this.__wrapped__,c=!!this.__actions__.length,s=u instanceof m,f=n[0],l=s||Ru(u);l&&i&&"function"==typeof f&&1!=f.length&&(s=l=!1);var h=function(t){return o&&e?a(t,1)[0]:a.apply(N,fn([t],n))},d={func:qr,args:[h],thisArg:N},p=s&&!c;if(o&&!e)return p?(u=u.clone(),u.__actions__.push(d),t.call(u)):a.call(N,this.value())[0];if(!o&&l){u=p?u:new m(this);var g=t.apply(u,n);return g.__actions__.push(d),new r(g,e)}return this.thru(h)})}),nn(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(t){var e=(/^(?:replace|split)$/.test(t)?Zo:Qo)[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:join|pop|replace|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;return i&&!this.__chain__?e.apply(this.value(),t):this[r](function(n){return e.apply(n,t)})}}),An(m.prototype,function(t,e){var r=n[e];if(r){var i=r.name,o=Sa[i]||(Sa[i]=[]);o.push({name:e,func:r})}}),Sa[Ae(N,R).name]=[{name:"wrapper",func:N}],m.prototype.clone=J,m.prototype.reverse=et,m.prototype.value=it,n.prototype.chain=Gr,n.prototype.commit=Vr,n.prototype.concat=nu,n.prototype.plant=Yr,n.prototype.reverse=$r,n.prototype.toString=Xr,n.prototype.run=n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=Hr,n.prototype.collect=n.prototype.map,n.prototype.head=n.prototype.first,n.prototype.select=n.prototype.filter,n.prototype.tail=n.prototype.rest,n}var N,C="3.10.0",j=1,R=2,T=4,L=8,A=16,O=32,S=64,M=128,B=256,U=30,P="...",F=150,D=16,W=200,z=1,q=2,G="Expected a function",V="__lodash_placeholder__",Y="[object Arguments]",$="[object Array]",X="[object Boolean]",H="[object Date]",K="[object Error]",Q="[object Function]",J="[object Map]",Z="[object Number]",tt="[object Object]",nt="[object RegExp]",et="[object Set]",rt="[object String]",it="[object WeakMap]",ot="[object ArrayBuffer]",at="[object Float32Array]",ut="[object Float64Array]",ct="[object Int8Array]",st="[object Int16Array]",ft="[object Int32Array]",lt="[object Uint8Array]",ht="[object Uint8ClampedArray]",dt="[object Uint16Array]",pt="[object Uint32Array]",gt=/\b__p \+= '';/g,vt=/\b(__p \+=) '' \+/g,yt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,_t=/&(?:amp|lt|gt|quot|#39|#96);/g,mt=/[&<>"'`]/g,wt=RegExp(_t.source),bt=RegExp(mt.source),xt=/<%-([\s\S]+?)%>/g,kt=/<%([\s\S]+?)%>/g,Et=/<%=([\s\S]+?)%>/g,It=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Nt=/^\w*$/,Ct=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,jt=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,Rt=RegExp(jt.source),Tt=/[\u0300-\u036f\ufe20-\ufe23]/g,Lt=/\\(\\)?/g,At=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ot=/\w*$/,St=/^0[xX]/,Mt=/^\[object .+?Constructor\]$/,Bt=/^\d+$/,Ut=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Pt=/($^)/,Ft=/['\n\r\u2028\u2029\\]/g,Dt=function(){var t="[A-Z\\xc0-\\xd6\\xd8-\\xde]",n="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(t+"+(?="+t+n+")|"+t+"?"+n+"|"+t+"+|[0-9]+","g")}(),Wt=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],zt=-1,qt={};qt[at]=qt[ut]=qt[ct]=qt[st]=qt[ft]=qt[lt]=qt[ht]=qt[dt]=qt[pt]=!0,qt[Y]=qt[$]=qt[ot]=qt[X]=qt[H]=qt[K]=qt[Q]=qt[J]=qt[Z]=qt[tt]=qt[nt]=qt[et]=qt[rt]=qt[it]=!1;var Gt={};Gt[Y]=Gt[$]=Gt[ot]=Gt[X]=Gt[H]=Gt[at]=Gt[ut]=Gt[ct]=Gt[st]=Gt[ft]=Gt[Z]=Gt[tt]=Gt[nt]=Gt[rt]=Gt[lt]=Gt[ht]=Gt[dt]=Gt[pt]=!0,Gt[K]=Gt[Q]=Gt[J]=Gt[et]=Gt[it]=!1;var Vt={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Yt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},$t={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Xt={"function":!0,object:!0},Ht={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Kt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Qt=Xt[typeof r]&&r&&!r.nodeType&&r,Jt=Xt[typeof e]&&e&&!e.nodeType&&e,Zt=Qt&&Jt&&"object"==typeof n&&n&&n.Object&&n,tn=Xt[typeof self]&&self&&self.Object&&self,nn=Xt[typeof window]&&window&&window.Object&&window,en=Jt&&Jt.exports===Qt&&Qt,rn=Zt||nn!==(this&&this.window)&&nn||tn||this,on=I();"function"==typeof t&&"object"==typeof t.amd&&t.amd?(rn._=on,t(function(){return on})):Qt&&Jt?en?(Jt.exports=on)._=on:Qt._=on:rn._=on}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)});
//# sourceMappingURL=dagre-d3.min.js.map