diff --git a/web/README b/web/README
index 7ddf463..ae08682 100644
--- a/web/README
+++ b/web/README
@@ -10,6 +10,7 @@
 DBName="titanexample"
 
 2> install Flask python library (apt-get install python-flask)
+MacOS: sudo pip install Flask
 
 3> Run from commandline
 
diff --git a/web/ons-demo/README.txt b/web/ons-demo/README.txt
new file mode 100644
index 0000000..2807fec
--- /dev/null
+++ b/web/ons-demo/README.txt
@@ -0,0 +1,5 @@
+from main web directory
+
+	 python ./restapi2.py
+
+http://localhost:9000/ons-demo/index.html
\ No newline at end of file
diff --git a/web/ons-demo/RELEASE_NOTES.txt b/web/ons-demo/RELEASE_NOTES.txt
new file mode 100644
index 0000000..85df9bf
--- /dev/null
+++ b/web/ons-demo/RELEASE_NOTES.txt
@@ -0,0 +1,5 @@
+** March 19, 2013 **
+- aggregation switch sample data DPIDs do not match official switch config.
+	- switch config hacked 00:00:00:00:00:00:01:01 ==> 00:00:00:00:00:00:01:00 etc.
+- layout does not dynamically adjust when window is resized
+	- refresh browser window after resizing to fix layout
diff --git a/web/ons-demo/assets/logo.png b/web/ons-demo/assets/logo.png
new file mode 100644
index 0000000..57434bd
--- /dev/null
+++ b/web/ons-demo/assets/logo.png
Binary files differ
diff --git a/web/ons-demo/css/layout.default.css b/web/ons-demo/css/layout.default.css
new file mode 100644
index 0000000..b9a5ebe
--- /dev/null
+++ b/web/ons-demo/css/layout.default.css
@@ -0,0 +1,73 @@
+html, body {
+	height: 100%;
+}
+
+body {
+	display: -webkit-box;
+}
+
+.header {
+	width: 100%;
+	display: -webkit-box;
+	-webkit-box-pack: justify;
+	-webkit-box-align: center;
+}
+
+#status {
+	display: -webkit-box;
+}
+
+#left, #right {
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+}
+
+#right {
+	width: 100%;
+	-webkit-box-flex: 1.0;
+}
+
+#controllers, #topology {
+	-webkit-box-flex: 1.0;
+	position: relative;
+}
+
+#selectedFlows {
+	height: 5em;
+}
+
+/* tmp */
+#selectedFlows {
+	display: -webkit-box;
+	-webkit-box-align: center;
+	-webkit-box-pack: center;
+}
+
+#controllers {
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+}
+
+#controllers .header {
+	-webkit-box-pack: center;
+	border-bottom: 1px solid white;
+}
+
+#controllerList {
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-box-flex: 1.0;
+	overflow: scroll;
+}
+
+.controller {
+	margin: .25em;
+	background-color: blue;
+}
+
+#svg-container {
+	position: absolute;
+	top: 0px;
+	height: 100%;
+	width: 100%;
+}
diff --git a/web/ons-demo/css/skin.2.css b/web/ons-demo/css/skin.2.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/web/ons-demo/css/skin.2.css
diff --git a/web/ons-demo/css/skin.default.css b/web/ons-demo/css/skin.default.css
new file mode 100644
index 0000000..807aa4c
--- /dev/null
+++ b/web/ons-demo/css/skin.default.css
@@ -0,0 +1,161 @@
+
+body {
+	background-color: black;
+	color: white;
+	font-family: Helvetica;
+	margin: 0px;
+}
+
+.status {
+	padding: 1em;
+	border-right: 1px solid white;
+}
+
+.status:last-child {
+	border-right: none;
+}
+
+.status .static {
+	color: white;
+	padding: .25em;
+}
+
+.status .dynamic {
+	color: blue;
+	padding: .25em;
+}
+
+.button {
+	padding: 1em;
+	background-color: lightgray;
+	color: black;
+	border: 1px solid white;
+}
+
+.header {
+	height: 50px;
+}
+
+
+#right .header {
+	font-size: 12px;
+	padding-right: .25em;
+	-webkit-box-sizing: border-box;
+}
+
+#controllers, #selectedFlows {
+	border-top: 1px solid white;
+}
+
+#selectedFlows {
+	border-bottom: 1px solid white;
+}
+
+#controllers {
+	border-right: 1px solid white;
+}
+
+.controller {
+	padding: .25em;
+}
+
+
+#logo {
+	height: 50px;
+}
+
+.edge {
+	stroke: black;
+	stroke-width: 1.5px;
+}
+
+.nolabel text {
+	display: none;
+}
+
+text {
+	stroke: none;
+	fill: white;
+	font-size: 12px;
+	pointer-events: none;
+}
+
+path {
+	stroke: rgba(255, 255, 255, .25);
+	stroke-width: 1px;
+}
+
+.aggregation {
+	stroke: black;
+	stroke-width: 2px;
+}
+
+#traceButton {
+	visibility: hidden
+}
+
+.color1, .color2, .color3, .color4, .color5, .color6, .color7, .color8, .color9, .color10, .color11, .color12  {
+	fill: rgba(255, 255, 255, .15);
+	background-color: rgba(255, 255, 255, .15);
+}
+
+
+.color1-selected .color1 {
+	fill: #EC0033;
+	background-color: #EC0033;
+}
+
+.color2-selected .color2 {
+	fill: #FFBA00;
+	background-color: #FFBA00;
+}
+
+.color3-selected .color3 {
+	fill: #3714B0;
+	background-color: #3714B0;
+}
+
+.color4-selected .color4 {
+	fill: #B12C49;
+	background-color: #B12C49;
+}
+
+.color5-selected .color5 {
+	fill: #402C84;
+	background-color: #402C84;
+}
+
+.color6-selected .color6 {
+	fill: #990021;
+	background-color: #990021;
+}
+
+.color7-selected .color7 {
+	fill: #990021;
+	background-color: ;
+}
+
+.color8-selected .color8 {
+	fill: #A67900;
+	background-color: #A67900;
+}
+
+.color9-selected .color9 {
+	fill: #F53D65;
+	background-color: #F53D65;
+}
+
+.color10-selected .color10 {
+	fill: #1F0772;
+	background-color: #1F0772;
+}
+
+.color11-selected .color11 {
+	fill: #F56E8B;
+	background-color: #F56E8B;
+}
+
+.color12-selected .color12 {
+	fill: #6949D7;
+	background-color: #6949D7;
+}
diff --git a/web/ons-demo/data/configuration.json b/web/ons-demo/data/configuration.json
new file mode 100644
index 0000000..bf5c855
--- /dev/null
+++ b/web/ons-demo/data/configuration.json
@@ -0,0 +1,20 @@
+{
+	"core": [
+		"00:00:00:08:a2:08:f9:01",
+		"00:00:00:00:ba:5e:ba:11",
+		"00:00:20:4e:7f:51:8a:35",
+		"00:00:00:00:00:00:ba:12",
+		"00:00:00:00:ba:5e:ba:13",
+		"00:00:00:16:97:08:9a:46"
+	],
+	"aggregation": [
+		"00:00:00:00:00:00:01:00",
+		"00:00:00:00:00:00:02:00",
+		"00:00:00:00:00:00:03:00",
+		"00:00:00:00:00:00:04:00",
+		"00:00:00:00:00:00:05:00",
+		"00:00:00:00:00:00:06:00",
+		"00:00:00:00:00:00:07:00",
+		"00:00:00:00:00:00:08:00"
+	]
+}
\ No newline at end of file
diff --git a/web/ons-demo/data/wm_core_topology_links_json.json b/web/ons-demo/data/wm_core_topology_links_json.json
new file mode 100644
index 0000000..3fd7bf0
--- /dev/null
+++ b/web/ons-demo/data/wm_core_topology_links_json.json
@@ -0,0 +1,1166 @@
+[
+    {
+        "dst-port": 26,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:19"
+    },
+    {
+        "dst-port": 12,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:0b"
+    },
+    {
+        "dst-port": 7,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:06"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:02"
+    },
+    {
+        "dst-port": 19,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:12"
+    },
+    {
+        "dst-port": 17,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:10"
+    },
+    {
+        "dst-port": 15,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:0e"
+    },
+    {
+        "dst-port": 20,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:13"
+    },
+    {
+        "dst-port": 18,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:11"
+    },
+    {
+        "dst-port": 29,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:1c"
+    },
+    {
+        "dst-port": 18,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:11"
+    },
+    {
+        "dst-port": 17,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:10"
+    },
+    {
+        "dst-port": 46,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:2d"
+    },
+    {
+        "dst-port": 28,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:1b"
+    },
+    {
+        "dst-port": 33,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:20"
+    },
+    {
+        "dst-port": 16,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:0f"
+    },
+    {
+        "dst-port": 34,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:21"
+    },
+    {
+        "dst-port": 12,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:0b"
+    },
+    {
+        "dst-port": 43,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:2a"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:0b",
+        "src-port": 12,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:13",
+        "src-port": 20,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:05",
+        "src-port": 6,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:0c",
+        "src-port": 13,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:12",
+        "src-port": 19,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:04",
+        "src-port": 5,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:11",
+        "src-port": 18,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:06",
+        "src-port": 7,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:07",
+        "src-port": 8,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:10",
+        "src-port": 17,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:01",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:08",
+        "src-port": 9,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:09",
+        "src-port": 10,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:0f",
+        "src-port": 16,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:0e",
+        "src-port": 15,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:0d",
+        "src-port": 14,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 5,
+        "dst-switch": "00:00:00:00:ba:5e:ba:11",
+        "src-port": 21,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:02",
+        "src-port": 3,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:0a",
+        "src-port": 11,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:03",
+        "src-port": 4,
+        "src-switch": "00:00:00:00:00:00:02:00"
+    },
+    {
+        "dst-port": 9,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:08"
+    },
+    {
+        "dst-port": 13,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:0c"
+    },
+    {
+        "dst-port": 44,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:2b"
+    },
+    {
+        "dst-port": 5,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:04"
+    },
+    {
+        "dst-port": 17,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:10"
+    },
+    {
+        "dst-port": 5,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:04"
+    },
+    {
+        "dst-port": 38,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:25"
+    },
+    {
+        "dst-port": 37,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:24"
+    },
+    {
+        "dst-port": 8,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:07"
+    },
+    {
+        "dst-port": 7,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:06"
+    },
+    {
+        "dst-port": 31,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:1e"
+    },
+    {
+        "dst-port": 8,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:07"
+    },
+    {
+        "dst-port": 14,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:0d"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:02"
+    },
+    {
+        "dst-port": 19,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:12"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:00:ba:5e:ba:11",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:ba:5e:ba:13"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:20:4e:7f:51:8a:35",
+        "src-port": 3,
+        "src-switch": "00:00:00:00:ba:5e:ba:13"
+    },
+    {
+        "dst-port": 45,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:2c"
+    },
+    {
+        "dst-port": 9,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:08"
+    },
+    {
+        "dst-port": 11,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:0a"
+    },
+    {
+        "dst-port": 20,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:13"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:16:97:08:9a:46",
+        "src-port": 2,
+        "src-switch": "00:00:00:08:a2:08:f9:01"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:00:00:00:ba:12",
+        "src-port": 3,
+        "src-switch": "00:00:00:08:a2:08:f9:01"
+    },
+    {
+        "dst-port": 21,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 4,
+        "src-switch": "00:00:00:08:a2:08:f9:01"
+    },
+    {
+        "dst-port": 6,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:05"
+    },
+    {
+        "dst-port": 36,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:23"
+    },
+    {
+        "dst-port": 12,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:0b"
+    },
+    {
+        "dst-port": 6,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:05"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:00:00:00:ba:12",
+        "src-port": 2,
+        "src-switch": "00:00:20:4e:7f:51:8a:35"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:00:ba:5e:ba:13",
+        "src-port": 3,
+        "src-switch": "00:00:20:4e:7f:51:8a:35"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:03"
+    },
+    {
+        "dst-port": 8,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:07"
+    },
+    {
+        "dst-port": 13,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:0c"
+    },
+    {
+        "dst-port": 48,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:2f"
+    },
+    {
+        "dst-port": 13,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:0c"
+    },
+    {
+        "dst-port": 10,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:09"
+    },
+    {
+        "dst-port": 16,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:0f"
+    },
+    {
+        "dst-port": 15,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:0e"
+    },
+    {
+        "dst-port": 41,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:28"
+    },
+    {
+        "dst-port": 6,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:05"
+    },
+    {
+        "dst-port": 39,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:26"
+    },
+    {
+        "dst-port": 35,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:22"
+    },
+    {
+        "dst-port": 14,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:0d"
+    },
+    {
+        "dst-port": 32,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:1f"
+    },
+    {
+        "dst-port": 23,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:16"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:01"
+    },
+    {
+        "dst-port": 9,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:08"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:01"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:01"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:00:ba:5e:ba:11",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:ba:12"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:08:a2:08:f9:01",
+        "src-port": 3,
+        "src-switch": "00:00:00:00:00:00:ba:12"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:20:4e:7f:51:8a:35",
+        "src-port": 4,
+        "src-switch": "00:00:00:00:00:00:ba:12"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:0b",
+        "src-port": 12,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:13",
+        "src-port": 20,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:05",
+        "src-port": 6,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:0c",
+        "src-port": 13,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:12",
+        "src-port": 19,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:04",
+        "src-port": 5,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:11",
+        "src-port": 18,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:06",
+        "src-port": 7,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:07",
+        "src-port": 8,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:10",
+        "src-port": 17,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:01",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:08",
+        "src-port": 9,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:09",
+        "src-port": 10,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:0f",
+        "src-port": 16,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:0e",
+        "src-port": 15,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:0d",
+        "src-port": 14,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:08:a2:08:f9:01",
+        "src-port": 21,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:02",
+        "src-port": 3,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:0a",
+        "src-port": 11,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:03:03",
+        "src-port": 4,
+        "src-switch": "00:00:00:00:00:00:03:00"
+    },
+    {
+        "dst-port": 21,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:14"
+    },
+    {
+        "dst-port": 11,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:0a"
+    },
+    {
+        "dst-port": 25,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:18"
+    },
+    {
+        "dst-port": 20,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:13"
+    },
+    {
+        "dst-port": 3,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:02"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:03"
+    },
+    {
+        "dst-port": 7,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:06"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:27",
+        "src-port": 40,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:15",
+        "src-port": 22,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:30",
+        "src-port": 49,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:0b",
+        "src-port": 12,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:1e",
+        "src-port": 31,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:13",
+        "src-port": 20,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:05",
+        "src-port": 6,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:1a",
+        "src-port": 27,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:21",
+        "src-port": 34,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:12",
+        "src-port": 19,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:0c",
+        "src-port": 13,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:28",
+        "src-port": 41,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:2f",
+        "src-port": 48,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:04",
+        "src-port": 5,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:1b",
+        "src-port": 28,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:20",
+        "src-port": 33,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:11",
+        "src-port": 18,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:29",
+        "src-port": 42,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:18",
+        "src-port": 25,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:2e",
+        "src-port": 47,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:2d",
+        "src-port": 46,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:06",
+        "src-port": 7,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:19",
+        "src-port": 26,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:23",
+        "src-port": 36,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:07",
+        "src-port": 8,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:2c",
+        "src-port": 45,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:22",
+        "src-port": 35,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:10",
+        "src-port": 17,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:01",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:08",
+        "src-port": 9,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:16:97:08:9a:46",
+        "src-port": 51,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:24",
+        "src-port": 37,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:2b",
+        "src-port": 44,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:2a",
+        "src-port": 43,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:0f",
+        "src-port": 16,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:1d",
+        "src-port": 30,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:16",
+        "src-port": 23,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:09",
+        "src-port": 10,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:0e",
+        "src-port": 15,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:25",
+        "src-port": 38,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:1c",
+        "src-port": 29,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:17",
+        "src-port": 24,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:0d",
+        "src-port": 14,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:14",
+        "src-port": 21,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:02",
+        "src-port": 3,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:26",
+        "src-port": 39,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:1f",
+        "src-port": 32,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:0a",
+        "src-port": 11,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:03",
+        "src-port": 4,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:01:31",
+        "src-port": 50,
+        "src-switch": "00:00:00:00:00:00:01:00"
+    },
+    {
+        "dst-port": 15,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:0e"
+    },
+    {
+        "dst-port": 19,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:12"
+    },
+    {
+        "dst-port": 10,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:09"
+    },
+    {
+        "dst-port": 49,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:30"
+    },
+    {
+        "dst-port": 10,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:09"
+    },
+    {
+        "dst-port": 27,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:1a"
+    },
+    {
+        "dst-port": 40,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:27"
+    },
+    {
+        "dst-port": 18,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:11"
+    },
+    {
+        "dst-port": 5,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:04"
+    },
+    {
+        "dst-port": 4,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:03"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:ba:5e:ba:11",
+        "src-port": 2,
+        "src-switch": "00:00:00:16:97:08:9a:46"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:08:a2:08:f9:01",
+        "src-port": 3,
+        "src-switch": "00:00:00:16:97:08:9a:46"
+    },
+    {
+        "dst-port": 51,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 4,
+        "src-switch": "00:00:00:16:97:08:9a:46"
+    },
+    {
+        "dst-port": 50,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:31"
+    },
+    {
+        "dst-port": 30,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:1d"
+    },
+    {
+        "dst-port": 14,
+        "dst-switch": "00:00:00:00:00:00:03:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:03:0d"
+    },
+    {
+        "dst-port": 16,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:0f"
+    },
+    {
+        "dst-port": 22,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:15"
+    },
+    {
+        "dst-port": 24,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:17"
+    },
+    {
+        "dst-port": 21,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 5,
+        "src-switch": "00:00:00:00:ba:5e:ba:11"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:16:97:08:9a:46",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:ba:5e:ba:11"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:ba:5e:ba:13",
+        "src-port": 3,
+        "src-switch": "00:00:00:00:ba:5e:ba:11"
+    },
+    {
+        "dst-port": 2,
+        "dst-switch": "00:00:00:00:00:00:ba:12",
+        "src-port": 4,
+        "src-switch": "00:00:00:00:ba:5e:ba:11"
+    },
+    {
+        "dst-port": 42,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:29"
+    },
+    {
+        "dst-port": 11,
+        "dst-switch": "00:00:00:00:00:00:02:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:02:0a"
+    },
+    {
+        "dst-port": 47,
+        "dst-switch": "00:00:00:00:00:00:01:00",
+        "src-port": 2,
+        "src-switch": "00:00:00:00:00:00:01:2e"
+    }
+]
\ No newline at end of file
diff --git a/web/ons-demo/data/wm_core_topology_switches_all_json.json b/web/ons-demo/data/wm_core_topology_switches_all_json.json
new file mode 100644
index 0000000..cf23703
--- /dev/null
+++ b/web/ons-demo/data/wm_core_topology_switches_all_json.json
@@ -0,0 +1,2318 @@
+[
+    {
+        "dpid": "00:00:00:00:00:00:01:19",
+        "ports": [
+            {
+                "desc": "sw01.25-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.25-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:0b",
+        "ports": [
+            {
+                "desc": "sw01.11-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.11-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:06",
+        "ports": [
+            {
+                "desc": "sw01.06-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.06-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:02",
+        "ports": [
+            {
+                "desc": "sw01.02-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.02-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:12",
+        "ports": [
+            {
+                "desc": "sw03.18-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.18-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:10",
+        "ports": [
+            {
+                "desc": "sw01.16-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.16-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:0e",
+        "ports": [
+            {
+                "desc": "sw02.14-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.14-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:13",
+        "ports": [
+            {
+                "desc": "sw03.19-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.19-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:11",
+        "ports": [
+            {
+                "desc": "sw03.17-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.17-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:1c",
+        "ports": [
+            {
+                "desc": "sw01.28-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.28-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:11",
+        "ports": [
+            {
+                "desc": "sw01.17-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.17-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:10",
+        "ports": [
+            {
+                "desc": "sw02.16-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.16-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:2d",
+        "ports": [
+            {
+                "desc": "sw01.45-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.45-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:1b",
+        "ports": [
+            {
+                "desc": "sw01.27-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.27-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:20",
+        "ports": [
+            {
+                "desc": "sw01.32-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.32-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:0f",
+        "ports": [
+            {
+                "desc": "sw03.15-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.15-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:21",
+        "ports": [
+            {
+                "desc": "sw01.33-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.33-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:0b",
+        "ports": [
+            {
+                "desc": "sw03.11-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.11-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:2a",
+        "ports": [
+            {
+                "desc": "sw01.42-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.42-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:00",
+        "ports": [
+            {
+                "desc": "sw02.00-eth12",
+                "devices": [],
+                "number": 12,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth20",
+                "devices": [],
+                "number": 20,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth6",
+                "devices": [],
+                "number": 6,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth13",
+                "devices": [],
+                "number": 13,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth19",
+                "devices": [],
+                "number": 19,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth5",
+                "devices": [],
+                "number": 5,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth18",
+                "devices": [],
+                "number": 18,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth7",
+                "devices": [],
+                "number": 7,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth8",
+                "devices": [],
+                "number": 8,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth17",
+                "devices": [],
+                "number": 17,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth9",
+                "devices": [],
+                "number": 9,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth10",
+                "devices": [],
+                "number": 10,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth16",
+                "devices": [],
+                "number": 16,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth15",
+                "devices": [],
+                "number": 15,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth14",
+                "devices": [],
+                "number": 14,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "tapb0",
+                "devices": [],
+                "number": 21,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth11",
+                "devices": [],
+                "number": 11,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.00-eth4",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:08",
+        "ports": [
+            {
+                "desc": "sw01.08-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.08-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:0c",
+        "ports": [
+            {
+                "desc": "sw03.12-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.12-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:2b",
+        "ports": [
+            {
+                "desc": "sw01.43-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.43-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:04",
+        "ports": [
+            {
+                "desc": "sw02.04-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.04-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:10",
+        "ports": [
+            {
+                "desc": "sw03.16-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.16-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:04",
+        "ports": [
+            {
+                "desc": "sw01.04-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.04-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:25",
+        "ports": [
+            {
+                "desc": "sw01.37-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.37-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:24",
+        "ports": [
+            {
+                "desc": "sw01.36-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.36-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:07",
+        "ports": [
+            {
+                "desc": "sw02.07-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.07-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:06",
+        "ports": [
+            {
+                "desc": "sw03.06-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.06-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:1e",
+        "ports": [
+            {
+                "desc": "sw01.30-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.30-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:07",
+        "ports": [
+            {
+                "desc": "sw03.07-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.07-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:0d",
+        "ports": [
+            {
+                "desc": "sw01.13-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.13-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:02",
+        "ports": [
+            {
+                "desc": "sw02.02-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.02-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:12",
+        "ports": [
+            {
+                "desc": "sw01.18-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.18-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:ba:5e:ba:13",
+        "ports": [
+            {
+                "desc": "swd5-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd5-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd5-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:2c",
+        "ports": [
+            {
+                "desc": "sw01.44-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.44-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:08",
+        "ports": [
+            {
+                "desc": "sw02.08-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.08-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:0a",
+        "ports": [
+            {
+                "desc": "sw03.10-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.10-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:13",
+        "ports": [
+            {
+                "desc": "sw01.19-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.19-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:08:a2:08:f9:01",
+        "ports": [
+            {
+                "desc": "swd3-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd3-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd3-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "tapd2",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:05",
+        "ports": [
+            {
+                "desc": "sw03.05-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.05-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:23",
+        "ports": [
+            {
+                "desc": "sw01.35-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.35-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:0b",
+        "ports": [
+            {
+                "desc": "sw02.11-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.11-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:05",
+        "ports": [
+            {
+                "desc": "sw01.05-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.05-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:20:4e:7f:51:8a:35",
+        "ports": [
+            {
+                "desc": "swd6-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd6-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd6-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:03",
+        "ports": [
+            {
+                "desc": "sw03.03-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.03-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:07",
+        "ports": [
+            {
+                "desc": "sw01.07-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.07-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:0c",
+        "ports": [
+            {
+                "desc": "sw02.12-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.12-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:2f",
+        "ports": [
+            {
+                "desc": "sw01.47-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.47-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:0c",
+        "ports": [
+            {
+                "desc": "sw01.12-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.12-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:09",
+        "ports": [
+            {
+                "desc": "sw03.09-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.09-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:0f",
+        "ports": [
+            {
+                "desc": "sw02.15-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.15-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:0e",
+        "ports": [
+            {
+                "desc": "sw03.14-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.14-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:28",
+        "ports": [
+            {
+                "desc": "sw01.40-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.40-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:05",
+        "ports": [
+            {
+                "desc": "sw02.05-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.05-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:26",
+        "ports": [
+            {
+                "desc": "sw01.38-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.38-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:22",
+        "ports": [
+            {
+                "desc": "sw01.34-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.34-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:0d",
+        "ports": [
+            {
+                "desc": "sw02.13-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.13-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:1f",
+        "ports": [
+            {
+                "desc": "sw01.31-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.31-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:16",
+        "ports": [
+            {
+                "desc": "sw01.22-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.22-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:01",
+        "ports": [
+            {
+                "desc": "sw02.01-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.01-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:08",
+        "ports": [
+            {
+                "desc": "sw03.08-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.08-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:01",
+        "ports": [
+            {
+                "desc": "sw03.01-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.01-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:01",
+        "ports": [
+            {
+                "desc": "sw01.01-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.01-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:ba:12",
+        "ports": [
+            {
+                "desc": "swd4-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd4-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd4-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd4-eth4",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:00",
+        "ports": [
+            {
+                "desc": "sw03.00-eth12",
+                "devices": [],
+                "number": 12,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth20",
+                "devices": [],
+                "number": 20,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth6",
+                "devices": [],
+                "number": 6,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth13",
+                "devices": [],
+                "number": 13,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth19",
+                "devices": [],
+                "number": 19,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth5",
+                "devices": [],
+                "number": 5,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth18",
+                "devices": [],
+                "number": 18,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth7",
+                "devices": [],
+                "number": 7,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth8",
+                "devices": [],
+                "number": 8,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth17",
+                "devices": [],
+                "number": 17,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth9",
+                "devices": [],
+                "number": 9,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth10",
+                "devices": [],
+                "number": 10,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth16",
+                "devices": [],
+                "number": 16,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth15",
+                "devices": [],
+                "number": 15,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth14",
+                "devices": [],
+                "number": 14,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "tapc0",
+                "devices": [],
+                "number": 21,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth11",
+                "devices": [],
+                "number": 11,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.00-eth4",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:14",
+        "ports": [
+            {
+                "desc": "sw01.20-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.20-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:0a",
+        "ports": [
+            {
+                "desc": "sw01.10-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.10-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:18",
+        "ports": [
+            {
+                "desc": "sw01.24-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.24-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:13",
+        "ports": [
+            {
+                "desc": "sw02.19-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.19-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:02",
+        "ports": [
+            {
+                "desc": "sw03.02-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.02-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:03",
+        "ports": [
+            {
+                "desc": "sw01.03-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.03-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:06",
+        "ports": [
+            {
+                "desc": "sw02.06-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.06-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:00",
+        "ports": [
+            {
+                "desc": "sw01.00-eth40",
+                "devices": [],
+                "number": 40,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth22",
+                "devices": [],
+                "number": 22,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth49",
+                "devices": [],
+                "number": 49,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth12",
+                "devices": [],
+                "number": 12,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth31",
+                "devices": [],
+                "number": 31,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth20",
+                "devices": [],
+                "number": 20,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth6",
+                "devices": [],
+                "number": 6,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth27",
+                "devices": [],
+                "number": 27,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth34",
+                "devices": [],
+                "number": 34,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth19",
+                "devices": [],
+                "number": 19,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth13",
+                "devices": [],
+                "number": 13,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth41",
+                "devices": [],
+                "number": 41,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth48",
+                "devices": [],
+                "number": 48,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth5",
+                "devices": [],
+                "number": 5,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth28",
+                "devices": [],
+                "number": 28,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth33",
+                "devices": [],
+                "number": 33,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth18",
+                "devices": [],
+                "number": 18,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth42",
+                "devices": [],
+                "number": 42,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth25",
+                "devices": [],
+                "number": 25,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth47",
+                "devices": [],
+                "number": 47,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth46",
+                "devices": [],
+                "number": 46,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth7",
+                "devices": [],
+                "number": 7,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth26",
+                "devices": [],
+                "number": 26,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth36",
+                "devices": [],
+                "number": 36,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth8",
+                "devices": [],
+                "number": 8,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth45",
+                "devices": [],
+                "number": 45,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth35",
+                "devices": [],
+                "number": 35,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth17",
+                "devices": [],
+                "number": 17,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth9",
+                "devices": [],
+                "number": 9,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "tapa0",
+                "devices": [],
+                "number": 51,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth37",
+                "devices": [],
+                "number": 37,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth44",
+                "devices": [],
+                "number": 44,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth43",
+                "devices": [],
+                "number": 43,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth16",
+                "devices": [],
+                "number": 16,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth30",
+                "devices": [],
+                "number": 30,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth23",
+                "devices": [],
+                "number": 23,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth10",
+                "devices": [],
+                "number": 10,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth15",
+                "devices": [],
+                "number": 15,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth38",
+                "devices": [],
+                "number": 38,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth29",
+                "devices": [],
+                "number": 29,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth24",
+                "devices": [],
+                "number": 24,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth14",
+                "devices": [],
+                "number": 14,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth21",
+                "devices": [],
+                "number": 21,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth39",
+                "devices": [],
+                "number": 39,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth32",
+                "devices": [],
+                "number": 32,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth11",
+                "devices": [],
+                "number": 11,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth4",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.00-eth50",
+                "devices": [],
+                "number": 50,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:0e",
+        "ports": [
+            {
+                "desc": "sw01.14-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.14-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:12",
+        "ports": [
+            {
+                "desc": "sw02.18-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.18-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:09",
+        "ports": [
+            {
+                "desc": "sw01.09-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.09-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:30",
+        "ports": [
+            {
+                "desc": "sw01.48-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.48-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:09",
+        "ports": [
+            {
+                "desc": "sw02.09-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.09-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:1a",
+        "ports": [
+            {
+                "desc": "sw01.26-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.26-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:27",
+        "ports": [
+            {
+                "desc": "sw01.39-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.39-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:11",
+        "ports": [
+            {
+                "desc": "sw02.17-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.17-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:04",
+        "ports": [
+            {
+                "desc": "sw03.04-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.04-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:03",
+        "ports": [
+            {
+                "desc": "sw02.03-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.03-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:16:97:08:9a:46",
+        "ports": [
+            {
+                "desc": "swd1-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd1-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd1-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "tapd0",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:31",
+        "ports": [
+            {
+                "desc": "sw01.49-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.49-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:1d",
+        "ports": [
+            {
+                "desc": "sw01.29-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.29-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:03:0d",
+        "ports": [
+            {
+                "desc": "sw03.13-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw03.13-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:0f",
+        "ports": [
+            {
+                "desc": "sw01.15-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.15-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:15",
+        "ports": [
+            {
+                "desc": "sw01.21-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.21-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:17",
+        "ports": [
+            {
+                "desc": "sw01.23-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.23-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:ba:5e:ba:11",
+        "ports": [
+            {
+                "desc": "tapd1",
+                "devices": [],
+                "number": 5,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd2-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd2-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd2-eth3",
+                "devices": [],
+                "number": 3,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "swd2-eth4",
+                "devices": [],
+                "number": 4,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:29",
+        "ports": [
+            {
+                "desc": "sw01.41-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.41-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:02:0a",
+        "ports": [
+            {
+                "desc": "sw02.10-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw02.10-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    },
+    {
+        "dpid": "00:00:00:00:00:00:01:2e",
+        "ports": [
+            {
+                "desc": "sw01.46-eth2",
+                "devices": [],
+                "number": 2,
+                "state": "ACTIVE"
+            },
+            {
+                "desc": "sw01.46-eth1",
+                "devices": [],
+                "number": 1,
+                "state": "ACTIVE"
+            }
+        ],
+        "state": "ACTIVE"
+    }
+]
\ No newline at end of file
diff --git a/web/ons-demo/data/wm_flow_getall_json.json b/web/ons-demo/data/wm_flow_getall_json.json
new file mode 100644
index 0000000..95b4fb0
--- /dev/null
+++ b/web/ons-demo/data/wm_flow_getall_json.json
@@ -0,0 +1,4014 @@
+[
+    {
+        "dataPath": {
+            "dstPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:01:01"
+                },
+                "port": {
+                    "value": 1
+                }
+            },
+            "flowEntries": [
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x19",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x31",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x35",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x55",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x59",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x61",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x65",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x7f",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x83",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa3",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 21
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa4",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:08:a2:08:f9:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa5",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 4
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:16:97:08:9a:46"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 4
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa6",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa7",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa8",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                }
+            ],
+            "srcPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:03:01"
+                },
+                "port": {
+                    "value": 1
+                }
+            }
+        },
+        "flowId": {
+            "value": "0x2"
+        },
+        "installerId": {
+            "value": "host0301-host0101"
+        }
+    },
+    {
+        "dataPath": {
+            "dstPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:03:01"
+                },
+                "port": {
+                    "value": 1
+                }
+            },
+            "flowEntries": [
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x24",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x38",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x3c",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x4a",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x4e",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x6e",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x72",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x7a",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x7e",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x9d",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x9e",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:16:97:08:9a:46"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x9f",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 4
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:08:a2:08:f9:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 4
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa0",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa1",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 21
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0xa2",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:01"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:01"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                }
+            ],
+            "srcPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:01:01"
+                },
+                "port": {
+                    "value": 1
+                }
+            }
+        },
+        "flowId": {
+            "value": "0x1"
+        },
+        "installerId": {
+            "value": "host0101-host0301"
+        }
+    },
+    {
+        "dataPath": {
+            "dstPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:03:02"
+                },
+                "port": {
+                    "value": 1
+                }
+            },
+            "flowEntries": [
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x2b",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x43",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x44",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x5b",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x5c",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x73",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x74",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x8b",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x8c",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x91",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 51
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x92",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:16:97:08:9a:46"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x93",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 4
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:08:a2:08:f9:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 4
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x94",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x95",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 21
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x96",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                }
+            ],
+            "srcPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:01:02"
+                },
+                "port": {
+                    "value": 1
+                }
+            }
+        },
+        "flowId": {
+            "value": "0x3"
+        },
+        "installerId": {
+            "value": "host0102-host0302"
+        }
+    },
+    {
+        "dataPath": {
+            "dstPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:01:02"
+                },
+                "port": {
+                    "value": 1
+                }
+            },
+            "flowEntries": [
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x2a",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x41",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x42",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x53",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x54",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x6b",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x6c",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x89",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x8a",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_DELETE",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x97",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 1
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:03:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 21
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x98",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:08:a2:08:f9:01"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 2
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x99",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 4
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:16:97:08:9a:46"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 4
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x9a",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 3
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:00"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 3
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x9b",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 51
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                },
+                {
+                    "dpid": {
+                        "value": "00:00:00:00:00:00:01:02"
+                    },
+                    "flowEntryActions": [
+                        {
+                            "actionEnqueue": null,
+                            "actionOutput": {
+                                "maxLen": 0,
+                                "port": {
+                                    "value": 1
+                                }
+                            },
+                            "actionSetEthernetDstAddr": null,
+                            "actionSetEthernetSrcAddr": null,
+                            "actionSetIPv4DstAddr": null,
+                            "actionSetIPv4SrcAddr": null,
+                            "actionSetIpToS": null,
+                            "actionSetTcpUdpDstPort": null,
+                            "actionSetTcpUdpSrcPort": null,
+                            "actionSetVlanId": null,
+                            "actionSetVlanPriority": null,
+                            "actionStripVlan": null,
+                            "actionType": "ACTION_OUTPUT"
+                        }
+                    ],
+                    "flowEntryErrorState": null,
+                    "flowEntryId": "0x9c",
+                    "flowEntryMatch": {
+                        "dstIPv4Net": null,
+                        "dstMac": {
+                            "value": "00:00:00:00:01:02"
+                        },
+                        "dstTcpUdpPort": null,
+                        "ethernetFrameType": null,
+                        "inPort": {
+                            "value": 2
+                        },
+                        "ipProto": null,
+                        "ipToS": null,
+                        "matchDstIPv4Net": false,
+                        "matchDstMac": true,
+                        "matchDstTcpUdpPort": false,
+                        "matchEthernetFrameType": false,
+                        "matchInPort": true,
+                        "matchIpProto": false,
+                        "matchIpToS": false,
+                        "matchSrcIPv4Net": false,
+                        "matchSrcMac": true,
+                        "matchSrcTcpUdpPort": false,
+                        "matchVlanId": false,
+                        "matchVlanPriority": false,
+                        "srcIPv4Net": null,
+                        "srcMac": {
+                            "value": "00:00:00:00:03:02"
+                        },
+                        "srcTcpUdpPort": null,
+                        "vlanId": null,
+                        "vlanPriority": null
+                    },
+                    "flowEntrySwitchState": "FE_SWITCH_NOT_UPDATED",
+                    "flowEntryUserState": "FE_USER_ADD",
+                    "inPort": null,
+                    "outPort": null
+                }
+            ],
+            "srcPort": {
+                "dpid": {
+                    "value": "00:00:00:00:00:00:03:02"
+                },
+                "port": {
+                    "value": 1
+                }
+            }
+        },
+        "flowId": {
+            "value": "0x4"
+        },
+        "installerId": {
+            "value": "host0302-host0102"
+        }
+    }
+]
\ No newline at end of file
diff --git a/web/ons-demo/data/wm_registry_controllers_json.json b/web/ons-demo/data/wm_registry_controllers_json.json
new file mode 100644
index 0000000..18dc9b0
--- /dev/null
+++ b/web/ons-demo/data/wm_registry_controllers_json.json
@@ -0,0 +1,6 @@
+[
+    "onos9vpc",
+    "onos10vpc",
+    "onos11vpc",
+    "onos12vpc"
+]
\ No newline at end of file
diff --git a/web/ons-demo/data/wm_registry_switches_json.json b/web/ons-demo/data/wm_registry_switches_json.json
new file mode 100644
index 0000000..da2e5aa
--- /dev/null
+++ b/web/ons-demo/data/wm_registry_switches_json.json
@@ -0,0 +1,1022 @@
+{
+    "00:00:00:00:00:00:01:00": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:01": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:02": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:03": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:04": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:05": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:06": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:07": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:08": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:09": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:0a": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:0b": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:0c": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:0d": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:0e": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:0f": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:10": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:11": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:12": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:13": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:14": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:15": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:16": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:17": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:18": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:19": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:1a": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:1b": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:1c": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:1d": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:1e": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:1f": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:20": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:21": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:22": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:23": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:24": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:25": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:26": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:27": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:28": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:29": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:2a": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:2b": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:2c": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:2d": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:2e": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:2f": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:30": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:01:31": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:00": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:01": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:02": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:03": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:04": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:05": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:06": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:07": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:08": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:09": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:0a": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:0b": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:0c": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:0d": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:0e": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:0f": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:10": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:11": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:12": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:02:13": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:00": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:01": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:02": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:03": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:04": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:05": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:06": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:07": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:08": [
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:09": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:0a": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:0b": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:0c": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:0d": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:0e": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:0f": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:10": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:11": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:12": [
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        },
+        {
+            "controllerId": "onos9vpc"
+        }
+    ],
+    "00:00:00:00:00:00:03:13": [
+        {
+            "controllerId": "onos9vpc"
+        },
+        {
+            "controllerId": "onos11vpc"
+        },
+        {
+            "controllerId": "onos10vpc"
+        }
+    ],
+    "00:00:00:16:97:08:9a:46": [
+        {
+            "controllerId": "onos12vpc"
+        }
+    ],
+    "00:00:00:00:ba:5e:ba:11": [
+        {
+            "controllerId": "onos12vpc"
+        }
+    ],
+    "00:00:00:08:a2:08:f9:01": [
+        {
+            "controllerId": "onos12vpc"
+        }
+    ],
+    "00:00:00:00:00:00:ba:12": [
+        {
+            "controllerId": "onos12vpc"
+        }
+    ],
+    "00:00:00:00:ba:5e:ba:13": [
+        {
+            "controllerId": "onos12vpc"
+        }
+    ],
+    "00:00:20:4e:7f:51:8a:35": [
+        {
+            "controllerId": "onos12vpc"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/web/ons-demo/index.html b/web/ons-demo/index.html
new file mode 100644
index 0000000..ef2cd65
--- /dev/null
+++ b/web/ons-demo/index.html
@@ -0,0 +1,40 @@
+<html>
+
+<head>
+	<link rel="stylesheet" href="css/layout.default.css" type="text/css"/>
+	<link rel="stylesheet" href="css/skin.default.css" type="text/css"/>
+	<script src="js/d3.v3.js" charset="utf-8"></script>
+	<script src="js/async.js"></script>
+	<script src="js/model.js"></script>
+</head>
+
+<body>
+
+<div id='left'>
+	<div class='header'>
+		<img id='logo' src='assets/logo.png'></img>
+	</div>
+	<div id='controllers'>
+		<div class='header'>Controllers</div>
+		<div id='controllerList'></div>
+	</div>
+</div>
+
+<div id='right'>
+	<div class='header'>
+		<div id='status'>
+			<div class='status'><span class='static'>Last updated:</span><span id='lastUpdate' class='dynamic'>Mon Mar 18 11:11:12 PDT 2013</span></div>
+			<div class='status'><span class='dynamic' id='activeFlows'>4000</span><span class='static'>Flows</span></div>
+			<div class='status'><span class='dynamic' id='activeSwitches'>200</span><span class='static'>Active Switches</span></div>
+		</div>
+		<div id='traceButton' class='button'>Trace</div>
+	</div>
+	<div id='selectedFlows'>Selected Flows</div>
+	<div id='topology'><div id='svg-container'> </div></div>
+</div>
+
+
+<script src="js/app.js"></script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/web/ons-demo/js/app.js b/web/ons-demo/js/app.js
new file mode 100644
index 0000000..6f259d0
--- /dev/null
+++ b/web/ons-demo/js/app.js
@@ -0,0 +1,257 @@
+/*global d3*/
+
+
+var colors = [
+	'color1',
+	'color2',
+	'color3',
+	'color4',
+	'color5',
+	'color6',
+	'color7',
+	'color8',
+	'color9',
+	'color10',
+	'color11',
+	'color12',
+]
+
+var controllerColorMap = {};
+
+
+
+function createTopologyView() {
+	return d3.select('#svg-container').append('svg:svg').append('svg:svg').attr('id', 'viewBox').attr('viewBox', '0 0 1000 1000').attr('preserveAspectRatio', 'none').
+			attr('id', 'viewbox').append('svg:g').attr('transform', 'translate(500 500)');
+}
+
+function updateHeader(model) {
+	d3.select('#lastUpdate').text(new Date());
+	d3.select('#activeSwitches').text(model.edgeSwitches.length + model.aggregationSwitches.length + model.coreSwitches.length);
+	d3.select('#activeFlows').text(model.flows.length);
+}
+
+function toRadians (angle) {
+  return angle * (Math.PI / 180);
+}
+
+function updateTopology(svg, model) {
+
+	// DRAW THE NODES
+	var rings = [{
+		radius: 3,
+		width: 6,
+		switches: model.edgeSwitches,
+		className: 'edge',
+		angles: []
+	}, {
+		radius: 2.25,
+		width: 12,
+		switches: model.aggregationSwitches,
+		className: 'aggregation',
+		angles: []
+	}, {
+		radius: .75,
+		width: 18,
+		switches: model.coreSwitches,
+		className: 'core',
+		angles: []
+	}];
+
+
+	var aggRanges = {};
+
+	// arrange edge switches at equal increments
+	var k = 360 / rings[0].switches.length;
+	rings[0].switches.forEach(function (s, i) {
+		var angle = k * i;
+
+		rings[0].angles[i] = angle;
+
+		// record the angle for the agg switch layout
+		var dpid = s.dpid.split(':');
+		dpid[7] = '00';
+		var aggdpid = dpid.join(':');
+		var aggRange = aggRanges[aggdpid];
+		if (!aggRange) {
+			aggRange = aggRanges[aggdpid] = {};
+			aggRange.min = aggRange.max = angle;
+		} else {
+			aggRange.max = angle;
+		}
+
+
+	});
+
+	// arrange aggregation switches to "fan out" to edge switches
+	k = 360 / rings[1].switches.length;
+	rings[1].switches.forEach(function (s, i) {
+//		rings[1].angles[i] = k * i;
+		var range = aggRanges[s.dpid];
+
+		rings[1].angles[i] = (range.min + range.max)/2;
+	});
+
+	// arrange core switches at equal increments
+	k = 360 / rings[2].switches.length;
+	rings[2].switches.forEach(function (s, i) {
+		rings[2].angles[i] = k * i;
+	});
+
+	function ringEnter(data, i) {
+		if (!data.switches.length) {
+			return;
+		}
+
+
+		var nodes = d3.select(this).selectAll("g")
+			.data(d3.range(data.switches.length).map(function() {
+				return data;
+			}))
+			.enter().append("svg:g")
+			.classed('nolabel', true)
+			.attr("id", function (_, i) {
+				return data.switches[i].dpid;
+			})
+			.attr("transform", function(_, i) {
+				return "rotate(" + data.angles[i]+ ")translate(" + data.radius * 150 + ")rotate(" + (-data.angles[i]) + ")";
+			});
+
+		nodes.append("svg:circle")
+			.attr('class', function (_, i)  {
+				return data.className + ' ' + controllerColorMap[data.switches[i].controller];
+			})
+			.attr("transform", function(_, i) {
+				var m = document.querySelector('#viewbox').getTransformToElement().inverse();
+				if (data.scale) {
+					m = m.scale(data.scale);
+				}
+				return "matrix( " + m.a + " " + m.b + " " + m.c + " " + m.d + " " + m.e + " " + m.f + " )";
+			})
+			.attr("x", -data.width / 2)
+			.attr("y", -data.width / 2)
+			.attr("r", data.width)
+			// .attr("fill", function (_, i) {
+			// 	return controllerColorMap[data.switches[i].controller]
+			// })
+
+		nodes.append("svg:text")
+				.text(function (d, i) {return d.switches[i].dpid})
+				.attr("x", 0)
+				.attr("y", 0)
+				.attr("transform", function(_, i) {
+					var m = document.querySelector('#viewbox').getTransformToElement().inverse();
+					if (data.scale) {
+						m = m.scale(data.scale);
+					}
+					return "matrix( " + m.a + " " + m.b + " " + m.c + " " + m.d + " " + m.e + " " + m.f + " )";
+				})
+
+		function showLabel(data, index) {
+			d3.select(document.getElementById(data.switches[index].dpid)).classed('nolabel', false);
+		}
+
+		function hideLabel(data, index) {
+			d3.select(document.getElementById(data.switches[index].dpid)).classed('nolabel', true);
+		}
+
+		nodes.on('mouseover', showLabel);
+		nodes.on('mouseout', hideLabel);
+	}
+
+	var ring = svg.selectAll("g")
+		.data(rings)
+		.enter().append("svg:g")
+		.attr("class", "ring")
+		.each(ringEnter);
+
+
+	// do mouseover zoom on edge nodes
+	function zoom(data, index) {
+		var g = d3.select(document.getElementById(data.switches[index].dpid)).select('circle');
+			g.transition().duration(100).attr("r", rings[0].width*3);
+	}
+
+	svg.selectAll('.edge').on('mouseover', zoom);
+	svg.selectAll('.edge').on('mousedown', zoom);
+
+	function unzoom(data, index) {
+		var g = d3.select(document.getElementById(data.switches[index].dpid)).select('circle');
+			g.transition().duration(100).attr("r", rings[0].width);
+	}
+	svg.selectAll('.edge').on('mouseout', unzoom);
+
+
+	// DRAW THE LINKS
+	var line = d3.svg.line()
+	    .x(function(d) {
+	    	return d.x;
+	    })
+	    .y(function(d) {
+	    	return d.y;
+	    })
+	    .interpolate("basis");
+
+	d3.select('svg').selectAll('path').data(model.links).enter().append("svg:path").attr("d", function (d) {
+		var src = d3.select(document.getElementById(d['src-switch']));
+		var dst = d3.select(document.getElementById(d['dst-switch']));
+
+		var srcPt = document.querySelector('svg').createSVGPoint();
+		srcPt.x = src.attr('x');
+		srcPt.y = src.attr('y');
+
+		var dstPt = document.querySelector('svg').createSVGPoint();
+		dstPt.x = dst.attr('x');
+		dstPt.y = dst.attr('y');
+
+		return line([srcPt.matrixTransform(src[0][0].getCTM()), dstPt.matrixTransform(dst[0][0].getCTM())]);
+	});
+}
+
+function updateControllers(model) {
+	var controllers = d3.select('#controllerList').selectAll('.controller').data(model.controllers);
+	controllers.enter().append('div')
+		.attr('class', function (d) {
+			var color = controllerColorMap[d];
+			if (!color) {
+				color = controllerColorMap[d] = colors.pop();
+			}
+			return 'controller ' + color;
+		});
+	controllers.text(function (d) {
+		return d;
+	});
+	controllers.exit().remove();
+
+	model.controllers.forEach(function (c) {
+		d3.select(document.body).classed(controllerColorMap[c] + '-selected', true);
+	});
+
+	controllers.on('click', function (c, index) {
+		var selected = d3.select(document.body).classed(controllerColorMap[c] + '-selected');
+		d3.select(document.body).classed(controllerColorMap[c] + '-selected', !selected);
+	});
+}
+
+var oldModel;
+function sync(svg) {
+	updateModel(function (newModel) {
+
+		if (!oldModel && JSON.stringify(oldModel) != JSON.stringify(newModel)) {
+			updateControllers(newModel);
+			updateTopology(svg, newModel);
+		} else {
+			console.log('no change');
+		}
+		updateHeader(newModel);
+
+		oldModel = newModel;
+
+		// do it again in 1s
+		setTimeout(function () {
+			sync(svg)
+		}, 1000);
+	});
+}
+
+sync(createTopologyView());
\ No newline at end of file
diff --git a/web/ons-demo/js/async.js b/web/ons-demo/js/async.js
new file mode 100644
index 0000000..5b277cd
--- /dev/null
+++ b/web/ons-demo/js/async.js
@@ -0,0 +1,947 @@
+/*global setImmediate: false, setTimeout: false, console: false */
+(function () {
+
+    var async = {};
+
+    // global on the server, window in the browser
+    var root, previous_async;
+
+    root = this;
+    if (root != null) {
+      previous_async = root.async;
+    }
+
+    async.noConflict = function () {
+        root.async = previous_async;
+        return async;
+    };
+
+    function only_once(fn) {
+        var called = false;
+        return function() {
+            if (called) throw new Error("Callback was already called.");
+            called = true;
+            fn.apply(root, arguments);
+        }
+    }
+
+    //// cross-browser compatiblity functions ////
+
+    var _each = function (arr, iterator) {
+        if (arr.forEach) {
+            return arr.forEach(iterator);
+        }
+        for (var i = 0; i < arr.length; i += 1) {
+            iterator(arr[i], i, arr);
+        }
+    };
+
+    var _map = function (arr, iterator) {
+        if (arr.map) {
+            return arr.map(iterator);
+        }
+        var results = [];
+        _each(arr, function (x, i, a) {
+            results.push(iterator(x, i, a));
+        });
+        return results;
+    };
+
+    var _reduce = function (arr, iterator, memo) {
+        if (arr.reduce) {
+            return arr.reduce(iterator, memo);
+        }
+        _each(arr, function (x, i, a) {
+            memo = iterator(memo, x, i, a);
+        });
+        return memo;
+    };
+
+    var _keys = function (obj) {
+        if (Object.keys) {
+            return Object.keys(obj);
+        }
+        var keys = [];
+        for (var k in obj) {
+            if (obj.hasOwnProperty(k)) {
+                keys.push(k);
+            }
+        }
+        return keys;
+    };
+
+    //// exported async module functions ////
+
+    //// nextTick implementation with browser-compatible fallback ////
+    if (typeof process === 'undefined' || !(process.nextTick)) {
+        if (typeof setImmediate === 'function') {
+            async.setImmediate = setImmediate;
+            async.nextTick = setImmediate;
+        }
+        else {
+            async.setImmediate = async.nextTick;
+            async.nextTick = function (fn) {
+                setTimeout(fn, 0);
+            };
+        }
+    }
+    else {
+        async.nextTick = process.nextTick;
+        async.setImmediate = setImmediate;
+    }
+
+    async.each = function (arr, iterator, callback) {
+        callback = callback || function () {};
+        if (!arr.length) {
+            return callback();
+        }
+        var completed = 0;
+        _each(arr, function (x) {
+            iterator(x, only_once(function (err) {
+                if (err) {
+                    callback(err);
+                    callback = function () {};
+                }
+                else {
+                    completed += 1;
+                    if (completed >= arr.length) {
+                        callback(null);
+                    }
+                }
+            }));
+        });
+    };
+    async.forEach = async.each;
+
+    async.eachSeries = function (arr, iterator, callback) {
+        callback = callback || function () {};
+        if (!arr.length) {
+            return callback();
+        }
+        var completed = 0;
+        var iterate = function () {
+            iterator(arr[completed], function (err) {
+                if (err) {
+                    callback(err);
+                    callback = function () {};
+                }
+                else {
+                    completed += 1;
+                    if (completed >= arr.length) {
+                        callback(null);
+                    }
+                    else {
+                        iterate();
+                    }
+                }
+            });
+        };
+        iterate();
+    };
+    async.forEachSeries = async.eachSeries;
+
+    async.eachLimit = function (arr, limit, iterator, callback) {
+        var fn = _eachLimit(limit);
+        fn.apply(null, [arr, iterator, callback]);
+    };
+    async.forEachLimit = async.eachLimit;
+
+    var _eachLimit = function (limit) {
+
+        return function (arr, iterator, callback) {
+            callback = callback || function () {};
+            if (!arr.length || limit <= 0) {
+                return callback();
+            }
+            var completed = 0;
+            var started = 0;
+            var running = 0;
+
+            (function replenish () {
+                if (completed >= arr.length) {
+                    return callback();
+                }
+
+                while (running < limit && started < arr.length) {
+                    started += 1;
+                    running += 1;
+                    iterator(arr[started - 1], function (err) {
+                        if (err) {
+                            callback(err);
+                            callback = function () {};
+                        }
+                        else {
+                            completed += 1;
+                            running -= 1;
+                            if (completed >= arr.length) {
+                                callback();
+                            }
+                            else {
+                                replenish();
+                            }
+                        }
+                    });
+                }
+            })();
+        };
+    };
+
+
+    var doParallel = function (fn) {
+        return function () {
+            var args = Array.prototype.slice.call(arguments);
+            return fn.apply(null, [async.each].concat(args));
+        };
+    };
+    var doParallelLimit = function(limit, fn) {
+        return function () {
+            var args = Array.prototype.slice.call(arguments);
+            return fn.apply(null, [_eachLimit(limit)].concat(args));
+        };
+    };
+    var doSeries = function (fn) {
+        return function () {
+            var args = Array.prototype.slice.call(arguments);
+            return fn.apply(null, [async.eachSeries].concat(args));
+        };
+    };
+
+
+    var _asyncMap = function (eachfn, arr, iterator, callback) {
+        var results = [];
+        arr = _map(arr, function (x, i) {
+            return {index: i, value: x};
+        });
+        eachfn(arr, function (x, callback) {
+            iterator(x.value, function (err, v) {
+                results[x.index] = v;
+                callback(err);
+            });
+        }, function (err) {
+            callback(err, results);
+        });
+    };
+    async.map = doParallel(_asyncMap);
+    async.mapSeries = doSeries(_asyncMap);
+    async.mapLimit = function (arr, limit, iterator, callback) {
+        return _mapLimit(limit)(arr, iterator, callback);
+    };
+
+    var _mapLimit = function(limit) {
+        return doParallelLimit(limit, _asyncMap);
+    };
+
+    // reduce only has a series version, as doing reduce in parallel won't
+    // work in many situations.
+    async.reduce = function (arr, memo, iterator, callback) {
+        async.eachSeries(arr, function (x, callback) {
+            iterator(memo, x, function (err, v) {
+                memo = v;
+                callback(err);
+            });
+        }, function (err) {
+            callback(err, memo);
+        });
+    };
+    // inject alias
+    async.inject = async.reduce;
+    // foldl alias
+    async.foldl = async.reduce;
+
+    async.reduceRight = function (arr, memo, iterator, callback) {
+        var reversed = _map(arr, function (x) {
+            return x;
+        }).reverse();
+        async.reduce(reversed, memo, iterator, callback);
+    };
+    // foldr alias
+    async.foldr = async.reduceRight;
+
+    var _filter = function (eachfn, arr, iterator, callback) {
+        var results = [];
+        arr = _map(arr, function (x, i) {
+            return {index: i, value: x};
+        });
+        eachfn(arr, function (x, callback) {
+            iterator(x.value, function (v) {
+                if (v) {
+                    results.push(x);
+                }
+                callback();
+            });
+        }, function (err) {
+            callback(_map(results.sort(function (a, b) {
+                return a.index - b.index;
+            }), function (x) {
+                return x.value;
+            }));
+        });
+    };
+    async.filter = doParallel(_filter);
+    async.filterSeries = doSeries(_filter);
+    // select alias
+    async.select = async.filter;
+    async.selectSeries = async.filterSeries;
+
+    var _reject = function (eachfn, arr, iterator, callback) {
+        var results = [];
+        arr = _map(arr, function (x, i) {
+            return {index: i, value: x};
+        });
+        eachfn(arr, function (x, callback) {
+            iterator(x.value, function (v) {
+                if (!v) {
+                    results.push(x);
+                }
+                callback();
+            });
+        }, function (err) {
+            callback(_map(results.sort(function (a, b) {
+                return a.index - b.index;
+            }), function (x) {
+                return x.value;
+            }));
+        });
+    };
+    async.reject = doParallel(_reject);
+    async.rejectSeries = doSeries(_reject);
+
+    var _detect = function (eachfn, arr, iterator, main_callback) {
+        eachfn(arr, function (x, callback) {
+            iterator(x, function (result) {
+                if (result) {
+                    main_callback(x);
+                    main_callback = function () {};
+                }
+                else {
+                    callback();
+                }
+            });
+        }, function (err) {
+            main_callback();
+        });
+    };
+    async.detect = doParallel(_detect);
+    async.detectSeries = doSeries(_detect);
+
+    async.some = function (arr, iterator, main_callback) {
+        async.each(arr, function (x, callback) {
+            iterator(x, function (v) {
+                if (v) {
+                    main_callback(true);
+                    main_callback = function () {};
+                }
+                callback();
+            });
+        }, function (err) {
+            main_callback(false);
+        });
+    };
+    // any alias
+    async.any = async.some;
+
+    async.every = function (arr, iterator, main_callback) {
+        async.each(arr, function (x, callback) {
+            iterator(x, function (v) {
+                if (!v) {
+                    main_callback(false);
+                    main_callback = function () {};
+                }
+                callback();
+            });
+        }, function (err) {
+            main_callback(true);
+        });
+    };
+    // all alias
+    async.all = async.every;
+
+    async.sortBy = function (arr, iterator, callback) {
+        async.map(arr, function (x, callback) {
+            iterator(x, function (err, criteria) {
+                if (err) {
+                    callback(err);
+                }
+                else {
+                    callback(null, {value: x, criteria: criteria});
+                }
+            });
+        }, function (err, results) {
+            if (err) {
+                return callback(err);
+            }
+            else {
+                var fn = function (left, right) {
+                    var a = left.criteria, b = right.criteria;
+                    return a < b ? -1 : a > b ? 1 : 0;
+                };
+                callback(null, _map(results.sort(fn), function (x) {
+                    return x.value;
+                }));
+            }
+        });
+    };
+
+    async.auto = function (tasks, callback) {
+        callback = callback || function () {};
+        var keys = _keys(tasks);
+        if (!keys.length) {
+            return callback(null);
+        }
+
+        var results = {};
+
+        var listeners = [];
+        var addListener = function (fn) {
+            listeners.unshift(fn);
+        };
+        var removeListener = function (fn) {
+            for (var i = 0; i < listeners.length; i += 1) {
+                if (listeners[i] === fn) {
+                    listeners.splice(i, 1);
+                    return;
+                }
+            }
+        };
+        var taskComplete = function () {
+            _each(listeners.slice(0), function (fn) {
+                fn();
+            });
+        };
+
+        addListener(function () {
+            if (_keys(results).length === keys.length) {
+                callback(null, results);
+                callback = function () {};
+            }
+        });
+
+        _each(keys, function (k) {
+            var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];
+            var taskCallback = function (err) {
+                var args = Array.prototype.slice.call(arguments, 1);
+                if (args.length <= 1) {
+                    args = args[0];
+                }
+                if (err) {
+                    var safeResults = {};
+                    _each(_keys(results), function(rkey) {
+                        safeResults[rkey] = results[rkey];
+                    });
+                    safeResults[k] = args;
+                    callback(err, safeResults);
+                    // stop subsequent errors hitting callback multiple times
+                    callback = function () {};
+                }
+                else {
+                    results[k] = args;
+                    async.setImmediate(taskComplete);
+                }
+            };
+            var requires = task.slice(0, Math.abs(task.length - 1)) || [];
+            var ready = function () {
+                return _reduce(requires, function (a, x) {
+                    return (a && results.hasOwnProperty(x));
+                }, true) && !results.hasOwnProperty(k);
+            };
+            if (ready()) {
+                task[task.length - 1](taskCallback, results);
+            }
+            else {
+                var listener = function () {
+                    if (ready()) {
+                        removeListener(listener);
+                        task[task.length - 1](taskCallback, results);
+                    }
+                };
+                addListener(listener);
+            }
+        });
+    };
+
+    async.waterfall = function (tasks, callback) {
+        callback = callback || function () {};
+        if (tasks.constructor !== Array) {
+          var err = new Error('First argument to waterfall must be an array of functions');
+          return callback(err);
+        }
+        if (!tasks.length) {
+            return callback();
+        }
+        var wrapIterator = function (iterator) {
+            return function (err) {
+                if (err) {
+                    callback.apply(null, arguments);
+                    callback = function () {};
+                }
+                else {
+                    var args = Array.prototype.slice.call(arguments, 1);
+                    var next = iterator.next();
+                    if (next) {
+                        args.push(wrapIterator(next));
+                    }
+                    else {
+                        args.push(callback);
+                    }
+                    async.setImmediate(function () {
+                        iterator.apply(null, args);
+                    });
+                }
+            };
+        };
+        wrapIterator(async.iterator(tasks))();
+    };
+
+    var _parallel = function(eachfn, tasks, callback) {
+        callback = callback || function () {};
+        if (tasks.constructor === Array) {
+            eachfn.map(tasks, function (fn, callback) {
+                if (fn) {
+                    fn(function (err) {
+                        var args = Array.prototype.slice.call(arguments, 1);
+                        if (args.length <= 1) {
+                            args = args[0];
+                        }
+                        callback.call(null, err, args);
+                    });
+                }
+            }, callback);
+        }
+        else {
+            var results = {};
+            eachfn.each(_keys(tasks), function (k, callback) {
+                tasks[k](function (err) {
+                    var args = Array.prototype.slice.call(arguments, 1);
+                    if (args.length <= 1) {
+                        args = args[0];
+                    }
+                    results[k] = args;
+                    callback(err);
+                });
+            }, function (err) {
+                callback(err, results);
+            });
+        }
+    };
+
+    async.parallel = function (tasks, callback) {
+        _parallel({ map: async.map, each: async.each }, tasks, callback);
+    };
+
+    async.parallelLimit = function(tasks, limit, callback) {
+        _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);
+    };
+
+    async.series = function (tasks, callback) {
+        callback = callback || function () {};
+        if (tasks.constructor === Array) {
+            async.mapSeries(tasks, function (fn, callback) {
+                if (fn) {
+                    fn(function (err) {
+                        var args = Array.prototype.slice.call(arguments, 1);
+                        if (args.length <= 1) {
+                            args = args[0];
+                        }
+                        callback.call(null, err, args);
+                    });
+                }
+            }, callback);
+        }
+        else {
+            var results = {};
+            async.eachSeries(_keys(tasks), function (k, callback) {
+                tasks[k](function (err) {
+                    var args = Array.prototype.slice.call(arguments, 1);
+                    if (args.length <= 1) {
+                        args = args[0];
+                    }
+                    results[k] = args;
+                    callback(err);
+                });
+            }, function (err) {
+                callback(err, results);
+            });
+        }
+    };
+
+    async.iterator = function (tasks) {
+        var makeCallback = function (index) {
+            var fn = function () {
+                if (tasks.length) {
+                    tasks[index].apply(null, arguments);
+                }
+                return fn.next();
+            };
+            fn.next = function () {
+                return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+            };
+            return fn;
+        };
+        return makeCallback(0);
+    };
+
+    async.apply = function (fn) {
+        var args = Array.prototype.slice.call(arguments, 1);
+        return function () {
+            return fn.apply(
+                null, args.concat(Array.prototype.slice.call(arguments))
+            );
+        };
+    };
+
+    var _concat = function (eachfn, arr, fn, callback) {
+        var r = [];
+        eachfn(arr, function (x, cb) {
+            fn(x, function (err, y) {
+                r = r.concat(y || []);
+                cb(err);
+            });
+        }, function (err) {
+            callback(err, r);
+        });
+    };
+    async.concat = doParallel(_concat);
+    async.concatSeries = doSeries(_concat);
+
+    async.whilst = function (test, iterator, callback) {
+        if (test()) {
+            iterator(function (err) {
+                if (err) {
+                    return callback(err);
+                }
+                async.whilst(test, iterator, callback);
+            });
+        }
+        else {
+            callback();
+        }
+    };
+
+    async.doWhilst = function (iterator, test, callback) {
+        iterator(function (err) {
+            if (err) {
+                return callback(err);
+            }
+            if (test()) {
+                async.doWhilst(iterator, test, callback);
+            }
+            else {
+                callback();
+            }
+        });
+    };
+
+    async.until = function (test, iterator, callback) {
+        if (!test()) {
+            iterator(function (err) {
+                if (err) {
+                    return callback(err);
+                }
+                async.until(test, iterator, callback);
+            });
+        }
+        else {
+            callback();
+        }
+    };
+
+    async.doUntil = function (iterator, test, callback) {
+        iterator(function (err) {
+            if (err) {
+                return callback(err);
+            }
+            if (!test()) {
+                async.doUntil(iterator, test, callback);
+            }
+            else {
+                callback();
+            }
+        });
+    };
+
+    async.queue = function (worker, concurrency) {
+        if (concurrency === undefined) {
+            concurrency = 1;
+        }
+        function _insert(q, data, pos, callback) {
+          if(data.constructor !== Array) {
+              data = [data];
+          }
+          _each(data, function(task) {
+              var item = {
+                  data: task,
+                  callback: typeof callback === 'function' ? callback : null
+              };
+
+              if (pos) {
+                q.tasks.unshift(item);
+              } else {
+                q.tasks.push(item);
+              }
+
+              if (q.saturated && q.tasks.length === concurrency) {
+                  q.saturated();
+              }
+              async.setImmediate(q.process);
+          });
+        }
+
+        var workers = 0;
+        var q = {
+            tasks: [],
+            concurrency: concurrency,
+            saturated: null,
+            empty: null,
+            drain: null,
+            push: function (data, callback) {
+              _insert(q, data, false, callback);
+            },
+            unshift: function (data, callback) {
+              _insert(q, data, true, callback);
+            },
+            process: function () {
+                if (workers < q.concurrency && q.tasks.length) {
+                    var task = q.tasks.shift();
+                    if (q.empty && q.tasks.length === 0) {
+                        q.empty();
+                    }
+                    workers += 1;
+                    var next = function () {
+                        workers -= 1;
+                        if (task.callback) {
+                            task.callback.apply(task, arguments);
+                        }
+                        if (q.drain && q.tasks.length + workers === 0) {
+                            q.drain();
+                        }
+                        q.process();
+                    };
+                    var cb = only_once(next);
+                    worker(task.data, cb);
+                }
+            },
+            length: function () {
+                return q.tasks.length;
+            },
+            running: function () {
+                return workers;
+            }
+        };
+        return q;
+    };
+
+    async.cargo = function (worker, payload) {
+        var working     = false,
+            tasks       = [];
+
+        var cargo = {
+            tasks: tasks,
+            payload: payload,
+            saturated: null,
+            empty: null,
+            drain: null,
+            push: function (data, callback) {
+                if(data.constructor !== Array) {
+                    data = [data];
+                }
+                _each(data, function(task) {
+                    tasks.push({
+                        data: task,
+                        callback: typeof callback === 'function' ? callback : null
+                    });
+                    if (cargo.saturated && tasks.length === payload) {
+                        cargo.saturated();
+                    }
+                });
+                async.setImmediate(cargo.process);
+            },
+            process: function process() {
+                if (working) return;
+                if (tasks.length === 0) {
+                    if(cargo.drain) cargo.drain();
+                    return;
+                }
+
+                var ts = typeof payload === 'number'
+                            ? tasks.splice(0, payload)
+                            : tasks.splice(0);
+
+                var ds = _map(ts, function (task) {
+                    return task.data;
+                });
+
+                if(cargo.empty) cargo.empty();
+                working = true;
+                worker(ds, function () {
+                    working = false;
+
+                    var args = arguments;
+                    _each(ts, function (data) {
+                        if (data.callback) {
+                            data.callback.apply(null, args);
+                        }
+                    });
+
+                    process();
+                });
+            },
+            length: function () {
+                return tasks.length;
+            },
+            running: function () {
+                return working;
+            }
+        };
+        return cargo;
+    };
+
+    var _console_fn = function (name) {
+        return function (fn) {
+            var args = Array.prototype.slice.call(arguments, 1);
+            fn.apply(null, args.concat([function (err) {
+                var args = Array.prototype.slice.call(arguments, 1);
+                if (typeof console !== 'undefined') {
+                    if (err) {
+                        if (console.error) {
+                            console.error(err);
+                        }
+                    }
+                    else if (console[name]) {
+                        _each(args, function (x) {
+                            console[name](x);
+                        });
+                    }
+                }
+            }]));
+        };
+    };
+    async.log = _console_fn('log');
+    async.dir = _console_fn('dir');
+    /*async.info = _console_fn('info');
+    async.warn = _console_fn('warn');
+    async.error = _console_fn('error');*/
+
+    async.memoize = function (fn, hasher) {
+        var memo = {};
+        var queues = {};
+        hasher = hasher || function (x) {
+            return x;
+        };
+        var memoized = function () {
+            var args = Array.prototype.slice.call(arguments);
+            var callback = args.pop();
+            var key = hasher.apply(null, args);
+            if (key in memo) {
+                callback.apply(null, memo[key]);
+            }
+            else if (key in queues) {
+                queues[key].push(callback);
+            }
+            else {
+                queues[key] = [callback];
+                fn.apply(null, args.concat([function () {
+                    memo[key] = arguments;
+                    var q = queues[key];
+                    delete queues[key];
+                    for (var i = 0, l = q.length; i < l; i++) {
+                      q[i].apply(null, arguments);
+                    }
+                }]));
+            }
+        };
+        memoized.memo = memo;
+        memoized.unmemoized = fn;
+        return memoized;
+    };
+
+    async.unmemoize = function (fn) {
+      return function () {
+        return (fn.unmemoized || fn).apply(null, arguments);
+      };
+    };
+
+    async.times = function (count, iterator, callback) {
+        var counter = [];
+        for (var i = 0; i < count; i++) {
+            counter.push(i);
+        }
+        return async.map(counter, iterator, callback);
+    };
+
+    async.timesSeries = function (count, iterator, callback) {
+        var counter = [];
+        for (var i = 0; i < count; i++) {
+            counter.push(i);
+        }
+        return async.mapSeries(counter, iterator, callback);
+    };
+
+    async.compose = function (/* functions... */) {
+        var fns = Array.prototype.reverse.call(arguments);
+        return function () {
+            var that = this;
+            var args = Array.prototype.slice.call(arguments);
+            var callback = args.pop();
+            async.reduce(fns, args, function (newargs, fn, cb) {
+                fn.apply(that, newargs.concat([function () {
+                    var err = arguments[0];
+                    var nextargs = Array.prototype.slice.call(arguments, 1);
+                    cb(err, nextargs);
+                }]))
+            },
+            function (err, results) {
+                callback.apply(that, [err].concat(results));
+            });
+        };
+    };
+
+    var _applyEach = function (eachfn, fns /*args...*/) {
+        var go = function () {
+            var that = this;
+            var args = Array.prototype.slice.call(arguments);
+            var callback = args.pop();
+            return eachfn(fns, function (fn, cb) {
+                fn.apply(that, args.concat([cb]));
+            },
+            callback);
+        };
+        if (arguments.length > 2) {
+            var args = Array.prototype.slice.call(arguments, 2);
+            return go.apply(this, args);
+        }
+        else {
+            return go;
+        }
+    };
+    async.applyEach = doParallel(_applyEach);
+    async.applyEachSeries = doSeries(_applyEach);
+
+    async.forever = function (fn, callback) {
+        function next(err) {
+            if (err) {
+                if (callback) {
+                    return callback(err);
+                }
+                throw err;
+            }
+            fn(next);
+        }
+        next();
+    };
+
+    // AMD / RequireJS
+    if (typeof define !== 'undefined' && define.amd) {
+        define([], function () {
+            return async;
+        });
+    }
+    // Node.js
+    else if (typeof module !== 'undefined' && module.exports) {
+        module.exports = async;
+    }
+    // included directly via <script> tag
+    else {
+        root.async = async;
+    }
+
+}());
\ No newline at end of file
diff --git a/web/ons-demo/js/d3.v3.js b/web/ons-demo/js/d3.v3.js
new file mode 100644
index 0000000..3726652
--- /dev/null
+++ b/web/ons-demo/js/d3.v3.js
@@ -0,0 +1,7801 @@
+d3 = function() {
+  var π = Math.PI, ε = 1e-6, d3 = {
+    version: "3.0.8"
+  }, d3_radians = π / 180, d3_degrees = 180 / π, d3_document = document, d3_window = window;
+  function d3_target(d) {
+    return d.target;
+  }
+  function d3_source(d) {
+    return d.source;
+  }
+  var d3_format_decimalPoint = ".", d3_format_thousandsSeparator = ",", d3_format_grouping = [ 3, 3 ];
+  if (!Date.now) Date.now = function() {
+    return +new Date();
+  };
+  try {
+    d3_document.createElement("div").style.setProperty("opacity", 0, "");
+  } catch (error) {
+    var d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
+    d3_style_prototype.setProperty = function(name, value, priority) {
+      d3_style_setProperty.call(this, name, value + "", priority);
+    };
+  }
+  function d3_class(ctor, properties) {
+    try {
+      for (var key in properties) {
+        Object.defineProperty(ctor.prototype, key, {
+          value: properties[key],
+          enumerable: false
+        });
+      }
+    } catch (e) {
+      ctor.prototype = properties;
+    }
+  }
+  var d3_array = d3_arraySlice;
+  function d3_arrayCopy(pseudoarray) {
+    var i = -1, n = pseudoarray.length, array = [];
+    while (++i < n) array.push(pseudoarray[i]);
+    return array;
+  }
+  function d3_arraySlice(pseudoarray) {
+    return Array.prototype.slice.call(pseudoarray);
+  }
+  try {
+    d3_array(d3_document.documentElement.childNodes)[0].nodeType;
+  } catch (e) {
+    d3_array = d3_arrayCopy;
+  }
+  var d3_arraySubclass = [].__proto__ ? function(array, prototype) {
+    array.__proto__ = prototype;
+  } : function(array, prototype) {
+    for (var property in prototype) array[property] = prototype[property];
+  };
+  d3.map = function(object) {
+    var map = new d3_Map();
+    for (var key in object) map.set(key, object[key]);
+    return map;
+  };
+  function d3_Map() {}
+  d3_class(d3_Map, {
+    has: function(key) {
+      return d3_map_prefix + key in this;
+    },
+    get: function(key) {
+      return this[d3_map_prefix + key];
+    },
+    set: function(key, value) {
+      return this[d3_map_prefix + key] = value;
+    },
+    remove: function(key) {
+      key = d3_map_prefix + key;
+      return key in this && delete this[key];
+    },
+    keys: function() {
+      var keys = [];
+      this.forEach(function(key) {
+        keys.push(key);
+      });
+      return keys;
+    },
+    values: function() {
+      var values = [];
+      this.forEach(function(key, value) {
+        values.push(value);
+      });
+      return values;
+    },
+    entries: function() {
+      var entries = [];
+      this.forEach(function(key, value) {
+        entries.push({
+          key: key,
+          value: value
+        });
+      });
+      return entries;
+    },
+    forEach: function(f) {
+      for (var key in this) {
+        if (key.charCodeAt(0) === d3_map_prefixCode) {
+          f.call(this, key.substring(1), this[key]);
+        }
+      }
+    }
+  });
+  var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
+  function d3_identity(d) {
+    return d;
+  }
+  function d3_true() {
+    return true;
+  }
+  function d3_functor(v) {
+    return typeof v === "function" ? v : function() {
+      return v;
+    };
+  }
+  d3.functor = d3_functor;
+  d3.rebind = function(target, source) {
+    var i = 1, n = arguments.length, method;
+    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
+    return target;
+  };
+  function d3_rebind(target, source, method) {
+    return function() {
+      var value = method.apply(source, arguments);
+      return value === source ? target : value;
+    };
+  }
+  d3.ascending = function(a, b) {
+    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+  };
+  d3.descending = function(a, b) {
+    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+  };
+  d3.mean = function(array, f) {
+    var n = array.length, a, m = 0, i = -1, j = 0;
+    if (arguments.length === 1) {
+      while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j;
+    } else {
+      while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
+    }
+    return j ? m : undefined;
+  };
+  d3.median = function(array, f) {
+    if (arguments.length > 1) array = array.map(f);
+    array = array.filter(d3_number);
+    return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
+  };
+  d3.min = function(array, f) {
+    var i = -1, n = array.length, a, b;
+    if (arguments.length === 1) {
+      while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+      while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+    } else {
+      while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+      while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
+    }
+    return a;
+  };
+  d3.max = function(array, f) {
+    var i = -1, n = array.length, a, b;
+    if (arguments.length === 1) {
+      while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+      while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+    } else {
+      while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
+    }
+    return a;
+  };
+  d3.extent = function(array, f) {
+    var i = -1, n = array.length, a, b, c;
+    if (arguments.length === 1) {
+      while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined;
+      while (++i < n) if ((b = array[i]) != null) {
+        if (a > b) a = b;
+        if (c < b) c = b;
+      }
+    } else {
+      while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+      while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
+        if (a > b) a = b;
+        if (c < b) c = b;
+      }
+    }
+    return [ a, c ];
+  };
+  d3.random = {
+    normal: function(µ, σ) {
+      var n = arguments.length;
+      if (n < 2) σ = 1;
+      if (n < 1) µ = 0;
+      return function() {
+        var x, y, r;
+        do {
+          x = Math.random() * 2 - 1;
+          y = Math.random() * 2 - 1;
+          r = x * x + y * y;
+        } while (!r || r > 1);
+        return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
+      };
+    },
+    logNormal: function() {
+      var random = d3.random.normal.apply(d3, arguments);
+      return function() {
+        return Math.exp(random());
+      };
+    },
+    irwinHall: function(m) {
+      return function() {
+        for (var s = 0, j = 0; j < m; j++) s += Math.random();
+        return s / m;
+      };
+    }
+  };
+  function d3_number(x) {
+    return x != null && !isNaN(x);
+  }
+  d3.sum = function(array, f) {
+    var s = 0, n = array.length, a, i = -1;
+    if (arguments.length === 1) {
+      while (++i < n) if (!isNaN(a = +array[i])) s += a;
+    } else {
+      while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
+    }
+    return s;
+  };
+  d3.quantile = function(values, p) {
+    var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
+    return e ? v + e * (values[h] - v) : v;
+  };
+  d3.shuffle = function(array) {
+    var m = array.length, t, i;
+    while (m) {
+      i = Math.random() * m-- | 0;
+      t = array[m], array[m] = array[i], array[i] = t;
+    }
+    return array;
+  };
+  d3.transpose = function(matrix) {
+    return d3.zip.apply(d3, matrix);
+  };
+  d3.zip = function() {
+    if (!(n = arguments.length)) return [];
+    for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {
+      for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {
+        zip[j] = arguments[j][i];
+      }
+    }
+    return zips;
+  };
+  function d3_zipLength(d) {
+    return d.length;
+  }
+  d3.bisector = function(f) {
+    return {
+      left: function(a, x, lo, hi) {
+        if (arguments.length < 3) lo = 0;
+        if (arguments.length < 4) hi = a.length;
+        while (lo < hi) {
+          var mid = lo + hi >>> 1;
+          if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid;
+        }
+        return lo;
+      },
+      right: function(a, x, lo, hi) {
+        if (arguments.length < 3) lo = 0;
+        if (arguments.length < 4) hi = a.length;
+        while (lo < hi) {
+          var mid = lo + hi >>> 1;
+          if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1;
+        }
+        return lo;
+      }
+    };
+  };
+  var d3_bisector = d3.bisector(function(d) {
+    return d;
+  });
+  d3.bisectLeft = d3_bisector.left;
+  d3.bisect = d3.bisectRight = d3_bisector.right;
+  d3.nest = function() {
+    var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
+    function map(array, depth) {
+      if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;
+      var i = -1, n = array.length, key = keys[depth++], keyValue, object, valuesByKey = new d3_Map(), values, o = {};
+      while (++i < n) {
+        if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
+          values.push(object);
+        } else {
+          valuesByKey.set(keyValue, [ object ]);
+        }
+      }
+      valuesByKey.forEach(function(keyValue, values) {
+        o[keyValue] = map(values, depth);
+      });
+      return o;
+    }
+    function entries(map, depth) {
+      if (depth >= keys.length) return map;
+      var a = [], sortKey = sortKeys[depth++], key;
+      for (key in map) {
+        a.push({
+          key: key,
+          values: entries(map[key], depth)
+        });
+      }
+      if (sortKey) a.sort(function(a, b) {
+        return sortKey(a.key, b.key);
+      });
+      return a;
+    }
+    nest.map = function(array) {
+      return map(array, 0);
+    };
+    nest.entries = function(array) {
+      return entries(map(array, 0), 0);
+    };
+    nest.key = function(d) {
+      keys.push(d);
+      return nest;
+    };
+    nest.sortKeys = function(order) {
+      sortKeys[keys.length - 1] = order;
+      return nest;
+    };
+    nest.sortValues = function(order) {
+      sortValues = order;
+      return nest;
+    };
+    nest.rollup = function(f) {
+      rollup = f;
+      return nest;
+    };
+    return nest;
+  };
+  d3.keys = function(map) {
+    var keys = [];
+    for (var key in map) keys.push(key);
+    return keys;
+  };
+  d3.values = function(map) {
+    var values = [];
+    for (var key in map) values.push(map[key]);
+    return values;
+  };
+  d3.entries = function(map) {
+    var entries = [];
+    for (var key in map) entries.push({
+      key: key,
+      value: map[key]
+    });
+    return entries;
+  };
+  d3.permute = function(array, indexes) {
+    var permutes = [], i = -1, n = indexes.length;
+    while (++i < n) permutes[i] = array[indexes[i]];
+    return permutes;
+  };
+  d3.merge = function(arrays) {
+    return Array.prototype.concat.apply([], arrays);
+  };
+  function d3_collapse(s) {
+    return s.trim().replace(/\s+/g, " ");
+  }
+  d3.range = function(start, stop, step) {
+    if (arguments.length < 3) {
+      step = 1;
+      if (arguments.length < 2) {
+        stop = start;
+        start = 0;
+      }
+    }
+    if ((stop - start) / step === Infinity) throw new Error("infinite range");
+    var range = [], k = d3_range_integerScale(Math.abs(step)), i = -1, j;
+    start *= k, stop *= k, step *= k;
+    if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);
+    return range;
+  };
+  function d3_range_integerScale(x) {
+    var k = 1;
+    while (x * k % 1) k *= 10;
+    return k;
+  }
+  d3.requote = function(s) {
+    return s.replace(d3_requote_re, "\\$&");
+  };
+  var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+  d3.round = function(x, n) {
+    return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
+  };
+  d3.xhr = function(url, mimeType, callback) {
+    var xhr = {}, dispatch = d3.dispatch("progress", "load", "error"), headers = {}, response = d3_identity, request = new (d3_window.XDomainRequest && /^(http(s)?:)?\/\//.test(url) ? XDomainRequest : XMLHttpRequest)();
+    "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
+      request.readyState > 3 && respond();
+    };
+    function respond() {
+      var s = request.status;
+      !s && request.responseText || s >= 200 && s < 300 || s === 304 ? dispatch.load.call(xhr, response.call(xhr, request)) : dispatch.error.call(xhr, request);
+    }
+    request.onprogress = function(event) {
+      var o = d3.event;
+      d3.event = event;
+      try {
+        dispatch.progress.call(xhr, request);
+      } finally {
+        d3.event = o;
+      }
+    };
+    xhr.header = function(name, value) {
+      name = (name + "").toLowerCase();
+      if (arguments.length < 2) return headers[name];
+      if (value == null) delete headers[name]; else headers[name] = value + "";
+      return xhr;
+    };
+    xhr.mimeType = function(value) {
+      if (!arguments.length) return mimeType;
+      mimeType = value == null ? null : value + "";
+      return xhr;
+    };
+    xhr.response = function(value) {
+      response = value;
+      return xhr;
+    };
+    [ "get", "post" ].forEach(function(method) {
+      xhr[method] = function() {
+        return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));
+      };
+    });
+    xhr.send = function(method, data, callback) {
+      if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
+      request.open(method, url, true);
+      if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
+      if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
+      if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
+      if (callback != null) xhr.on("error", callback).on("load", function(request) {
+        callback(null, request);
+      });
+      request.send(data == null ? null : data);
+      return xhr;
+    };
+    xhr.abort = function() {
+      request.abort();
+      return xhr;
+    };
+    d3.rebind(xhr, dispatch, "on");
+    if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType,
+    mimeType = null;
+    return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));
+  };
+  function d3_xhr_fixCallback(callback) {
+    return callback.length === 1 ? function(error, request) {
+      callback(error == null ? request : null);
+    } : callback;
+  }
+  d3.text = function() {
+    return d3.xhr.apply(d3, arguments).response(d3_text);
+  };
+  function d3_text(request) {
+    return request.responseText;
+  }
+  d3.json = function(url, callback) {
+    return d3.xhr(url, "application/json", callback).response(d3_json);
+  };
+  function d3_json(request) {
+    return JSON.parse(request.responseText);
+  }
+  d3.html = function(url, callback) {
+    return d3.xhr(url, "text/html", callback).response(d3_html);
+  };
+  function d3_html(request) {
+    var range = d3_document.createRange();
+    range.selectNode(d3_document.body);
+    return range.createContextualFragment(request.responseText);
+  }
+  d3.xml = function() {
+    return d3.xhr.apply(d3, arguments).response(d3_xml);
+  };
+  function d3_xml(request) {
+    return request.responseXML;
+  }
+  var d3_nsPrefix = {
+    svg: "http://www.w3.org/2000/svg",
+    xhtml: "http://www.w3.org/1999/xhtml",
+    xlink: "http://www.w3.org/1999/xlink",
+    xml: "http://www.w3.org/XML/1998/namespace",
+    xmlns: "http://www.w3.org/2000/xmlns/"
+  };
+  d3.ns = {
+    prefix: d3_nsPrefix,
+    qualify: function(name) {
+      var i = name.indexOf(":"), prefix = name;
+      if (i >= 0) {
+        prefix = name.substring(0, i);
+        name = name.substring(i + 1);
+      }
+      return d3_nsPrefix.hasOwnProperty(prefix) ? {
+        space: d3_nsPrefix[prefix],
+        local: name
+      } : name;
+    }
+  };
+  d3.dispatch = function() {
+    var dispatch = new d3_dispatch(), i = -1, n = arguments.length;
+    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
+    return dispatch;
+  };
+  function d3_dispatch() {}
+  d3_dispatch.prototype.on = function(type, listener) {
+    var i = type.indexOf("."), name = "";
+    if (i > 0) {
+      name = type.substring(i + 1);
+      type = type.substring(0, i);
+    }
+    return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
+  };
+  function d3_dispatch_event(dispatch) {
+    var listeners = [], listenerByName = new d3_Map();
+    function event() {
+      var z = listeners, i = -1, n = z.length, l;
+      while (++i < n) if (l = z[i].on) l.apply(this, arguments);
+      return dispatch;
+    }
+    event.on = function(name, listener) {
+      var l = listenerByName.get(name), i;
+      if (arguments.length < 2) return l && l.on;
+      if (l) {
+        l.on = null;
+        listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
+        listenerByName.remove(name);
+      }
+      if (listener) listeners.push(listenerByName.set(name, {
+        on: listener
+      }));
+      return dispatch;
+    };
+    return event;
+  }
+  d3.format = function(specifier) {
+    var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", basePrefix = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, suffix = "", integer = false;
+    if (precision) precision = +precision.substring(1);
+    if (zfill || fill === "0" && align === "=") {
+      zfill = fill = "0";
+      align = "=";
+      if (comma) width -= Math.floor((width - 1) / 4);
+    }
+    switch (type) {
+     case "n":
+      comma = true;
+      type = "g";
+      break;
+
+     case "%":
+      scale = 100;
+      suffix = "%";
+      type = "f";
+      break;
+
+     case "p":
+      scale = 100;
+      suffix = "%";
+      type = "r";
+      break;
+
+     case "b":
+     case "o":
+     case "x":
+     case "X":
+      if (basePrefix) basePrefix = "0" + type.toLowerCase();
+
+     case "c":
+     case "d":
+      integer = true;
+      precision = 0;
+      break;
+
+     case "s":
+      scale = -1;
+      type = "r";
+      break;
+    }
+    if (basePrefix === "#") basePrefix = "";
+    if (type == "r" && !precision) type = "g";
+    type = d3_format_types.get(type) || d3_format_typeDefault;
+    var zcomma = zfill && comma;
+    return function(value) {
+      if (integer && value % 1) return "";
+      var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign;
+      if (scale < 0) {
+        var prefix = d3.formatPrefix(value, precision);
+        value = prefix.scale(value);
+        suffix = prefix.symbol;
+      } else {
+        value *= scale;
+      }
+      value = type(value, precision);
+      if (!zfill && comma) value = d3_format_group(value);
+      var length = basePrefix.length + value.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
+      if (zcomma) value = d3_format_group(padding + value);
+      if (d3_format_decimalPoint) value.replace(".", d3_format_decimalPoint);
+      negative += basePrefix;
+      return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + suffix;
+    };
+  };
+  var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
+  var d3_format_types = d3.map({
+    b: function(x) {
+      return x.toString(2);
+    },
+    c: function(x) {
+      return String.fromCharCode(x);
+    },
+    o: function(x) {
+      return x.toString(8);
+    },
+    x: function(x) {
+      return x.toString(16);
+    },
+    X: function(x) {
+      return x.toString(16).toUpperCase();
+    },
+    g: function(x, p) {
+      return x.toPrecision(p);
+    },
+    e: function(x, p) {
+      return x.toExponential(p);
+    },
+    f: function(x, p) {
+      return x.toFixed(p);
+    },
+    r: function(x, p) {
+      return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));
+    }
+  });
+  function d3_format_precision(x, p) {
+    return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);
+  }
+  function d3_format_typeDefault(x) {
+    return x + "";
+  }
+  var d3_format_group = d3_identity;
+  if (d3_format_grouping) {
+    var d3_format_groupingLength = d3_format_grouping.length;
+    d3_format_group = function(value) {
+      var i = value.lastIndexOf("."), f = i >= 0 ? "." + value.substring(i + 1) : (i = value.length,
+      ""), t = [], j = 0, g = d3_format_grouping[0];
+      while (i > 0 && g > 0) {
+        t.push(value.substring(i -= g, i + g));
+        g = d3_format_grouping[j = (j + 1) % d3_format_groupingLength];
+      }
+      return t.reverse().join(d3_format_thousandsSeparator || "") + f;
+    };
+  }
+  var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix);
+  d3.formatPrefix = function(value, precision) {
+    var i = 0;
+    if (value) {
+      if (value < 0) value *= -1;
+      if (precision) value = d3.round(value, d3_format_precision(value, precision));
+      i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
+      i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3));
+    }
+    return d3_formatPrefixes[8 + i / 3];
+  };
+  function d3_formatPrefix(d, i) {
+    var k = Math.pow(10, Math.abs(8 - i) * 3);
+    return {
+      scale: i > 8 ? function(d) {
+        return d / k;
+      } : function(d) {
+        return d * k;
+      },
+      symbol: d
+    };
+  }
+  var d3_ease_default = function() {
+    return d3_identity;
+  };
+  var d3_ease = d3.map({
+    linear: d3_ease_default,
+    poly: d3_ease_poly,
+    quad: function() {
+      return d3_ease_quad;
+    },
+    cubic: function() {
+      return d3_ease_cubic;
+    },
+    sin: function() {
+      return d3_ease_sin;
+    },
+    exp: function() {
+      return d3_ease_exp;
+    },
+    circle: function() {
+      return d3_ease_circle;
+    },
+    elastic: d3_ease_elastic,
+    back: d3_ease_back,
+    bounce: function() {
+      return d3_ease_bounce;
+    }
+  });
+  var d3_ease_mode = d3.map({
+    "in": d3_identity,
+    out: d3_ease_reverse,
+    "in-out": d3_ease_reflect,
+    "out-in": function(f) {
+      return d3_ease_reflect(d3_ease_reverse(f));
+    }
+  });
+  d3.ease = function(name) {
+    var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in";
+    t = d3_ease.get(t) || d3_ease_default;
+    m = d3_ease_mode.get(m) || d3_identity;
+    return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1))));
+  };
+  function d3_ease_clamp(f) {
+    return function(t) {
+      return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
+    };
+  }
+  function d3_ease_reverse(f) {
+    return function(t) {
+      return 1 - f(1 - t);
+    };
+  }
+  function d3_ease_reflect(f) {
+    return function(t) {
+      return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
+    };
+  }
+  function d3_ease_quad(t) {
+    return t * t;
+  }
+  function d3_ease_cubic(t) {
+    return t * t * t;
+  }
+  function d3_ease_cubicInOut(t) {
+    if (t <= 0) return 0;
+    if (t >= 1) return 1;
+    var t2 = t * t, t3 = t2 * t;
+    return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
+  }
+  function d3_ease_poly(e) {
+    return function(t) {
+      return Math.pow(t, e);
+    };
+  }
+  function d3_ease_sin(t) {
+    return 1 - Math.cos(t * π / 2);
+  }
+  function d3_ease_exp(t) {
+    return Math.pow(2, 10 * (t - 1));
+  }
+  function d3_ease_circle(t) {
+    return 1 - Math.sqrt(1 - t * t);
+  }
+  function d3_ease_elastic(a, p) {
+    var s;
+    if (arguments.length < 2) p = .45;
+    if (arguments.length) s = p / (2 * π) * Math.asin(1 / a); else a = 1, s = p / 4;
+    return function(t) {
+      return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * π / p);
+    };
+  }
+  function d3_ease_back(s) {
+    if (!s) s = 1.70158;
+    return function(t) {
+      return t * t * ((s + 1) * t - s);
+    };
+  }
+  function d3_ease_bounce(t) {
+    return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
+  }
+  d3.event = null;
+  function d3_eventCancel() {
+    d3.event.stopPropagation();
+    d3.event.preventDefault();
+  }
+  function d3_eventSource() {
+    var e = d3.event, s;
+    while (s = e.sourceEvent) e = s;
+    return e;
+  }
+  function d3_eventDispatch(target) {
+    var dispatch = new d3_dispatch(), i = 0, n = arguments.length;
+    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
+    dispatch.of = function(thiz, argumentz) {
+      return function(e1) {
+        try {
+          var e0 = e1.sourceEvent = d3.event;
+          e1.target = target;
+          d3.event = e1;
+          dispatch[e1.type].apply(thiz, argumentz);
+        } finally {
+          d3.event = e0;
+        }
+      };
+    };
+    return dispatch;
+  }
+  d3.transform = function(string) {
+    var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
+    return (d3.transform = function(string) {
+      g.setAttribute("transform", string);
+      var t = g.transform.baseVal.consolidate();
+      return new d3_transform(t ? t.matrix : d3_transformIdentity);
+    })(string);
+  };
+  function d3_transform(m) {
+    var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
+    if (r0[0] * r1[1] < r1[0] * r0[1]) {
+      r0[0] *= -1;
+      r0[1] *= -1;
+      kx *= -1;
+      kz *= -1;
+    }
+    this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;
+    this.translate = [ m.e, m.f ];
+    this.scale = [ kx, ky ];
+    this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;
+  }
+  d3_transform.prototype.toString = function() {
+    return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")";
+  };
+  function d3_transformDot(a, b) {
+    return a[0] * b[0] + a[1] * b[1];
+  }
+  function d3_transformNormalize(a) {
+    var k = Math.sqrt(d3_transformDot(a, a));
+    if (k) {
+      a[0] /= k;
+      a[1] /= k;
+    }
+    return k;
+  }
+  function d3_transformCombine(a, b, k) {
+    a[0] += k * b[0];
+    a[1] += k * b[1];
+    return a;
+  }
+  var d3_transformIdentity = {
+    a: 1,
+    b: 0,
+    c: 0,
+    d: 1,
+    e: 0,
+    f: 0
+  };
+  d3.interpolate = function(a, b) {
+    var i = d3.interpolators.length, f;
+    while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;
+    return f;
+  };
+  d3.interpolateNumber = function(a, b) {
+    b -= a;
+    return function(t) {
+      return a + b * t;
+    };
+  };
+  d3.interpolateRound = function(a, b) {
+    b -= a;
+    return function(t) {
+      return Math.round(a + b * t);
+    };
+  };
+  d3.interpolateString = function(a, b) {
+    var m, i, j, s0 = 0, s1 = 0, s = [], q = [], n, o;
+    d3_interpolate_number.lastIndex = 0;
+    for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
+      if (m.index) s.push(b.substring(s0, s1 = m.index));
+      q.push({
+        i: s.length,
+        x: m[0]
+      });
+      s.push(null);
+      s0 = d3_interpolate_number.lastIndex;
+    }
+    if (s0 < b.length) s.push(b.substring(s0));
+    for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
+      o = q[i];
+      if (o.x == m[0]) {
+        if (o.i) {
+          if (s[o.i + 1] == null) {
+            s[o.i - 1] += o.x;
+            s.splice(o.i, 1);
+            for (j = i + 1; j < n; ++j) q[j].i--;
+          } else {
+            s[o.i - 1] += o.x + s[o.i + 1];
+            s.splice(o.i, 2);
+            for (j = i + 1; j < n; ++j) q[j].i -= 2;
+          }
+        } else {
+          if (s[o.i + 1] == null) {
+            s[o.i] = o.x;
+          } else {
+            s[o.i] = o.x + s[o.i + 1];
+            s.splice(o.i + 1, 1);
+            for (j = i + 1; j < n; ++j) q[j].i--;
+          }
+        }
+        q.splice(i, 1);
+        n--;
+        i--;
+      } else {
+        o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
+      }
+    }
+    while (i < n) {
+      o = q.pop();
+      if (s[o.i + 1] == null) {
+        s[o.i] = o.x;
+      } else {
+        s[o.i] = o.x + s[o.i + 1];
+        s.splice(o.i + 1, 1);
+      }
+      n--;
+    }
+    if (s.length === 1) {
+      return s[0] == null ? q[0].x : function() {
+        return b;
+      };
+    }
+    return function(t) {
+      for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
+      return s.join("");
+    };
+  };
+  d3.interpolateTransform = function(a, b) {
+    var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;
+    if (ta[0] != tb[0] || ta[1] != tb[1]) {
+      s.push("translate(", null, ",", null, ")");
+      q.push({
+        i: 1,
+        x: d3.interpolateNumber(ta[0], tb[0])
+      }, {
+        i: 3,
+        x: d3.interpolateNumber(ta[1], tb[1])
+      });
+    } else if (tb[0] || tb[1]) {
+      s.push("translate(" + tb + ")");
+    } else {
+      s.push("");
+    }
+    if (ra != rb) {
+      if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
+      q.push({
+        i: s.push(s.pop() + "rotate(", null, ")") - 2,
+        x: d3.interpolateNumber(ra, rb)
+      });
+    } else if (rb) {
+      s.push(s.pop() + "rotate(" + rb + ")");
+    }
+    if (wa != wb) {
+      q.push({
+        i: s.push(s.pop() + "skewX(", null, ")") - 2,
+        x: d3.interpolateNumber(wa, wb)
+      });
+    } else if (wb) {
+      s.push(s.pop() + "skewX(" + wb + ")");
+    }
+    if (ka[0] != kb[0] || ka[1] != kb[1]) {
+      n = s.push(s.pop() + "scale(", null, ",", null, ")");
+      q.push({
+        i: n - 4,
+        x: d3.interpolateNumber(ka[0], kb[0])
+      }, {
+        i: n - 2,
+        x: d3.interpolateNumber(ka[1], kb[1])
+      });
+    } else if (kb[0] != 1 || kb[1] != 1) {
+      s.push(s.pop() + "scale(" + kb + ")");
+    }
+    n = q.length;
+    return function(t) {
+      var i = -1, o;
+      while (++i < n) s[(o = q[i]).i] = o.x(t);
+      return s.join("");
+    };
+  };
+  d3.interpolateRgb = function(a, b) {
+    a = d3.rgb(a);
+    b = d3.rgb(b);
+    var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
+    return function(t) {
+      return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
+    };
+  };
+  d3.interpolateHsl = function(a, b) {
+    a = d3.hsl(a);
+    b = d3.hsl(b);
+    var h0 = a.h, s0 = a.s, l0 = a.l, h1 = b.h - h0, s1 = b.s - s0, l1 = b.l - l0;
+    if (h1 > 180) h1 -= 360; else if (h1 < -180) h1 += 360;
+    return function(t) {
+      return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t) + "";
+    };
+  };
+  d3.interpolateLab = function(a, b) {
+    a = d3.lab(a);
+    b = d3.lab(b);
+    var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
+    return function(t) {
+      return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
+    };
+  };
+  d3.interpolateHcl = function(a, b) {
+    a = d3.hcl(a);
+    b = d3.hcl(b);
+    var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
+    if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
+    return function(t) {
+      return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
+    };
+  };
+  d3.interpolateArray = function(a, b) {
+    var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;
+    for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
+    for (;i < na; ++i) c[i] = a[i];
+    for (;i < nb; ++i) c[i] = b[i];
+    return function(t) {
+      for (i = 0; i < n0; ++i) c[i] = x[i](t);
+      return c;
+    };
+  };
+  d3.interpolateObject = function(a, b) {
+    var i = {}, c = {}, k;
+    for (k in a) {
+      if (k in b) {
+        i[k] = d3_interpolateByName(k)(a[k], b[k]);
+      } else {
+        c[k] = a[k];
+      }
+    }
+    for (k in b) {
+      if (!(k in a)) {
+        c[k] = b[k];
+      }
+    }
+    return function(t) {
+      for (k in i) c[k] = i[k](t);
+      return c;
+    };
+  };
+  var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
+  function d3_interpolateByName(name) {
+    return name == "transform" ? d3.interpolateTransform : d3.interpolate;
+  }
+  d3.interpolators = [ d3.interpolateObject, function(a, b) {
+    return b instanceof Array && d3.interpolateArray(a, b);
+  }, function(a, b) {
+    return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + "");
+  }, function(a, b) {
+    return (typeof b === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Color) && d3.interpolateRgb(a, b);
+  }, function(a, b) {
+    return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b);
+  } ];
+  function d3_uninterpolateNumber(a, b) {
+    b = b - (a = +a) ? 1 / (b - a) : 0;
+    return function(x) {
+      return (x - a) * b;
+    };
+  }
+  function d3_uninterpolateClamp(a, b) {
+    b = b - (a = +a) ? 1 / (b - a) : 0;
+    return function(x) {
+      return Math.max(0, Math.min(1, (x - a) * b));
+    };
+  }
+  function d3_Color() {}
+  d3_Color.prototype.toString = function() {
+    return this.rgb() + "";
+  };
+  d3.rgb = function(r, g, b) {
+    return arguments.length === 1 ? r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : d3_rgb(~~r, ~~g, ~~b);
+  };
+  function d3_rgb(r, g, b) {
+    return new d3_Rgb(r, g, b);
+  }
+  function d3_Rgb(r, g, b) {
+    this.r = r;
+    this.g = g;
+    this.b = b;
+  }
+  var d3_rgbPrototype = d3_Rgb.prototype = new d3_Color();
+  d3_rgbPrototype.brighter = function(k) {
+    k = Math.pow(.7, arguments.length ? k : 1);
+    var r = this.r, g = this.g, b = this.b, i = 30;
+    if (!r && !g && !b) return d3_rgb(i, i, i);
+    if (r && r < i) r = i;
+    if (g && g < i) g = i;
+    if (b && b < i) b = i;
+    return d3_rgb(Math.min(255, Math.floor(r / k)), Math.min(255, Math.floor(g / k)), Math.min(255, Math.floor(b / k)));
+  };
+  d3_rgbPrototype.darker = function(k) {
+    k = Math.pow(.7, arguments.length ? k : 1);
+    return d3_rgb(Math.floor(k * this.r), Math.floor(k * this.g), Math.floor(k * this.b));
+  };
+  d3_rgbPrototype.hsl = function() {
+    return d3_rgb_hsl(this.r, this.g, this.b);
+  };
+  d3_rgbPrototype.toString = function() {
+    return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
+  };
+  function d3_rgb_hex(v) {
+    return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
+  }
+  function d3_rgb_parse(format, rgb, hsl) {
+    var r = 0, g = 0, b = 0, m1, m2, name;
+    m1 = /([a-z]+)\((.*)\)/i.exec(format);
+    if (m1) {
+      m2 = m1[2].split(",");
+      switch (m1[1]) {
+       case "hsl":
+        {
+          return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
+        }
+
+       case "rgb":
+        {
+          return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
+        }
+      }
+    }
+    if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b);
+    if (format != null && format.charAt(0) === "#") {
+      if (format.length === 4) {
+        r = format.charAt(1);
+        r += r;
+        g = format.charAt(2);
+        g += g;
+        b = format.charAt(3);
+        b += b;
+      } else if (format.length === 7) {
+        r = format.substring(1, 3);
+        g = format.substring(3, 5);
+        b = format.substring(5, 7);
+      }
+      r = parseInt(r, 16);
+      g = parseInt(g, 16);
+      b = parseInt(b, 16);
+    }
+    return rgb(r, g, b);
+  }
+  function d3_rgb_hsl(r, g, b) {
+    var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
+    if (d) {
+      s = l < .5 ? d / (max + min) : d / (2 - max - min);
+      if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
+      h *= 60;
+    } else {
+      s = h = 0;
+    }
+    return d3_hsl(h, s, l);
+  }
+  function d3_rgb_lab(r, g, b) {
+    r = d3_rgb_xyz(r);
+    g = d3_rgb_xyz(g);
+    b = d3_rgb_xyz(b);
+    var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
+    return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
+  }
+  function d3_rgb_xyz(r) {
+    return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
+  }
+  function d3_rgb_parseNumber(c) {
+    var f = parseFloat(c);
+    return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
+  }
+  var d3_rgb_names = d3.map({
+    aliceblue: "#f0f8ff",
+    antiquewhite: "#faebd7",
+    aqua: "#00ffff",
+    aquamarine: "#7fffd4",
+    azure: "#f0ffff",
+    beige: "#f5f5dc",
+    bisque: "#ffe4c4",
+    black: "#000000",
+    blanchedalmond: "#ffebcd",
+    blue: "#0000ff",
+    blueviolet: "#8a2be2",
+    brown: "#a52a2a",
+    burlywood: "#deb887",
+    cadetblue: "#5f9ea0",
+    chartreuse: "#7fff00",
+    chocolate: "#d2691e",
+    coral: "#ff7f50",
+    cornflowerblue: "#6495ed",
+    cornsilk: "#fff8dc",
+    crimson: "#dc143c",
+    cyan: "#00ffff",
+    darkblue: "#00008b",
+    darkcyan: "#008b8b",
+    darkgoldenrod: "#b8860b",
+    darkgray: "#a9a9a9",
+    darkgreen: "#006400",
+    darkgrey: "#a9a9a9",
+    darkkhaki: "#bdb76b",
+    darkmagenta: "#8b008b",
+    darkolivegreen: "#556b2f",
+    darkorange: "#ff8c00",
+    darkorchid: "#9932cc",
+    darkred: "#8b0000",
+    darksalmon: "#e9967a",
+    darkseagreen: "#8fbc8f",
+    darkslateblue: "#483d8b",
+    darkslategray: "#2f4f4f",
+    darkslategrey: "#2f4f4f",
+    darkturquoise: "#00ced1",
+    darkviolet: "#9400d3",
+    deeppink: "#ff1493",
+    deepskyblue: "#00bfff",
+    dimgray: "#696969",
+    dimgrey: "#696969",
+    dodgerblue: "#1e90ff",
+    firebrick: "#b22222",
+    floralwhite: "#fffaf0",
+    forestgreen: "#228b22",
+    fuchsia: "#ff00ff",
+    gainsboro: "#dcdcdc",
+    ghostwhite: "#f8f8ff",
+    gold: "#ffd700",
+    goldenrod: "#daa520",
+    gray: "#808080",
+    green: "#008000",
+    greenyellow: "#adff2f",
+    grey: "#808080",
+    honeydew: "#f0fff0",
+    hotpink: "#ff69b4",
+    indianred: "#cd5c5c",
+    indigo: "#4b0082",
+    ivory: "#fffff0",
+    khaki: "#f0e68c",
+    lavender: "#e6e6fa",
+    lavenderblush: "#fff0f5",
+    lawngreen: "#7cfc00",
+    lemonchiffon: "#fffacd",
+    lightblue: "#add8e6",
+    lightcoral: "#f08080",
+    lightcyan: "#e0ffff",
+    lightgoldenrodyellow: "#fafad2",
+    lightgray: "#d3d3d3",
+    lightgreen: "#90ee90",
+    lightgrey: "#d3d3d3",
+    lightpink: "#ffb6c1",
+    lightsalmon: "#ffa07a",
+    lightseagreen: "#20b2aa",
+    lightskyblue: "#87cefa",
+    lightslategray: "#778899",
+    lightslategrey: "#778899",
+    lightsteelblue: "#b0c4de",
+    lightyellow: "#ffffe0",
+    lime: "#00ff00",
+    limegreen: "#32cd32",
+    linen: "#faf0e6",
+    magenta: "#ff00ff",
+    maroon: "#800000",
+    mediumaquamarine: "#66cdaa",
+    mediumblue: "#0000cd",
+    mediumorchid: "#ba55d3",
+    mediumpurple: "#9370db",
+    mediumseagreen: "#3cb371",
+    mediumslateblue: "#7b68ee",
+    mediumspringgreen: "#00fa9a",
+    mediumturquoise: "#48d1cc",
+    mediumvioletred: "#c71585",
+    midnightblue: "#191970",
+    mintcream: "#f5fffa",
+    mistyrose: "#ffe4e1",
+    moccasin: "#ffe4b5",
+    navajowhite: "#ffdead",
+    navy: "#000080",
+    oldlace: "#fdf5e6",
+    olive: "#808000",
+    olivedrab: "#6b8e23",
+    orange: "#ffa500",
+    orangered: "#ff4500",
+    orchid: "#da70d6",
+    palegoldenrod: "#eee8aa",
+    palegreen: "#98fb98",
+    paleturquoise: "#afeeee",
+    palevioletred: "#db7093",
+    papayawhip: "#ffefd5",
+    peachpuff: "#ffdab9",
+    peru: "#cd853f",
+    pink: "#ffc0cb",
+    plum: "#dda0dd",
+    powderblue: "#b0e0e6",
+    purple: "#800080",
+    red: "#ff0000",
+    rosybrown: "#bc8f8f",
+    royalblue: "#4169e1",
+    saddlebrown: "#8b4513",
+    salmon: "#fa8072",
+    sandybrown: "#f4a460",
+    seagreen: "#2e8b57",
+    seashell: "#fff5ee",
+    sienna: "#a0522d",
+    silver: "#c0c0c0",
+    skyblue: "#87ceeb",
+    slateblue: "#6a5acd",
+    slategray: "#708090",
+    slategrey: "#708090",
+    snow: "#fffafa",
+    springgreen: "#00ff7f",
+    steelblue: "#4682b4",
+    tan: "#d2b48c",
+    teal: "#008080",
+    thistle: "#d8bfd8",
+    tomato: "#ff6347",
+    turquoise: "#40e0d0",
+    violet: "#ee82ee",
+    wheat: "#f5deb3",
+    white: "#ffffff",
+    whitesmoke: "#f5f5f5",
+    yellow: "#ffff00",
+    yellowgreen: "#9acd32"
+  });
+  d3_rgb_names.forEach(function(key, value) {
+    d3_rgb_names.set(key, d3_rgb_parse(value, d3_rgb, d3_hsl_rgb));
+  });
+  d3.hsl = function(h, s, l) {
+    return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l);
+  };
+  function d3_hsl(h, s, l) {
+    return new d3_Hsl(h, s, l);
+  }
+  function d3_Hsl(h, s, l) {
+    this.h = h;
+    this.s = s;
+    this.l = l;
+  }
+  var d3_hslPrototype = d3_Hsl.prototype = new d3_Color();
+  d3_hslPrototype.brighter = function(k) {
+    k = Math.pow(.7, arguments.length ? k : 1);
+    return d3_hsl(this.h, this.s, this.l / k);
+  };
+  d3_hslPrototype.darker = function(k) {
+    k = Math.pow(.7, arguments.length ? k : 1);
+    return d3_hsl(this.h, this.s, k * this.l);
+  };
+  d3_hslPrototype.rgb = function() {
+    return d3_hsl_rgb(this.h, this.s, this.l);
+  };
+  function d3_hsl_rgb(h, s, l) {
+    var m1, m2;
+    h = h % 360;
+    if (h < 0) h += 360;
+    s = s < 0 ? 0 : s > 1 ? 1 : s;
+    l = l < 0 ? 0 : l > 1 ? 1 : l;
+    m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
+    m1 = 2 * l - m2;
+    function v(h) {
+      if (h > 360) h -= 360; else if (h < 0) h += 360;
+      if (h < 60) return m1 + (m2 - m1) * h / 60;
+      if (h < 180) return m2;
+      if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
+      return m1;
+    }
+    function vv(h) {
+      return Math.round(v(h) * 255);
+    }
+    return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
+  }
+  d3.hcl = function(h, c, l) {
+    return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l);
+  };
+  function d3_hcl(h, c, l) {
+    return new d3_Hcl(h, c, l);
+  }
+  function d3_Hcl(h, c, l) {
+    this.h = h;
+    this.c = c;
+    this.l = l;
+  }
+  var d3_hclPrototype = d3_Hcl.prototype = new d3_Color();
+  d3_hclPrototype.brighter = function(k) {
+    return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
+  };
+  d3_hclPrototype.darker = function(k) {
+    return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
+  };
+  d3_hclPrototype.rgb = function() {
+    return d3_hcl_lab(this.h, this.c, this.l).rgb();
+  };
+  function d3_hcl_lab(h, c, l) {
+    return d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
+  }
+  d3.lab = function(l, a, b) {
+    return arguments.length === 1 ? l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) : l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b) : d3_lab(+l, +a, +b);
+  };
+  function d3_lab(l, a, b) {
+    return new d3_Lab(l, a, b);
+  }
+  function d3_Lab(l, a, b) {
+    this.l = l;
+    this.a = a;
+    this.b = b;
+  }
+  var d3_lab_K = 18;
+  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
+  var d3_labPrototype = d3_Lab.prototype = new d3_Color();
+  d3_labPrototype.brighter = function(k) {
+    return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
+  };
+  d3_labPrototype.darker = function(k) {
+    return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
+  };
+  d3_labPrototype.rgb = function() {
+    return d3_lab_rgb(this.l, this.a, this.b);
+  };
+  function d3_lab_rgb(l, a, b) {
+    var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
+    x = d3_lab_xyz(x) * d3_lab_X;
+    y = d3_lab_xyz(y) * d3_lab_Y;
+    z = d3_lab_xyz(z) * d3_lab_Z;
+    return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
+  }
+  function d3_lab_hcl(l, a, b) {
+    return d3_hcl(Math.atan2(b, a) / π * 180, Math.sqrt(a * a + b * b), l);
+  }
+  function d3_lab_xyz(x) {
+    return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
+  }
+  function d3_xyz_lab(x) {
+    return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
+  }
+  function d3_xyz_rgb(r) {
+    return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
+  }
+  function d3_selection(groups) {
+    d3_arraySubclass(groups, d3_selectionPrototype);
+    return groups;
+  }
+  var d3_select = function(s, n) {
+    return n.querySelector(s);
+  }, d3_selectAll = function(s, n) {
+    return n.querySelectorAll(s);
+  }, d3_selectRoot = d3_document.documentElement, d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector, d3_selectMatches = function(n, s) {
+    return d3_selectMatcher.call(n, s);
+  };
+  if (typeof Sizzle === "function") {
+    d3_select = function(s, n) {
+      return Sizzle(s, n)[0] || null;
+    };
+    d3_selectAll = function(s, n) {
+      return Sizzle.uniqueSort(Sizzle(s, n));
+    };
+    d3_selectMatches = Sizzle.matchesSelector;
+  }
+  var d3_selectionPrototype = [];
+  d3.selection = function() {
+    return d3_selectionRoot;
+  };
+  d3.selection.prototype = d3_selectionPrototype;
+  d3_selectionPrototype.select = function(selector) {
+    var subgroups = [], subgroup, subnode, group, node;
+    if (typeof selector !== "function") selector = d3_selection_selector(selector);
+    for (var j = -1, m = this.length; ++j < m; ) {
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = (group = this[j]).parentNode;
+      for (var i = -1, n = group.length; ++i < n; ) {
+        if (node = group[i]) {
+          subgroup.push(subnode = selector.call(node, node.__data__, i));
+          if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  };
+  function d3_selection_selector(selector) {
+    return function() {
+      return d3_select(selector, this);
+    };
+  }
+  d3_selectionPrototype.selectAll = function(selector) {
+    var subgroups = [], subgroup, node;
+    if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
+    for (var j = -1, m = this.length; ++j < m; ) {
+      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
+        if (node = group[i]) {
+          subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i)));
+          subgroup.parentNode = node;
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  };
+  function d3_selection_selectorAll(selector) {
+    return function() {
+      return d3_selectAll(selector, this);
+    };
+  }
+  d3_selectionPrototype.attr = function(name, value) {
+    if (arguments.length < 2) {
+      if (typeof name === "string") {
+        var node = this.node();
+        name = d3.ns.qualify(name);
+        return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);
+      }
+      for (value in name) this.each(d3_selection_attr(value, name[value]));
+      return this;
+    }
+    return this.each(d3_selection_attr(name, value));
+  };
+  function d3_selection_attr(name, value) {
+    name = d3.ns.qualify(name);
+    function attrNull() {
+      this.removeAttribute(name);
+    }
+    function attrNullNS() {
+      this.removeAttributeNS(name.space, name.local);
+    }
+    function attrConstant() {
+      this.setAttribute(name, value);
+    }
+    function attrConstantNS() {
+      this.setAttributeNS(name.space, name.local, value);
+    }
+    function attrFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
+    }
+    function attrFunctionNS() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
+    }
+    return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
+  }
+  d3_selectionPrototype.classed = function(name, value) {
+    if (arguments.length < 2) {
+      if (typeof name === "string") {
+        var node = this.node(), n = (name = name.trim().split(/^|\s+/g)).length, i = -1;
+        if (value = node.classList) {
+          while (++i < n) if (!value.contains(name[i])) return false;
+        } else {
+          value = node.className;
+          if (value.baseVal != null) value = value.baseVal;
+          while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;
+        }
+        return true;
+      }
+      for (value in name) this.each(d3_selection_classed(value, name[value]));
+      return this;
+    }
+    return this.each(d3_selection_classed(name, value));
+  };
+  function d3_selection_classedRe(name) {
+    return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
+  }
+  function d3_selection_classed(name, value) {
+    name = name.trim().split(/\s+/).map(d3_selection_classedName);
+    var n = name.length;
+    function classedConstant() {
+      var i = -1;
+      while (++i < n) name[i](this, value);
+    }
+    function classedFunction() {
+      var i = -1, x = value.apply(this, arguments);
+      while (++i < n) name[i](this, x);
+    }
+    return typeof value === "function" ? classedFunction : classedConstant;
+  }
+  function d3_selection_classedName(name) {
+    var re = d3_selection_classedRe(name);
+    return function(node, value) {
+      if (c = node.classList) return value ? c.add(name) : c.remove(name);
+      var c = node.className, cb = c.baseVal != null, cv = cb ? c.baseVal : c;
+      if (value) {
+        re.lastIndex = 0;
+        if (!re.test(cv)) {
+          cv = d3_collapse(cv + " " + name);
+          if (cb) c.baseVal = cv; else node.className = cv;
+        }
+      } else if (cv) {
+        cv = d3_collapse(cv.replace(re, " "));
+        if (cb) c.baseVal = cv; else node.className = cv;
+      }
+    };
+  }
+  d3_selectionPrototype.style = function(name, value, priority) {
+    var n = arguments.length;
+    if (n < 3) {
+      if (typeof name !== "string") {
+        if (n < 2) value = "";
+        for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
+        return this;
+      }
+      if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);
+      priority = "";
+    }
+    return this.each(d3_selection_style(name, value, priority));
+  };
+  function d3_selection_style(name, value, priority) {
+    function styleNull() {
+      this.style.removeProperty(name);
+    }
+    function styleConstant() {
+      this.style.setProperty(name, value, priority);
+    }
+    function styleFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
+    }
+    return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
+  }
+  d3_selectionPrototype.property = function(name, value) {
+    if (arguments.length < 2) {
+      if (typeof name === "string") return this.node()[name];
+      for (value in name) this.each(d3_selection_property(value, name[value]));
+      return this;
+    }
+    return this.each(d3_selection_property(name, value));
+  };
+  function d3_selection_property(name, value) {
+    function propertyNull() {
+      delete this[name];
+    }
+    function propertyConstant() {
+      this[name] = value;
+    }
+    function propertyFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) delete this[name]; else this[name] = x;
+    }
+    return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
+  }
+  d3_selectionPrototype.text = function(value) {
+    return arguments.length ? this.each(typeof value === "function" ? function() {
+      var v = value.apply(this, arguments);
+      this.textContent = v == null ? "" : v;
+    } : value == null ? function() {
+      this.textContent = "";
+    } : function() {
+      this.textContent = value;
+    }) : this.node().textContent;
+  };
+  d3_selectionPrototype.html = function(value) {
+    return arguments.length ? this.each(typeof value === "function" ? function() {
+      var v = value.apply(this, arguments);
+      this.innerHTML = v == null ? "" : v;
+    } : value == null ? function() {
+      this.innerHTML = "";
+    } : function() {
+      this.innerHTML = value;
+    }) : this.node().innerHTML;
+  };
+  d3_selectionPrototype.append = function(name) {
+    name = d3.ns.qualify(name);
+    function append() {
+      return this.appendChild(d3_document.createElementNS(this.namespaceURI, name));
+    }
+    function appendNS() {
+      return this.appendChild(d3_document.createElementNS(name.space, name.local));
+    }
+    return this.select(name.local ? appendNS : append);
+  };
+  d3_selectionPrototype.insert = function(name, before) {
+    name = d3.ns.qualify(name);
+    function insert() {
+      return this.insertBefore(d3_document.createElementNS(this.namespaceURI, name), d3_select(before, this));
+    }
+    function insertNS() {
+      return this.insertBefore(d3_document.createElementNS(name.space, name.local), d3_select(before, this));
+    }
+    return this.select(name.local ? insertNS : insert);
+  };
+  d3_selectionPrototype.remove = function() {
+    return this.each(function() {
+      var parent = this.parentNode;
+      if (parent) parent.removeChild(this);
+    });
+  };
+  d3_selectionPrototype.data = function(value, key) {
+    var i = -1, n = this.length, group, node;
+    if (!arguments.length) {
+      value = new Array(n = (group = this[0]).length);
+      while (++i < n) {
+        if (node = group[i]) {
+          value[i] = node.__data__;
+        }
+      }
+      return value;
+    }
+    function bind(group, groupData) {
+      var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
+      if (key) {
+        var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;
+        for (i = -1; ++i < n; ) {
+          keyValue = key.call(node = group[i], node.__data__, i);
+          if (nodeByKeyValue.has(keyValue)) {
+            exitNodes[i] = node;
+          } else {
+            nodeByKeyValue.set(keyValue, node);
+          }
+          keyValues.push(keyValue);
+        }
+        for (i = -1; ++i < m; ) {
+          keyValue = key.call(groupData, nodeData = groupData[i], i);
+          if (node = nodeByKeyValue.get(keyValue)) {
+            updateNodes[i] = node;
+            node.__data__ = nodeData;
+          } else if (!dataByKeyValue.has(keyValue)) {
+            enterNodes[i] = d3_selection_dataNode(nodeData);
+          }
+          dataByKeyValue.set(keyValue, nodeData);
+          nodeByKeyValue.remove(keyValue);
+        }
+        for (i = -1; ++i < n; ) {
+          if (nodeByKeyValue.has(keyValues[i])) {
+            exitNodes[i] = group[i];
+          }
+        }
+      } else {
+        for (i = -1; ++i < n0; ) {
+          node = group[i];
+          nodeData = groupData[i];
+          if (node) {
+            node.__data__ = nodeData;
+            updateNodes[i] = node;
+          } else {
+            enterNodes[i] = d3_selection_dataNode(nodeData);
+          }
+        }
+        for (;i < m; ++i) {
+          enterNodes[i] = d3_selection_dataNode(groupData[i]);
+        }
+        for (;i < n; ++i) {
+          exitNodes[i] = group[i];
+        }
+      }
+      enterNodes.update = updateNodes;
+      enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;
+      enter.push(enterNodes);
+      update.push(updateNodes);
+      exit.push(exitNodes);
+    }
+    var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);
+    if (typeof value === "function") {
+      while (++i < n) {
+        bind(group = this[i], value.call(group, group.parentNode.__data__, i));
+      }
+    } else {
+      while (++i < n) {
+        bind(group = this[i], value);
+      }
+    }
+    update.enter = function() {
+      return enter;
+    };
+    update.exit = function() {
+      return exit;
+    };
+    return update;
+  };
+  function d3_selection_dataNode(data) {
+    return {
+      __data__: data
+    };
+  }
+  d3_selectionPrototype.datum = function(value) {
+    return arguments.length ? this.property("__data__", value) : this.property("__data__");
+  };
+  d3_selectionPrototype.filter = function(filter) {
+    var subgroups = [], subgroup, group, node;
+    if (typeof filter !== "function") filter = d3_selection_filter(filter);
+    for (var j = 0, m = this.length; j < m; j++) {
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = (group = this[j]).parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if ((node = group[i]) && filter.call(node, node.__data__, i)) {
+          subgroup.push(node);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  };
+  function d3_selection_filter(selector) {
+    return function() {
+      return d3_selectMatches(this, selector);
+    };
+  }
+  d3_selectionPrototype.order = function() {
+    for (var j = -1, m = this.length; ++j < m; ) {
+      for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
+        if (node = group[i]) {
+          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
+          next = node;
+        }
+      }
+    }
+    return this;
+  };
+  d3_selectionPrototype.sort = function(comparator) {
+    comparator = d3_selection_sortComparator.apply(this, arguments);
+    for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);
+    return this.order();
+  };
+  function d3_selection_sortComparator(comparator) {
+    if (!arguments.length) comparator = d3.ascending;
+    return function(a, b) {
+      return !a - !b || comparator(a.__data__, b.__data__);
+    };
+  }
+  d3_selectionPrototype.on = function(type, listener, capture) {
+    var n = arguments.length;
+    if (n < 3) {
+      if (typeof type !== "string") {
+        if (n < 2) listener = false;
+        for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));
+        return this;
+      }
+      if (n < 2) return (n = this.node()["__on" + type]) && n._;
+      capture = false;
+    }
+    return this.each(d3_selection_on(type, listener, capture));
+  };
+  function d3_selection_on(type, listener, capture) {
+    var name = "__on" + type, i = type.indexOf(".");
+    if (i > 0) type = type.substring(0, i);
+    function onRemove() {
+      var wrapper = this[name];
+      if (wrapper) {
+        this.removeEventListener(type, wrapper, wrapper.$);
+        delete this[name];
+      }
+    }
+    function onAdd() {
+      var node = this, args = d3_array(arguments);
+      onRemove.call(this);
+      this.addEventListener(type, this[name] = wrapper, wrapper.$ = capture);
+      wrapper._ = listener;
+      function wrapper(e) {
+        var o = d3.event;
+        d3.event = e;
+        args[0] = node.__data__;
+        try {
+          listener.apply(node, args);
+        } finally {
+          d3.event = o;
+        }
+      }
+    }
+    return listener ? onAdd : onRemove;
+  }
+  d3_selectionPrototype.each = function(callback) {
+    return d3_selection_each(this, function(node, i, j) {
+      callback.call(node, node.__data__, i, j);
+    });
+  };
+  function d3_selection_each(groups, callback) {
+    for (var j = 0, m = groups.length; j < m; j++) {
+      for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
+        if (node = group[i]) callback(node, i, j);
+      }
+    }
+    return groups;
+  }
+  d3_selectionPrototype.call = function(callback) {
+    var args = d3_array(arguments);
+    callback.apply(args[0] = this, args);
+    return this;
+  };
+  d3_selectionPrototype.empty = function() {
+    return !this.node();
+  };
+  d3_selectionPrototype.node = function() {
+    for (var j = 0, m = this.length; j < m; j++) {
+      for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+        var node = group[i];
+        if (node) return node;
+      }
+    }
+    return null;
+  };
+  d3_selectionPrototype.transition = function() {
+    var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = Object.create(d3_transitionInherit);
+    transition.time = Date.now();
+    for (var j = -1, m = this.length; ++j < m; ) {
+      subgroups.push(subgroup = []);
+      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
+        if (node = group[i]) d3_transitionNode(node, i, id, transition);
+        subgroup.push(node);
+      }
+    }
+    return d3_transition(subgroups, id);
+  };
+  var d3_selectionRoot = d3_selection([ [ d3_document ] ]);
+  d3_selectionRoot[0].parentNode = d3_selectRoot;
+  d3.select = function(selector) {
+    return typeof selector === "string" ? d3_selectionRoot.select(selector) : d3_selection([ [ selector ] ]);
+  };
+  d3.selectAll = function(selector) {
+    return typeof selector === "string" ? d3_selectionRoot.selectAll(selector) : d3_selection([ d3_array(selector) ]);
+  };
+  function d3_selection_enter(selection) {
+    d3_arraySubclass(selection, d3_selection_enterPrototype);
+    return selection;
+  }
+  var d3_selection_enterPrototype = [];
+  d3.selection.enter = d3_selection_enter;
+  d3.selection.enter.prototype = d3_selection_enterPrototype;
+  d3_selection_enterPrototype.append = d3_selectionPrototype.append;
+  d3_selection_enterPrototype.insert = d3_selectionPrototype.insert;
+  d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
+  d3_selection_enterPrototype.node = d3_selectionPrototype.node;
+  d3_selection_enterPrototype.select = function(selector) {
+    var subgroups = [], subgroup, subnode, upgroup, group, node;
+    for (var j = -1, m = this.length; ++j < m; ) {
+      upgroup = (group = this[j]).update;
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = -1, n = group.length; ++i < n; ) {
+        if (node = group[i]) {
+          subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i));
+          subnode.__data__ = node.__data__;
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  };
+  function d3_transition(groups, id) {
+    d3_arraySubclass(groups, d3_transitionPrototype);
+    groups.id = id;
+    return groups;
+  }
+  var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit = {
+    ease: d3_ease_cubicInOut,
+    delay: 0,
+    duration: 250
+  };
+  d3_transitionPrototype.call = d3_selectionPrototype.call;
+  d3_transitionPrototype.empty = d3_selectionPrototype.empty;
+  d3_transitionPrototype.node = d3_selectionPrototype.node;
+  d3.transition = function(selection) {
+    return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();
+  };
+  d3.transition.prototype = d3_transitionPrototype;
+  function d3_transitionNode(node, i, id, inherit) {
+    var lock = node.__transition__ || (node.__transition__ = {
+      active: 0,
+      count: 0
+    }), transition = lock[id];
+    if (!transition) {
+      var time = inherit.time;
+      transition = lock[id] = {
+        tween: new d3_Map(),
+        event: d3.dispatch("start", "end"),
+        time: time,
+        ease: inherit.ease,
+        delay: inherit.delay,
+        duration: inherit.duration
+      };
+      ++lock.count;
+      d3.timer(function(elapsed) {
+        var d = node.__data__, ease = transition.ease, event = transition.event, delay = transition.delay, duration = transition.duration, tweened = [];
+        return delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time), 1;
+        function start(elapsed) {
+          if (lock.active > id) return stop();
+          lock.active = id;
+          event.start.call(node, d, i);
+          transition.tween.forEach(function(key, value) {
+            if (value = value.call(node, d, i)) {
+              tweened.push(value);
+            }
+          });
+          if (!tick(elapsed)) d3.timer(tick, 0, time);
+          return 1;
+        }
+        function tick(elapsed) {
+          if (lock.active !== id) return stop();
+          var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length;
+          while (n > 0) {
+            tweened[--n].call(node, e);
+          }
+          if (t >= 1) {
+            stop();
+            event.end.call(node, d, i);
+            return 1;
+          }
+        }
+        function stop() {
+          if (--lock.count) delete lock[id]; else delete node.__transition__;
+          return 1;
+        }
+      }, 0, time);
+      return transition;
+    }
+  }
+  d3_transitionPrototype.select = function(selector) {
+    var id = this.id, subgroups = [], subgroup, subnode, node;
+    if (typeof selector !== "function") selector = d3_selection_selector(selector);
+    for (var j = -1, m = this.length; ++j < m; ) {
+      subgroups.push(subgroup = []);
+      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
+        if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i))) {
+          if ("__data__" in node) subnode.__data__ = node.__data__;
+          d3_transitionNode(subnode, i, id, node.__transition__[id]);
+          subgroup.push(subnode);
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_transition(subgroups, id);
+  };
+  d3_transitionPrototype.selectAll = function(selector) {
+    var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
+    if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
+    for (var j = -1, m = this.length; ++j < m; ) {
+      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
+        if (node = group[i]) {
+          transition = node.__transition__[id];
+          subnodes = selector.call(node, node.__data__, i);
+          subgroups.push(subgroup = []);
+          for (var k = -1, o = subnodes.length; ++k < o; ) {
+            d3_transitionNode(subnode = subnodes[k], k, id, transition);
+            subgroup.push(subnode);
+          }
+        }
+      }
+    }
+    return d3_transition(subgroups, id);
+  };
+  d3_transitionPrototype.filter = function(filter) {
+    var subgroups = [], subgroup, group, node;
+    if (typeof filter !== "function") filter = d3_selection_filter(filter);
+    for (var j = 0, m = this.length; j < m; j++) {
+      subgroups.push(subgroup = []);
+      for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+        if ((node = group[i]) && filter.call(node, node.__data__, i)) {
+          subgroup.push(node);
+        }
+      }
+    }
+    return d3_transition(subgroups, this.id, this.time).ease(this.ease());
+  };
+  d3_transitionPrototype.attr = function(nameNS, value) {
+    if (arguments.length < 2) {
+      for (value in nameNS) this.attr(value, nameNS[value]);
+      return this;
+    }
+    var interpolate = d3_interpolateByName(nameNS), name = d3.ns.qualify(nameNS);
+    function attrNull() {
+      this.removeAttribute(name);
+    }
+    function attrNullNS() {
+      this.removeAttributeNS(name.space, name.local);
+    }
+    return d3_transition_tween(this, "attr." + nameNS, value, function(b) {
+      function attrString() {
+        var a = this.getAttribute(name), i;
+        return a !== b && (i = interpolate(a, b), function(t) {
+          this.setAttribute(name, i(t));
+        });
+      }
+      function attrStringNS() {
+        var a = this.getAttributeNS(name.space, name.local), i;
+        return a !== b && (i = interpolate(a, b), function(t) {
+          this.setAttributeNS(name.space, name.local, i(t));
+        });
+      }
+      return b == null ? name.local ? attrNullNS : attrNull : (b += "", name.local ? attrStringNS : attrString);
+    });
+  };
+  d3_transitionPrototype.attrTween = function(nameNS, tween) {
+    var name = d3.ns.qualify(nameNS);
+    function attrTween(d, i) {
+      var f = tween.call(this, d, i, this.getAttribute(name));
+      return f && function(t) {
+        this.setAttribute(name, f(t));
+      };
+    }
+    function attrTweenNS(d, i) {
+      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
+      return f && function(t) {
+        this.setAttributeNS(name.space, name.local, f(t));
+      };
+    }
+    return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
+  };
+  d3_transitionPrototype.style = function(name, value, priority) {
+    var n = arguments.length;
+    if (n < 3) {
+      if (typeof name !== "string") {
+        if (n < 2) value = "";
+        for (priority in name) this.style(priority, name[priority], value);
+        return this;
+      }
+      priority = "";
+    }
+    var interpolate = d3_interpolateByName(name);
+    function styleNull() {
+      this.style.removeProperty(name);
+    }
+    return d3_transition_tween(this, "style." + name, value, function(b) {
+      function styleString() {
+        var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i;
+        return a !== b && (i = interpolate(a, b), function(t) {
+          this.style.setProperty(name, i(t), priority);
+        });
+      }
+      return b == null ? styleNull : (b += "", styleString);
+    });
+  };
+  d3_transitionPrototype.styleTween = function(name, tween, priority) {
+    if (arguments.length < 3) priority = "";
+    return this.tween("style." + name, function(d, i) {
+      var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name));
+      return f && function(t) {
+        this.style.setProperty(name, f(t), priority);
+      };
+    });
+  };
+  d3_transitionPrototype.text = function(value) {
+    return d3_transition_tween(this, "text", value, d3_transition_text);
+  };
+  function d3_transition_text(b) {
+    if (b == null) b = "";
+    return function() {
+      this.textContent = b;
+    };
+  }
+  d3_transitionPrototype.remove = function() {
+    return this.each("end.transition", function() {
+      var p;
+      if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
+    });
+  };
+  d3_transitionPrototype.ease = function(value) {
+    var id = this.id;
+    if (arguments.length < 1) return this.node().__transition__[id].ease;
+    if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
+    return d3_selection_each(this, function(node) {
+      node.__transition__[id].ease = value;
+    });
+  };
+  d3_transitionPrototype.delay = function(value) {
+    var id = this.id;
+    return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
+      node.__transition__[id].delay = value.call(node, node.__data__, i, j) | 0;
+    } : (value |= 0, function(node) {
+      node.__transition__[id].delay = value;
+    }));
+  };
+  d3_transitionPrototype.duration = function(value) {
+    var id = this.id;
+    return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
+      node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j) | 0);
+    } : (value = Math.max(1, value | 0), function(node) {
+      node.__transition__[id].duration = value;
+    }));
+  };
+  d3_transitionPrototype.each = function(type, listener) {
+    var id = this.id;
+    if (arguments.length < 2) {
+      var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
+      d3_transitionInheritId = id;
+      d3_selection_each(this, function(node, i, j) {
+        d3_transitionInherit = node.__transition__[id];
+        type.call(node, node.__data__, i, j);
+      });
+      d3_transitionInherit = inherit;
+      d3_transitionInheritId = inheritId;
+    } else {
+      d3_selection_each(this, function(node) {
+        node.__transition__[id].event.on(type, listener);
+      });
+    }
+    return this;
+  };
+  d3_transitionPrototype.transition = function() {
+    var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition;
+    for (var j = 0, m = this.length; j < m; j++) {
+      subgroups.push(subgroup = []);
+      for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          transition = Object.create(node.__transition__[id0]);
+          transition.delay += transition.duration;
+          d3_transitionNode(node, i, id1, transition);
+        }
+        subgroup.push(node);
+      }
+    }
+    return d3_transition(subgroups, id1);
+  };
+  d3_transitionPrototype.tween = function(name, tween) {
+    var id = this.id;
+    if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);
+    return d3_selection_each(this, tween == null ? function(node) {
+      node.__transition__[id].tween.remove(name);
+    } : function(node) {
+      node.__transition__[id].tween.set(name, tween);
+    });
+  };
+  function d3_transition_tween(groups, name, value, tween) {
+    var id = groups.id;
+    return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
+      node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
+    } : (value = tween(value), function(node) {
+      node.__transition__[id].tween.set(name, value);
+    }));
+  }
+  var d3_timer_id = 0, d3_timer_byId = {}, d3_timer_queue = null, d3_timer_interval, d3_timer_timeout;
+  d3.timer = function(callback, delay, then) {
+    if (arguments.length < 3) {
+      if (arguments.length < 2) delay = 0; else if (!isFinite(delay)) return;
+      then = Date.now();
+    }
+    var timer = d3_timer_byId[callback.id];
+    if (timer && timer.callback === callback) {
+      timer.then = then;
+      timer.delay = delay;
+    } else d3_timer_byId[callback.id = ++d3_timer_id] = d3_timer_queue = {
+      callback: callback,
+      then: then,
+      delay: delay,
+      next: d3_timer_queue
+    };
+    if (!d3_timer_interval) {
+      d3_timer_timeout = clearTimeout(d3_timer_timeout);
+      d3_timer_interval = 1;
+      d3_timer_frame(d3_timer_step);
+    }
+  };
+  function d3_timer_step() {
+    var elapsed, now = Date.now(), t1 = d3_timer_queue;
+    while (t1) {
+      elapsed = now - t1.then;
+      if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed);
+      t1 = t1.next;
+    }
+    var delay = d3_timer_flush() - now;
+    if (delay > 24) {
+      if (isFinite(delay)) {
+        clearTimeout(d3_timer_timeout);
+        d3_timer_timeout = setTimeout(d3_timer_step, delay);
+      }
+      d3_timer_interval = 0;
+    } else {
+      d3_timer_interval = 1;
+      d3_timer_frame(d3_timer_step);
+    }
+  }
+  d3.timer.flush = function() {
+    var elapsed, now = Date.now(), t1 = d3_timer_queue;
+    while (t1) {
+      elapsed = now - t1.then;
+      if (!t1.delay) t1.flush = t1.callback(elapsed);
+      t1 = t1.next;
+    }
+    d3_timer_flush();
+  };
+  function d3_timer_flush() {
+    var t0 = null, t1 = d3_timer_queue, then = Infinity;
+    while (t1) {
+      if (t1.flush) {
+        delete d3_timer_byId[t1.callback.id];
+        t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
+      } else {
+        then = Math.min(then, t1.then + t1.delay);
+        t1 = (t0 = t1).next;
+      }
+    }
+    return then;
+  }
+  var d3_timer_frame = d3_window.requestAnimationFrame || d3_window.webkitRequestAnimationFrame || d3_window.mozRequestAnimationFrame || d3_window.oRequestAnimationFrame || d3_window.msRequestAnimationFrame || function(callback) {
+    setTimeout(callback, 17);
+  };
+  d3.mouse = function(container) {
+    return d3_mousePoint(container, d3_eventSource());
+  };
+  var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;
+  function d3_mousePoint(container, e) {
+    var svg = container.ownerSVGElement || container;
+    if (svg.createSVGPoint) {
+      var point = svg.createSVGPoint();
+      if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {
+        svg = d3.select(d3_document.body).append("svg").style("position", "absolute").style("top", 0).style("left", 0);
+        var ctm = svg[0][0].getScreenCTM();
+        d3_mouse_bug44083 = !(ctm.f || ctm.e);
+        svg.remove();
+      }
+      if (d3_mouse_bug44083) {
+        point.x = e.pageX;
+        point.y = e.pageY;
+      } else {
+        point.x = e.clientX;
+        point.y = e.clientY;
+      }
+      point = point.matrixTransform(container.getScreenCTM().inverse());
+      return [ point.x, point.y ];
+    }
+    var rect = container.getBoundingClientRect();
+    return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
+  }
+  d3.touches = function(container, touches) {
+    if (arguments.length < 2) touches = d3_eventSource().touches;
+    return touches ? d3_array(touches).map(function(touch) {
+      var point = d3_mousePoint(container, touch);
+      point.identifier = touch.identifier;
+      return point;
+    }) : [];
+  };
+  function d3_noop() {}
+  d3.scale = {};
+  function d3_scaleExtent(domain) {
+    var start = domain[0], stop = domain[domain.length - 1];
+    return start < stop ? [ start, stop ] : [ stop, start ];
+  }
+  function d3_scaleRange(scale) {
+    return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
+  }
+  function d3_scale_nice(domain, nice) {
+    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
+    if (x1 < x0) {
+      dx = i0, i0 = i1, i1 = dx;
+      dx = x0, x0 = x1, x1 = dx;
+    }
+    if (nice = nice(x1 - x0)) {
+      domain[i0] = nice.floor(x0);
+      domain[i1] = nice.ceil(x1);
+    }
+    return domain;
+  }
+  function d3_scale_niceDefault() {
+    return Math;
+  }
+  d3.scale.linear = function() {
+    return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3.interpolate, false);
+  };
+  function d3_scale_linear(domain, range, interpolate, clamp) {
+    var output, input;
+    function rescale() {
+      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
+      output = linear(domain, range, uninterpolate, interpolate);
+      input = linear(range, domain, uninterpolate, d3.interpolate);
+      return scale;
+    }
+    function scale(x) {
+      return output(x);
+    }
+    scale.invert = function(y) {
+      return input(y);
+    };
+    scale.domain = function(x) {
+      if (!arguments.length) return domain;
+      domain = x.map(Number);
+      return rescale();
+    };
+    scale.range = function(x) {
+      if (!arguments.length) return range;
+      range = x;
+      return rescale();
+    };
+    scale.rangeRound = function(x) {
+      return scale.range(x).interpolate(d3.interpolateRound);
+    };
+    scale.clamp = function(x) {
+      if (!arguments.length) return clamp;
+      clamp = x;
+      return rescale();
+    };
+    scale.interpolate = function(x) {
+      if (!arguments.length) return interpolate;
+      interpolate = x;
+      return rescale();
+    };
+    scale.ticks = function(m) {
+      return d3_scale_linearTicks(domain, m);
+    };
+    scale.tickFormat = function(m) {
+      return d3_scale_linearTickFormat(domain, m);
+    };
+    scale.nice = function() {
+      d3_scale_nice(domain, d3_scale_linearNice);
+      return rescale();
+    };
+    scale.copy = function() {
+      return d3_scale_linear(domain, range, interpolate, clamp);
+    };
+    return rescale();
+  }
+  function d3_scale_linearRebind(scale, linear) {
+    return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
+  }
+  function d3_scale_linearNice(dx) {
+    dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
+    return dx && {
+      floor: function(x) {
+        return Math.floor(x / dx) * dx;
+      },
+      ceil: function(x) {
+        return Math.ceil(x / dx) * dx;
+      }
+    };
+  }
+  function d3_scale_linearTickRange(domain, m) {
+    var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
+    if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
+    extent[0] = Math.ceil(extent[0] / step) * step;
+    extent[1] = Math.floor(extent[1] / step) * step + step * .5;
+    extent[2] = step;
+    return extent;
+  }
+  function d3_scale_linearTicks(domain, m) {
+    return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
+  }
+  function d3_scale_linearTickFormat(domain, m) {
+    return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
+  }
+  function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
+    var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
+    return function(x) {
+      return i(u(x));
+    };
+  }
+  function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
+    var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
+    if (domain[k] < domain[0]) {
+      domain = domain.slice().reverse();
+      range = range.slice().reverse();
+    }
+    while (++j <= k) {
+      u.push(uninterpolate(domain[j - 1], domain[j]));
+      i.push(interpolate(range[j - 1], range[j]));
+    }
+    return function(x) {
+      var j = d3.bisect(domain, x, 1, k) - 1;
+      return i[j](u[j](x));
+    };
+  }
+  d3.scale.log = function() {
+    return d3_scale_log(d3.scale.linear(), d3_scale_logp);
+  };
+  function d3_scale_log(linear, log) {
+    var pow = log.pow;
+    function scale(x) {
+      return linear(log(x));
+    }
+    scale.invert = function(x) {
+      return pow(linear.invert(x));
+    };
+    scale.domain = function(x) {
+      if (!arguments.length) return linear.domain().map(pow);
+      log = x[0] < 0 ? d3_scale_logn : d3_scale_logp;
+      pow = log.pow;
+      linear.domain(x.map(log));
+      return scale;
+    };
+    scale.nice = function() {
+      linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
+      return scale;
+    };
+    scale.ticks = function() {
+      var extent = d3_scaleExtent(linear.domain()), ticks = [];
+      if (extent.every(isFinite)) {
+        var i = Math.floor(extent[0]), j = Math.ceil(extent[1]), u = pow(extent[0]), v = pow(extent[1]);
+        if (log === d3_scale_logn) {
+          ticks.push(pow(i));
+          for (;i++ < j; ) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
+        } else {
+          for (;i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
+          ticks.push(pow(i));
+        }
+        for (i = 0; ticks[i] < u; i++) {}
+        for (j = ticks.length; ticks[j - 1] > v; j--) {}
+        ticks = ticks.slice(i, j);
+      }
+      return ticks;
+    };
+    scale.tickFormat = function(n, format) {
+      if (arguments.length < 2) format = d3_scale_logFormat;
+      if (!arguments.length) return format;
+      var k = Math.max(.1, n / scale.ticks().length), f = log === d3_scale_logn ? (e = -1e-12,
+      Math.floor) : (e = 1e-12, Math.ceil), e;
+      return function(d) {
+        return d / pow(f(log(d) + e)) <= k ? format(d) : "";
+      };
+    };
+    scale.copy = function() {
+      return d3_scale_log(linear.copy(), log);
+    };
+    return d3_scale_linearRebind(scale, linear);
+  }
+  var d3_scale_logFormat = d3.format(".0e");
+  function d3_scale_logp(x) {
+    return Math.log(x < 0 ? 0 : x) / Math.LN10;
+  }
+  function d3_scale_logn(x) {
+    return -Math.log(x > 0 ? 0 : -x) / Math.LN10;
+  }
+  d3_scale_logp.pow = function(x) {
+    return Math.pow(10, x);
+  };
+  d3_scale_logn.pow = function(x) {
+    return -Math.pow(10, -x);
+  };
+  d3.scale.pow = function() {
+    return d3_scale_pow(d3.scale.linear(), 1);
+  };
+  function d3_scale_pow(linear, exponent) {
+    var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
+    function scale(x) {
+      return linear(powp(x));
+    }
+    scale.invert = function(x) {
+      return powb(linear.invert(x));
+    };
+    scale.domain = function(x) {
+      if (!arguments.length) return linear.domain().map(powb);
+      linear.domain(x.map(powp));
+      return scale;
+    };
+    scale.ticks = function(m) {
+      return d3_scale_linearTicks(scale.domain(), m);
+    };
+    scale.tickFormat = function(m) {
+      return d3_scale_linearTickFormat(scale.domain(), m);
+    };
+    scale.nice = function() {
+      return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
+    };
+    scale.exponent = function(x) {
+      if (!arguments.length) return exponent;
+      var domain = scale.domain();
+      powp = d3_scale_powPow(exponent = x);
+      powb = d3_scale_powPow(1 / exponent);
+      return scale.domain(domain);
+    };
+    scale.copy = function() {
+      return d3_scale_pow(linear.copy(), exponent);
+    };
+    return d3_scale_linearRebind(scale, linear);
+  }
+  function d3_scale_powPow(e) {
+    return function(x) {
+      return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
+    };
+  }
+  d3.scale.sqrt = function() {
+    return d3.scale.pow().exponent(.5);
+  };
+  d3.scale.ordinal = function() {
+    return d3_scale_ordinal([], {
+      t: "range",
+      a: [ [] ]
+    });
+  };
+  function d3_scale_ordinal(domain, ranger) {
+    var index, range, rangeBand;
+    function scale(x) {
+      return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length];
+    }
+    function steps(start, step) {
+      return d3.range(domain.length).map(function(i) {
+        return start + step * i;
+      });
+    }
+    scale.domain = function(x) {
+      if (!arguments.length) return domain;
+      domain = [];
+      index = new d3_Map();
+      var i = -1, n = x.length, xi;
+      while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
+      return scale[ranger.t].apply(scale, ranger.a);
+    };
+    scale.range = function(x) {
+      if (!arguments.length) return range;
+      range = x;
+      rangeBand = 0;
+      ranger = {
+        t: "range",
+        a: arguments
+      };
+      return scale;
+    };
+    scale.rangePoints = function(x, padding) {
+      if (arguments.length < 2) padding = 0;
+      var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
+      range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
+      rangeBand = 0;
+      ranger = {
+        t: "rangePoints",
+        a: arguments
+      };
+      return scale;
+    };
+    scale.rangeBands = function(x, padding, outerPadding) {
+      if (arguments.length < 2) padding = 0;
+      if (arguments.length < 3) outerPadding = padding;
+      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
+      range = steps(start + step * outerPadding, step);
+      if (reverse) range.reverse();
+      rangeBand = step * (1 - padding);
+      ranger = {
+        t: "rangeBands",
+        a: arguments
+      };
+      return scale;
+    };
+    scale.rangeRoundBands = function(x, padding, outerPadding) {
+      if (arguments.length < 2) padding = 0;
+      if (arguments.length < 3) outerPadding = padding;
+      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
+      range = steps(start + Math.round(error / 2), step);
+      if (reverse) range.reverse();
+      rangeBand = Math.round(step * (1 - padding));
+      ranger = {
+        t: "rangeRoundBands",
+        a: arguments
+      };
+      return scale;
+    };
+    scale.rangeBand = function() {
+      return rangeBand;
+    };
+    scale.rangeExtent = function() {
+      return d3_scaleExtent(ranger.a[0]);
+    };
+    scale.copy = function() {
+      return d3_scale_ordinal(domain, ranger);
+    };
+    return scale.domain(domain);
+  }
+  d3.scale.category10 = function() {
+    return d3.scale.ordinal().range(d3_category10);
+  };
+  d3.scale.category20 = function() {
+    return d3.scale.ordinal().range(d3_category20);
+  };
+  d3.scale.category20b = function() {
+    return d3.scale.ordinal().range(d3_category20b);
+  };
+  d3.scale.category20c = function() {
+    return d3.scale.ordinal().range(d3_category20c);
+  };
+  var d3_category10 = [ "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" ];
+  var d3_category20 = [ "#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ];
+  var d3_category20b = [ "#393b79", "#5254a3", "#6b6ecf", "#9c9ede", "#637939", "#8ca252", "#b5cf6b", "#cedb9c", "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94", "#843c39", "#ad494a", "#d6616b", "#e7969c", "#7b4173", "#a55194", "#ce6dbd", "#de9ed6" ];
+  var d3_category20c = [ "#3182bd", "#6baed6", "#9ecae1", "#c6dbef", "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2", "#31a354", "#74c476", "#a1d99b", "#c7e9c0", "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", "#636363", "#969696", "#bdbdbd", "#d9d9d9" ];
+  d3.scale.quantile = function() {
+    return d3_scale_quantile([], []);
+  };
+  function d3_scale_quantile(domain, range) {
+    var thresholds;
+    function rescale() {
+      var k = 0, q = range.length;
+      thresholds = [];
+      while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
+      return scale;
+    }
+    function scale(x) {
+      if (isNaN(x = +x)) return NaN;
+      return range[d3.bisect(thresholds, x)];
+    }
+    scale.domain = function(x) {
+      if (!arguments.length) return domain;
+      domain = x.filter(function(d) {
+        return !isNaN(d);
+      }).sort(d3.ascending);
+      return rescale();
+    };
+    scale.range = function(x) {
+      if (!arguments.length) return range;
+      range = x;
+      return rescale();
+    };
+    scale.quantiles = function() {
+      return thresholds;
+    };
+    scale.copy = function() {
+      return d3_scale_quantile(domain, range);
+    };
+    return rescale();
+  }
+  d3.scale.quantize = function() {
+    return d3_scale_quantize(0, 1, [ 0, 1 ]);
+  };
+  function d3_scale_quantize(x0, x1, range) {
+    var kx, i;
+    function scale(x) {
+      return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
+    }
+    function rescale() {
+      kx = range.length / (x1 - x0);
+      i = range.length - 1;
+      return scale;
+    }
+    scale.domain = function(x) {
+      if (!arguments.length) return [ x0, x1 ];
+      x0 = +x[0];
+      x1 = +x[x.length - 1];
+      return rescale();
+    };
+    scale.range = function(x) {
+      if (!arguments.length) return range;
+      range = x;
+      return rescale();
+    };
+    scale.copy = function() {
+      return d3_scale_quantize(x0, x1, range);
+    };
+    return rescale();
+  }
+  d3.scale.threshold = function() {
+    return d3_scale_threshold([ .5 ], [ 0, 1 ]);
+  };
+  function d3_scale_threshold(domain, range) {
+    function scale(x) {
+      return range[d3.bisect(domain, x)];
+    }
+    scale.domain = function(_) {
+      if (!arguments.length) return domain;
+      domain = _;
+      return scale;
+    };
+    scale.range = function(_) {
+      if (!arguments.length) return range;
+      range = _;
+      return scale;
+    };
+    scale.copy = function() {
+      return d3_scale_threshold(domain, range);
+    };
+    return scale;
+  }
+  d3.scale.identity = function() {
+    return d3_scale_identity([ 0, 1 ]);
+  };
+  function d3_scale_identity(domain) {
+    function identity(x) {
+      return +x;
+    }
+    identity.invert = identity;
+    identity.domain = identity.range = function(x) {
+      if (!arguments.length) return domain;
+      domain = x.map(identity);
+      return identity;
+    };
+    identity.ticks = function(m) {
+      return d3_scale_linearTicks(domain, m);
+    };
+    identity.tickFormat = function(m) {
+      return d3_scale_linearTickFormat(domain, m);
+    };
+    identity.copy = function() {
+      return d3_scale_identity(domain);
+    };
+    return identity;
+  }
+  d3.svg = {};
+  d3.svg.arc = function() {
+    var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
+    function arc() {
+      var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0,
+      a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1);
+      return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z";
+    }
+    arc.innerRadius = function(v) {
+      if (!arguments.length) return innerRadius;
+      innerRadius = d3_functor(v);
+      return arc;
+    };
+    arc.outerRadius = function(v) {
+      if (!arguments.length) return outerRadius;
+      outerRadius = d3_functor(v);
+      return arc;
+    };
+    arc.startAngle = function(v) {
+      if (!arguments.length) return startAngle;
+      startAngle = d3_functor(v);
+      return arc;
+    };
+    arc.endAngle = function(v) {
+      if (!arguments.length) return endAngle;
+      endAngle = d3_functor(v);
+      return arc;
+    };
+    arc.centroid = function() {
+      var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
+      return [ Math.cos(a) * r, Math.sin(a) * r ];
+    };
+    return arc;
+  };
+  var d3_svg_arcOffset = -π / 2, d3_svg_arcMax = 2 * π - 1e-6;
+  function d3_svg_arcInnerRadius(d) {
+    return d.innerRadius;
+  }
+  function d3_svg_arcOuterRadius(d) {
+    return d.outerRadius;
+  }
+  function d3_svg_arcStartAngle(d) {
+    return d.startAngle;
+  }
+  function d3_svg_arcEndAngle(d) {
+    return d.endAngle;
+  }
+  function d3_svg_line(projection) {
+    var x = d3_svg_lineX, y = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
+    function line(data) {
+      var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
+      function segment() {
+        segments.push("M", interpolate(projection(points), tension));
+      }
+      while (++i < n) {
+        if (defined.call(this, d = data[i], i)) {
+          points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);
+        } else if (points.length) {
+          segment();
+          points = [];
+        }
+      }
+      if (points.length) segment();
+      return segments.length ? segments.join("") : null;
+    }
+    line.x = function(_) {
+      if (!arguments.length) return x;
+      x = _;
+      return line;
+    };
+    line.y = function(_) {
+      if (!arguments.length) return y;
+      y = _;
+      return line;
+    };
+    line.defined = function(_) {
+      if (!arguments.length) return defined;
+      defined = _;
+      return line;
+    };
+    line.interpolate = function(_) {
+      if (!arguments.length) return interpolateKey;
+      if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
+      return line;
+    };
+    line.tension = function(_) {
+      if (!arguments.length) return tension;
+      tension = _;
+      return line;
+    };
+    return line;
+  }
+  d3.svg.line = function() {
+    return d3_svg_line(d3_identity);
+  };
+  function d3_svg_lineX(d) {
+    return d[0];
+  }
+  function d3_svg_lineY(d) {
+    return d[1];
+  }
+  var d3_svg_lineInterpolators = d3.map({
+    linear: d3_svg_lineLinear,
+    "linear-closed": d3_svg_lineLinearClosed,
+    "step-before": d3_svg_lineStepBefore,
+    "step-after": d3_svg_lineStepAfter,
+    basis: d3_svg_lineBasis,
+    "basis-open": d3_svg_lineBasisOpen,
+    "basis-closed": d3_svg_lineBasisClosed,
+    bundle: d3_svg_lineBundle,
+    cardinal: d3_svg_lineCardinal,
+    "cardinal-open": d3_svg_lineCardinalOpen,
+    "cardinal-closed": d3_svg_lineCardinalClosed,
+    monotone: d3_svg_lineMonotone
+  });
+  d3_svg_lineInterpolators.forEach(function(key, value) {
+    value.key = key;
+    value.closed = /-closed$/.test(key);
+  });
+  function d3_svg_lineLinear(points) {
+    return points.join("L");
+  }
+  function d3_svg_lineLinearClosed(points) {
+    return d3_svg_lineLinear(points) + "Z";
+  }
+  function d3_svg_lineStepBefore(points) {
+    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
+    while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
+    return path.join("");
+  }
+  function d3_svg_lineStepAfter(points) {
+    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
+    while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
+    return path.join("");
+  }
+  function d3_svg_lineCardinalOpen(points, tension) {
+    return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension));
+  }
+  function d3_svg_lineCardinalClosed(points, tension) {
+    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
+    points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
+  }
+  function d3_svg_lineCardinal(points, tension) {
+    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
+  }
+  function d3_svg_lineHermite(points, tangents) {
+    if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
+      return d3_svg_lineLinear(points);
+    }
+    var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
+    if (quad) {
+      path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
+      p0 = points[1];
+      pi = 2;
+    }
+    if (tangents.length > 1) {
+      t = tangents[1];
+      p = points[pi];
+      pi++;
+      path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
+      for (var i = 2; i < tangents.length; i++, pi++) {
+        p = points[pi];
+        t = tangents[i];
+        path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
+      }
+    }
+    if (quad) {
+      var lp = points[pi];
+      path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
+    }
+    return path;
+  }
+  function d3_svg_lineCardinalTangents(points, tension) {
+    var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
+    while (++i < n) {
+      p0 = p1;
+      p1 = p2;
+      p2 = points[i];
+      tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);
+    }
+    return tangents;
+  }
+  function d3_svg_lineBasis(points) {
+    if (points.length < 3) return d3_svg_lineLinear(points);
+    var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0 ];
+    d3_svg_lineBasisBezier(path, px, py);
+    while (++i < n) {
+      pi = points[i];
+      px.shift();
+      px.push(pi[0]);
+      py.shift();
+      py.push(pi[1]);
+      d3_svg_lineBasisBezier(path, px, py);
+    }
+    i = -1;
+    while (++i < 2) {
+      px.shift();
+      px.push(pi[0]);
+      py.shift();
+      py.push(pi[1]);
+      d3_svg_lineBasisBezier(path, px, py);
+    }
+    return path.join("");
+  }
+  function d3_svg_lineBasisOpen(points) {
+    if (points.length < 4) return d3_svg_lineLinear(points);
+    var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];
+    while (++i < 3) {
+      pi = points[i];
+      px.push(pi[0]);
+      py.push(pi[1]);
+    }
+    path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
+    --i;
+    while (++i < n) {
+      pi = points[i];
+      px.shift();
+      px.push(pi[0]);
+      py.shift();
+      py.push(pi[1]);
+      d3_svg_lineBasisBezier(path, px, py);
+    }
+    return path.join("");
+  }
+  function d3_svg_lineBasisClosed(points) {
+    var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
+    while (++i < 4) {
+      pi = points[i % n];
+      px.push(pi[0]);
+      py.push(pi[1]);
+    }
+    path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
+    --i;
+    while (++i < m) {
+      pi = points[i % n];
+      px.shift();
+      px.push(pi[0]);
+      py.shift();
+      py.push(pi[1]);
+      d3_svg_lineBasisBezier(path, px, py);
+    }
+    return path.join("");
+  }
+  function d3_svg_lineBundle(points, tension) {
+    var n = points.length - 1;
+    if (n) {
+      var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
+      while (++i <= n) {
+        p = points[i];
+        t = i / n;
+        p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
+        p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
+      }
+    }
+    return d3_svg_lineBasis(points);
+  }
+  function d3_svg_lineDot4(a, b) {
+    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+  }
+  var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];
+  function d3_svg_lineBasisBezier(path, x, y) {
+    path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
+  }
+  function d3_svg_lineSlope(p0, p1) {
+    return (p1[1] - p0[1]) / (p1[0] - p0[0]);
+  }
+  function d3_svg_lineFiniteDifferences(points) {
+    var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
+    while (++i < j) {
+      m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
+    }
+    m[i] = d;
+    return m;
+  }
+  function d3_svg_lineMonotoneTangents(points) {
+    var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
+    while (++i < j) {
+      d = d3_svg_lineSlope(points[i], points[i + 1]);
+      if (Math.abs(d) < 1e-6) {
+        m[i] = m[i + 1] = 0;
+      } else {
+        a = m[i] / d;
+        b = m[i + 1] / d;
+        s = a * a + b * b;
+        if (s > 9) {
+          s = d * 3 / Math.sqrt(s);
+          m[i] = s * a;
+          m[i + 1] = s * b;
+        }
+      }
+    }
+    i = -1;
+    while (++i <= j) {
+      s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
+      tangents.push([ s || 0, m[i] * s || 0 ]);
+    }
+    return tangents;
+  }
+  function d3_svg_lineMonotone(points) {
+    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
+  }
+  d3.svg.line.radial = function() {
+    var line = d3_svg_line(d3_svg_lineRadial);
+    line.radius = line.x, delete line.x;
+    line.angle = line.y, delete line.y;
+    return line;
+  };
+  function d3_svg_lineRadial(points) {
+    var point, i = -1, n = points.length, r, a;
+    while (++i < n) {
+      point = points[i];
+      r = point[0];
+      a = point[1] + d3_svg_arcOffset;
+      point[0] = r * Math.cos(a);
+      point[1] = r * Math.sin(a);
+    }
+    return points;
+  }
+  function d3_svg_area(projection) {
+    var x0 = d3_svg_lineX, x1 = d3_svg_lineX, y0 = 0, y1 = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
+    function area(data) {
+      var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {
+        return x;
+      } : d3_functor(x1), fy1 = y0 === y1 ? function() {
+        return y;
+      } : d3_functor(y1), x, y;
+      function segment() {
+        segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
+      }
+      while (++i < n) {
+        if (defined.call(this, d = data[i], i)) {
+          points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);
+          points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);
+        } else if (points0.length) {
+          segment();
+          points0 = [];
+          points1 = [];
+        }
+      }
+      if (points0.length) segment();
+      return segments.length ? segments.join("") : null;
+    }
+    area.x = function(_) {
+      if (!arguments.length) return x1;
+      x0 = x1 = _;
+      return area;
+    };
+    area.x0 = function(_) {
+      if (!arguments.length) return x0;
+      x0 = _;
+      return area;
+    };
+    area.x1 = function(_) {
+      if (!arguments.length) return x1;
+      x1 = _;
+      return area;
+    };
+    area.y = function(_) {
+      if (!arguments.length) return y1;
+      y0 = y1 = _;
+      return area;
+    };
+    area.y0 = function(_) {
+      if (!arguments.length) return y0;
+      y0 = _;
+      return area;
+    };
+    area.y1 = function(_) {
+      if (!arguments.length) return y1;
+      y1 = _;
+      return area;
+    };
+    area.defined = function(_) {
+      if (!arguments.length) return defined;
+      defined = _;
+      return area;
+    };
+    area.interpolate = function(_) {
+      if (!arguments.length) return interpolateKey;
+      if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
+      interpolateReverse = interpolate.reverse || interpolate;
+      L = interpolate.closed ? "M" : "L";
+      return area;
+    };
+    area.tension = function(_) {
+      if (!arguments.length) return tension;
+      tension = _;
+      return area;
+    };
+    return area;
+  }
+  d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
+  d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
+  d3.svg.area = function() {
+    return d3_svg_area(d3_identity);
+  };
+  d3.svg.area.radial = function() {
+    var area = d3_svg_area(d3_svg_lineRadial);
+    area.radius = area.x, delete area.x;
+    area.innerRadius = area.x0, delete area.x0;
+    area.outerRadius = area.x1, delete area.x1;
+    area.angle = area.y, delete area.y;
+    area.startAngle = area.y0, delete area.y0;
+    area.endAngle = area.y1, delete area.y1;
+    return area;
+  };
+  d3.svg.chord = function() {
+    var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
+    function chord(d, i) {
+      var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);
+      return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
+    }
+    function subgroup(self, f, d, i) {
+      var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
+      return {
+        r: r,
+        a0: a0,
+        a1: a1,
+        p0: [ r * Math.cos(a0), r * Math.sin(a0) ],
+        p1: [ r * Math.cos(a1), r * Math.sin(a1) ]
+      };
+    }
+    function equals(a, b) {
+      return a.a0 == b.a0 && a.a1 == b.a1;
+    }
+    function arc(r, p, a) {
+      return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p;
+    }
+    function curve(r0, p0, r1, p1) {
+      return "Q 0,0 " + p1;
+    }
+    chord.radius = function(v) {
+      if (!arguments.length) return radius;
+      radius = d3_functor(v);
+      return chord;
+    };
+    chord.source = function(v) {
+      if (!arguments.length) return source;
+      source = d3_functor(v);
+      return chord;
+    };
+    chord.target = function(v) {
+      if (!arguments.length) return target;
+      target = d3_functor(v);
+      return chord;
+    };
+    chord.startAngle = function(v) {
+      if (!arguments.length) return startAngle;
+      startAngle = d3_functor(v);
+      return chord;
+    };
+    chord.endAngle = function(v) {
+      if (!arguments.length) return endAngle;
+      endAngle = d3_functor(v);
+      return chord;
+    };
+    return chord;
+  };
+  function d3_svg_chordRadius(d) {
+    return d.radius;
+  }
+  d3.svg.diagonal = function() {
+    var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;
+    function diagonal(d, i) {
+      var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {
+        x: p0.x,
+        y: m
+      }, {
+        x: p3.x,
+        y: m
+      }, p3 ];
+      p = p.map(projection);
+      return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
+    }
+    diagonal.source = function(x) {
+      if (!arguments.length) return source;
+      source = d3_functor(x);
+      return diagonal;
+    };
+    diagonal.target = function(x) {
+      if (!arguments.length) return target;
+      target = d3_functor(x);
+      return diagonal;
+    };
+    diagonal.projection = function(x) {
+      if (!arguments.length) return projection;
+      projection = x;
+      return diagonal;
+    };
+    return diagonal;
+  };
+  function d3_svg_diagonalProjection(d) {
+    return [ d.x, d.y ];
+  }
+  d3.svg.diagonal.radial = function() {
+    var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;
+    diagonal.projection = function(x) {
+      return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;
+    };
+    return diagonal;
+  };
+  function d3_svg_diagonalRadialProjection(projection) {
+    return function() {
+      var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset;
+      return [ r * Math.cos(a), r * Math.sin(a) ];
+    };
+  }
+  d3.svg.symbol = function() {
+    var type = d3_svg_symbolType, size = d3_svg_symbolSize;
+    function symbol(d, i) {
+      return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));
+    }
+    symbol.type = function(x) {
+      if (!arguments.length) return type;
+      type = d3_functor(x);
+      return symbol;
+    };
+    symbol.size = function(x) {
+      if (!arguments.length) return size;
+      size = d3_functor(x);
+      return symbol;
+    };
+    return symbol;
+  };
+  function d3_svg_symbolSize() {
+    return 64;
+  }
+  function d3_svg_symbolType() {
+    return "circle";
+  }
+  function d3_svg_symbolCircle(size) {
+    var r = Math.sqrt(size / π);
+    return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
+  }
+  var d3_svg_symbols = d3.map({
+    circle: d3_svg_symbolCircle,
+    cross: function(size) {
+      var r = Math.sqrt(size / 5) / 2;
+      return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z";
+    },
+    diamond: function(size) {
+      var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;
+      return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z";
+    },
+    square: function(size) {
+      var r = Math.sqrt(size) / 2;
+      return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z";
+    },
+    "triangle-down": function(size) {
+      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
+      return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z";
+    },
+    "triangle-up": function(size) {
+      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
+      return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z";
+    }
+  });
+  d3.svg.symbolTypes = d3_svg_symbols.keys();
+  var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
+  d3.svg.axis = function() {
+    var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, tickMajorSize = 6, tickMinorSize = 6, tickEndSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_, tickSubdivide = 0;
+    function axis(g) {
+      g.each(function() {
+        var g = d3.select(this);
+        var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String : tickFormat_;
+        var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), subtick = g.selectAll(".tick.minor").data(subticks, String), subtickEnter = subtick.enter().insert("line", ".tick").attr("class", "tick minor").style("opacity", 1e-6), subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(), subtickUpdate = d3.transition(subtick).style("opacity", 1);
+        var tick = g.selectAll(".tick.major").data(ticks, String), tickEnter = tick.enter().insert("g", "path").attr("class", "tick major").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
+        var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
+        d3.transition(path));
+        var scale1 = scale.copy(), scale0 = this.__chart__ || scale1;
+        this.__chart__ = scale1;
+        tickEnter.append("line");
+        tickEnter.append("text");
+        var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
+        switch (orient) {
+         case "bottom":
+          {
+            tickTransform = d3_svg_axisX;
+            subtickEnter.attr("y2", tickMinorSize);
+            subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
+            lineEnter.attr("y2", tickMajorSize);
+            textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding);
+            lineUpdate.attr("x2", 0).attr("y2", tickMajorSize);
+            textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding);
+            text.attr("dy", ".71em").style("text-anchor", "middle");
+            pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
+            break;
+          }
+
+         case "top":
+          {
+            tickTransform = d3_svg_axisX;
+            subtickEnter.attr("y2", -tickMinorSize);
+            subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
+            lineEnter.attr("y2", -tickMajorSize);
+            textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
+            lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize);
+            textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
+            text.attr("dy", "0em").style("text-anchor", "middle");
+            pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
+            break;
+          }
+
+         case "left":
+          {
+            tickTransform = d3_svg_axisY;
+            subtickEnter.attr("x2", -tickMinorSize);
+            subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
+            lineEnter.attr("x2", -tickMajorSize);
+            textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
+            lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0);
+            textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0);
+            text.attr("dy", ".32em").style("text-anchor", "end");
+            pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
+            break;
+          }
+
+         case "right":
+          {
+            tickTransform = d3_svg_axisY;
+            subtickEnter.attr("x2", tickMinorSize);
+            subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
+            lineEnter.attr("x2", tickMajorSize);
+            textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding);
+            lineUpdate.attr("x2", tickMajorSize).attr("y2", 0);
+            textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0);
+            text.attr("dy", ".32em").style("text-anchor", "start");
+            pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
+            break;
+          }
+        }
+        if (scale.ticks) {
+          tickEnter.call(tickTransform, scale0);
+          tickUpdate.call(tickTransform, scale1);
+          tickExit.call(tickTransform, scale1);
+          subtickEnter.call(tickTransform, scale0);
+          subtickUpdate.call(tickTransform, scale1);
+          subtickExit.call(tickTransform, scale1);
+        } else {
+          var dx = scale1.rangeBand() / 2, x = function(d) {
+            return scale1(d) + dx;
+          };
+          tickEnter.call(tickTransform, x);
+          tickUpdate.call(tickTransform, x);
+        }
+      });
+    }
+    axis.scale = function(x) {
+      if (!arguments.length) return scale;
+      scale = x;
+      return axis;
+    };
+    axis.orient = function(x) {
+      if (!arguments.length) return orient;
+      orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient;
+      return axis;
+    };
+    axis.ticks = function() {
+      if (!arguments.length) return tickArguments_;
+      tickArguments_ = arguments;
+      return axis;
+    };
+    axis.tickValues = function(x) {
+      if (!arguments.length) return tickValues;
+      tickValues = x;
+      return axis;
+    };
+    axis.tickFormat = function(x) {
+      if (!arguments.length) return tickFormat_;
+      tickFormat_ = x;
+      return axis;
+    };
+    axis.tickSize = function(x, y) {
+      if (!arguments.length) return tickMajorSize;
+      var n = arguments.length - 1;
+      tickMajorSize = +x;
+      tickMinorSize = n > 1 ? +y : tickMajorSize;
+      tickEndSize = n > 0 ? +arguments[n] : tickMajorSize;
+      return axis;
+    };
+    axis.tickPadding = function(x) {
+      if (!arguments.length) return tickPadding;
+      tickPadding = +x;
+      return axis;
+    };
+    axis.tickSubdivide = function(x) {
+      if (!arguments.length) return tickSubdivide;
+      tickSubdivide = +x;
+      return axis;
+    };
+    return axis;
+  };
+  var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = {
+    top: 1,
+    right: 1,
+    bottom: 1,
+    left: 1
+  };
+  function d3_svg_axisX(selection, x) {
+    selection.attr("transform", function(d) {
+      return "translate(" + x(d) + ",0)";
+    });
+  }
+  function d3_svg_axisY(selection, y) {
+    selection.attr("transform", function(d) {
+      return "translate(0," + y(d) + ")";
+    });
+  }
+  function d3_svg_axisSubdivide(scale, ticks, m) {
+    subticks = [];
+    if (m && ticks.length > 1) {
+      var extent = d3_scaleExtent(scale.domain()), subticks, i = -1, n = ticks.length, d = (ticks[1] - ticks[0]) / ++m, j, v;
+      while (++i < n) {
+        for (j = m; --j > 0; ) {
+          if ((v = +ticks[i] - j * d) >= extent[0]) {
+            subticks.push(v);
+          }
+        }
+      }
+      for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1]; ) {
+        subticks.push(v);
+      }
+    }
+    return subticks;
+  }
+  d3.svg.brush = function() {
+    var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, resizes = d3_svg_brushResizes[0], extent = [ [ 0, 0 ], [ 0, 0 ] ], extentDomain;
+    function brush(g) {
+      g.each(function() {
+        var g = d3.select(this), bg = g.selectAll(".background").data([ 0 ]), fg = g.selectAll(".extent").data([ 0 ]), tz = g.selectAll(".resize").data(resizes, String), e;
+        g.style("pointer-events", "all").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart);
+        bg.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair");
+        fg.enter().append("rect").attr("class", "extent").style("cursor", "move");
+        tz.enter().append("g").attr("class", function(d) {
+          return "resize " + d;
+        }).style("cursor", function(d) {
+          return d3_svg_brushCursor[d];
+        }).append("rect").attr("x", function(d) {
+          return /[ew]$/.test(d) ? -3 : null;
+        }).attr("y", function(d) {
+          return /^[ns]/.test(d) ? -3 : null;
+        }).attr("width", 6).attr("height", 6).style("visibility", "hidden");
+        tz.style("display", brush.empty() ? "none" : null);
+        tz.exit().remove();
+        if (x) {
+          e = d3_scaleRange(x);
+          bg.attr("x", e[0]).attr("width", e[1] - e[0]);
+          redrawX(g);
+        }
+        if (y) {
+          e = d3_scaleRange(y);
+          bg.attr("y", e[0]).attr("height", e[1] - e[0]);
+          redrawY(g);
+        }
+        redraw(g);
+      });
+    }
+    function redraw(g) {
+      g.selectAll(".resize").attr("transform", function(d) {
+        return "translate(" + extent[+/e$/.test(d)][0] + "," + extent[+/^s/.test(d)][1] + ")";
+      });
+    }
+    function redrawX(g) {
+      g.select(".extent").attr("x", extent[0][0]);
+      g.selectAll(".extent,.n>rect,.s>rect").attr("width", extent[1][0] - extent[0][0]);
+    }
+    function redrawY(g) {
+      g.select(".extent").attr("y", extent[0][1]);
+      g.selectAll(".extent,.e>rect,.w>rect").attr("height", extent[1][1] - extent[0][1]);
+    }
+    function brushstart() {
+      var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), center, origin = mouse(), offset;
+      var w = d3.select(d3_window).on("mousemove.brush", brushmove).on("mouseup.brush", brushend).on("touchmove.brush", brushmove).on("touchend.brush", brushend).on("keydown.brush", keydown).on("keyup.brush", keyup);
+      if (dragging) {
+        origin[0] = extent[0][0] - origin[0];
+        origin[1] = extent[0][1] - origin[1];
+      } else if (resizing) {
+        var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);
+        offset = [ extent[1 - ex][0] - origin[0], extent[1 - ey][1] - origin[1] ];
+        origin[0] = extent[ex][0];
+        origin[1] = extent[ey][1];
+      } else if (d3.event.altKey) center = origin.slice();
+      g.style("pointer-events", "none").selectAll(".resize").style("display", null);
+      d3.select("body").style("cursor", eventTarget.style("cursor"));
+      event_({
+        type: "brushstart"
+      });
+      brushmove();
+      d3_eventCancel();
+      function mouse() {
+        var touches = d3.event.changedTouches;
+        return touches ? d3.touches(target, touches)[0] : d3.mouse(target);
+      }
+      function keydown() {
+        if (d3.event.keyCode == 32) {
+          if (!dragging) {
+            center = null;
+            origin[0] -= extent[1][0];
+            origin[1] -= extent[1][1];
+            dragging = 2;
+          }
+          d3_eventCancel();
+        }
+      }
+      function keyup() {
+        if (d3.event.keyCode == 32 && dragging == 2) {
+          origin[0] += extent[1][0];
+          origin[1] += extent[1][1];
+          dragging = 0;
+          d3_eventCancel();
+        }
+      }
+      function brushmove() {
+        var point = mouse(), moved = false;
+        if (offset) {
+          point[0] += offset[0];
+          point[1] += offset[1];
+        }
+        if (!dragging) {
+          if (d3.event.altKey) {
+            if (!center) center = [ (extent[0][0] + extent[1][0]) / 2, (extent[0][1] + extent[1][1]) / 2 ];
+            origin[0] = extent[+(point[0] < center[0])][0];
+            origin[1] = extent[+(point[1] < center[1])][1];
+          } else center = null;
+        }
+        if (resizingX && move1(point, x, 0)) {
+          redrawX(g);
+          moved = true;
+        }
+        if (resizingY && move1(point, y, 1)) {
+          redrawY(g);
+          moved = true;
+        }
+        if (moved) {
+          redraw(g);
+          event_({
+            type: "brush",
+            mode: dragging ? "move" : "resize"
+          });
+        }
+      }
+      function move1(point, scale, i) {
+        var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], size = extent[1][i] - extent[0][i], min, max;
+        if (dragging) {
+          r0 -= position;
+          r1 -= size + position;
+        }
+        min = Math.max(r0, Math.min(r1, point[i]));
+        if (dragging) {
+          max = (min += position) + size;
+        } else {
+          if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
+          if (position < min) {
+            max = min;
+            min = position;
+          } else {
+            max = position;
+          }
+        }
+        if (extent[0][i] !== min || extent[1][i] !== max) {
+          extentDomain = null;
+          extent[0][i] = min;
+          extent[1][i] = max;
+          return true;
+        }
+      }
+      function brushend() {
+        brushmove();
+        g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
+        d3.select("body").style("cursor", null);
+        w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null);
+        event_({
+          type: "brushend"
+        });
+        d3_eventCancel();
+      }
+    }
+    brush.x = function(z) {
+      if (!arguments.length) return x;
+      x = z;
+      resizes = d3_svg_brushResizes[!x << 1 | !y];
+      return brush;
+    };
+    brush.y = function(z) {
+      if (!arguments.length) return y;
+      y = z;
+      resizes = d3_svg_brushResizes[!x << 1 | !y];
+      return brush;
+    };
+    brush.extent = function(z) {
+      var x0, x1, y0, y1, t;
+      if (!arguments.length) {
+        z = extentDomain || extent;
+        if (x) {
+          x0 = z[0][0], x1 = z[1][0];
+          if (!extentDomain) {
+            x0 = extent[0][0], x1 = extent[1][0];
+            if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
+            if (x1 < x0) t = x0, x0 = x1, x1 = t;
+          }
+        }
+        if (y) {
+          y0 = z[0][1], y1 = z[1][1];
+          if (!extentDomain) {
+            y0 = extent[0][1], y1 = extent[1][1];
+            if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
+            if (y1 < y0) t = y0, y0 = y1, y1 = t;
+          }
+        }
+        return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];
+      }
+      extentDomain = [ [ 0, 0 ], [ 0, 0 ] ];
+      if (x) {
+        x0 = z[0], x1 = z[1];
+        if (y) x0 = x0[0], x1 = x1[0];
+        extentDomain[0][0] = x0, extentDomain[1][0] = x1;
+        if (x.invert) x0 = x(x0), x1 = x(x1);
+        if (x1 < x0) t = x0, x0 = x1, x1 = t;
+        extent[0][0] = x0 | 0, extent[1][0] = x1 | 0;
+      }
+      if (y) {
+        y0 = z[0], y1 = z[1];
+        if (x) y0 = y0[1], y1 = y1[1];
+        extentDomain[0][1] = y0, extentDomain[1][1] = y1;
+        if (y.invert) y0 = y(y0), y1 = y(y1);
+        if (y1 < y0) t = y0, y0 = y1, y1 = t;
+        extent[0][1] = y0 | 0, extent[1][1] = y1 | 0;
+      }
+      return brush;
+    };
+    brush.clear = function() {
+      extentDomain = null;
+      extent[0][0] = extent[0][1] = extent[1][0] = extent[1][1] = 0;
+      return brush;
+    };
+    brush.empty = function() {
+      return x && extent[0][0] === extent[1][0] || y && extent[0][1] === extent[1][1];
+    };
+    return d3.rebind(brush, event, "on");
+  };
+  var d3_svg_brushCursor = {
+    n: "ns-resize",
+    e: "ew-resize",
+    s: "ns-resize",
+    w: "ew-resize",
+    nw: "nwse-resize",
+    ne: "nesw-resize",
+    se: "nwse-resize",
+    sw: "nesw-resize"
+  };
+  var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ];
+  d3.behavior = {};
+  d3.behavior.drag = function() {
+    var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null;
+    function drag() {
+      this.on("mousedown.drag", mousedown).on("touchstart.drag", mousedown);
+    }
+    function mousedown() {
+      var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null, offset, origin_ = point(), moved = 0;
+      var w = d3.select(d3_window).on(touchId != null ? "touchmove.drag-" + touchId : "mousemove.drag", dragmove).on(touchId != null ? "touchend.drag-" + touchId : "mouseup.drag", dragend, true);
+      if (origin) {
+        offset = origin.apply(target, arguments);
+        offset = [ offset.x - origin_[0], offset.y - origin_[1] ];
+      } else {
+        offset = [ 0, 0 ];
+      }
+      if (touchId == null) d3_eventCancel();
+      event_({
+        type: "dragstart"
+      });
+      function point() {
+        var p = target.parentNode;
+        return touchId != null ? d3.touches(p).filter(function(p) {
+          return p.identifier === touchId;
+        })[0] : d3.mouse(p);
+      }
+      function dragmove() {
+        if (!target.parentNode) return dragend();
+        var p = point(), dx = p[0] - origin_[0], dy = p[1] - origin_[1];
+        moved |= dx | dy;
+        origin_ = p;
+        d3_eventCancel();
+        event_({
+          type: "drag",
+          x: p[0] + offset[0],
+          y: p[1] + offset[1],
+          dx: dx,
+          dy: dy
+        });
+      }
+      function dragend() {
+        event_({
+          type: "dragend"
+        });
+        if (moved) {
+          d3_eventCancel();
+          if (d3.event.target === eventTarget) w.on("click.drag", click, true);
+        }
+        w.on(touchId != null ? "touchmove.drag-" + touchId : "mousemove.drag", null).on(touchId != null ? "touchend.drag-" + touchId : "mouseup.drag", null);
+      }
+      function click() {
+        d3_eventCancel();
+        w.on("click.drag", null);
+      }
+    }
+    drag.origin = function(x) {
+      if (!arguments.length) return origin;
+      origin = x;
+      return drag;
+    };
+    return d3.rebind(drag, event, "on");
+  };
+  d3.behavior.zoom = function() {
+    var translate = [ 0, 0 ], translate0, scale = 1, scale0, scaleExtent = d3_behavior_zoomInfinity, event = d3_eventDispatch(zoom, "zoom"), x0, x1, y0, y1, touchtime;
+    function zoom() {
+      this.on("mousedown.zoom", mousedown).on("mousemove.zoom", mousemove).on(d3_behavior_zoomWheel + ".zoom", mousewheel).on("dblclick.zoom", dblclick).on("touchstart.zoom", touchstart).on("touchmove.zoom", touchmove).on("touchend.zoom", touchstart);
+    }
+    zoom.translate = function(x) {
+      if (!arguments.length) return translate;
+      translate = x.map(Number);
+      rescale();
+      return zoom;
+    };
+    zoom.scale = function(x) {
+      if (!arguments.length) return scale;
+      scale = +x;
+      rescale();
+      return zoom;
+    };
+    zoom.scaleExtent = function(x) {
+      if (!arguments.length) return scaleExtent;
+      scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number);
+      return zoom;
+    };
+    zoom.x = function(z) {
+      if (!arguments.length) return x1;
+      x1 = z;
+      x0 = z.copy();
+      translate = [ 0, 0 ];
+      scale = 1;
+      return zoom;
+    };
+    zoom.y = function(z) {
+      if (!arguments.length) return y1;
+      y1 = z;
+      y0 = z.copy();
+      translate = [ 0, 0 ];
+      scale = 1;
+      return zoom;
+    };
+    function location(p) {
+      return [ (p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale ];
+    }
+    function point(l) {
+      return [ l[0] * scale + translate[0], l[1] * scale + translate[1] ];
+    }
+    function scaleTo(s) {
+      scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
+    }
+    function translateTo(p, l) {
+      l = point(l);
+      translate[0] += p[0] - l[0];
+      translate[1] += p[1] - l[1];
+    }
+    function rescale() {
+      if (x1) x1.domain(x0.range().map(function(x) {
+        return (x - translate[0]) / scale;
+      }).map(x0.invert));
+      if (y1) y1.domain(y0.range().map(function(y) {
+        return (y - translate[1]) / scale;
+      }).map(y0.invert));
+    }
+    function dispatch(event) {
+      rescale();
+      d3.event.preventDefault();
+      event({
+        type: "zoom",
+        scale: scale,
+        translate: translate
+      });
+    }
+    function mousedown() {
+      var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, moved = 0, w = d3.select(d3_window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), l = location(d3.mouse(target));
+      d3_window.focus();
+      d3_eventCancel();
+      function mousemove() {
+        moved = 1;
+        translateTo(d3.mouse(target), l);
+        dispatch(event_);
+      }
+      function mouseup() {
+        if (moved) d3_eventCancel();
+        w.on("mousemove.zoom", null).on("mouseup.zoom", null);
+        if (moved && d3.event.target === eventTarget) w.on("click.zoom", click, true);
+      }
+      function click() {
+        d3_eventCancel();
+        w.on("click.zoom", null);
+      }
+    }
+    function mousewheel() {
+      if (!translate0) translate0 = location(d3.mouse(this));
+      scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale);
+      translateTo(d3.mouse(this), translate0);
+      dispatch(event.of(this, arguments));
+    }
+    function mousemove() {
+      translate0 = null;
+    }
+    function dblclick() {
+      var p = d3.mouse(this), l = location(p), k = Math.log(scale) / Math.LN2;
+      scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
+      translateTo(p, l);
+      dispatch(event.of(this, arguments));
+    }
+    function touchstart() {
+      var touches = d3.touches(this), now = Date.now();
+      scale0 = scale;
+      translate0 = {};
+      touches.forEach(function(t) {
+        translate0[t.identifier] = location(t);
+      });
+      d3_eventCancel();
+      if (touches.length === 1) {
+        if (now - touchtime < 500) {
+          var p = touches[0], l = location(touches[0]);
+          scaleTo(scale * 2);
+          translateTo(p, l);
+          dispatch(event.of(this, arguments));
+        }
+        touchtime = now;
+      }
+    }
+    function touchmove() {
+      var touches = d3.touches(this), p0 = touches[0], l0 = translate0[p0.identifier];
+      if (p1 = touches[1]) {
+        var p1, l1 = translate0[p1.identifier];
+        p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];
+        l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];
+        scaleTo(d3.event.scale * scale0);
+      }
+      translateTo(p0, l0);
+      touchtime = null;
+      dispatch(event.of(this, arguments));
+    }
+    return d3.rebind(zoom, event, "on");
+  };
+  var d3_behavior_zoomInfinity = [ 0, Infinity ];
+  var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in document ? (d3_behavior_zoomDelta = function() {
+    return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
+  }, "wheel") : "onmousewheel" in document ? (d3_behavior_zoomDelta = function() {
+    return d3.event.wheelDelta;
+  }, "mousewheel") : (d3_behavior_zoomDelta = function() {
+    return -d3.event.detail;
+  }, "MozMousePixelScroll");
+  d3.layout = {};
+  d3.layout.bundle = function() {
+    return function(links) {
+      var paths = [], i = -1, n = links.length;
+      while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
+      return paths;
+    };
+  };
+  function d3_layout_bundlePath(link) {
+    var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];
+    while (start !== lca) {
+      start = start.parent;
+      points.push(start);
+    }
+    var k = points.length;
+    while (end !== lca) {
+      points.splice(k, 0, end);
+      end = end.parent;
+    }
+    return points;
+  }
+  function d3_layout_bundleAncestors(node) {
+    var ancestors = [], parent = node.parent;
+    while (parent != null) {
+      ancestors.push(node);
+      node = parent;
+      parent = parent.parent;
+    }
+    ancestors.push(node);
+    return ancestors;
+  }
+  function d3_layout_bundleLeastCommonAncestor(a, b) {
+    if (a === b) return a;
+    var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
+    while (aNode === bNode) {
+      sharedNode = aNode;
+      aNode = aNodes.pop();
+      bNode = bNodes.pop();
+    }
+    return sharedNode;
+  }
+  d3.layout.chord = function() {
+    var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;
+    function relayout() {
+      var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;
+      chords = [];
+      groups = [];
+      k = 0, i = -1;
+      while (++i < n) {
+        x = 0, j = -1;
+        while (++j < n) {
+          x += matrix[i][j];
+        }
+        groupSums.push(x);
+        subgroupIndex.push(d3.range(n));
+        k += x;
+      }
+      if (sortGroups) {
+        groupIndex.sort(function(a, b) {
+          return sortGroups(groupSums[a], groupSums[b]);
+        });
+      }
+      if (sortSubgroups) {
+        subgroupIndex.forEach(function(d, i) {
+          d.sort(function(a, b) {
+            return sortSubgroups(matrix[i][a], matrix[i][b]);
+          });
+        });
+      }
+      k = (2 * π - padding * n) / k;
+      x = 0, i = -1;
+      while (++i < n) {
+        x0 = x, j = -1;
+        while (++j < n) {
+          var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;
+          subgroups[di + "-" + dj] = {
+            index: di,
+            subindex: dj,
+            startAngle: a0,
+            endAngle: a1,
+            value: v
+          };
+        }
+        groups[di] = {
+          index: di,
+          startAngle: x0,
+          endAngle: x,
+          value: (x - x0) / k
+        };
+        x += padding;
+      }
+      i = -1;
+      while (++i < n) {
+        j = i - 1;
+        while (++j < n) {
+          var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i];
+          if (source.value || target.value) {
+            chords.push(source.value < target.value ? {
+              source: target,
+              target: source
+            } : {
+              source: source,
+              target: target
+            });
+          }
+        }
+      }
+      if (sortChords) resort();
+    }
+    function resort() {
+      chords.sort(function(a, b) {
+        return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);
+      });
+    }
+    chord.matrix = function(x) {
+      if (!arguments.length) return matrix;
+      n = (matrix = x) && matrix.length;
+      chords = groups = null;
+      return chord;
+    };
+    chord.padding = function(x) {
+      if (!arguments.length) return padding;
+      padding = x;
+      chords = groups = null;
+      return chord;
+    };
+    chord.sortGroups = function(x) {
+      if (!arguments.length) return sortGroups;
+      sortGroups = x;
+      chords = groups = null;
+      return chord;
+    };
+    chord.sortSubgroups = function(x) {
+      if (!arguments.length) return sortSubgroups;
+      sortSubgroups = x;
+      chords = null;
+      return chord;
+    };
+    chord.sortChords = function(x) {
+      if (!arguments.length) return sortChords;
+      sortChords = x;
+      if (chords) resort();
+      return chord;
+    };
+    chord.chords = function() {
+      if (!chords) relayout();
+      return chords;
+    };
+    chord.groups = function() {
+      if (!groups) relayout();
+      return groups;
+    };
+    return chord;
+  };
+  d3.layout.force = function() {
+    var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, gravity = .1, theta = .8, nodes = [], links = [], distances, strengths, charges;
+    function repulse(node) {
+      return function(quad, x1, _, x2) {
+        if (quad.point !== node) {
+          var dx = quad.cx - node.x, dy = quad.cy - node.y, dn = 1 / Math.sqrt(dx * dx + dy * dy);
+          if ((x2 - x1) * dn < theta) {
+            var k = quad.charge * dn * dn;
+            node.px -= dx * k;
+            node.py -= dy * k;
+            return true;
+          }
+          if (quad.point && isFinite(dn)) {
+            var k = quad.pointCharge * dn * dn;
+            node.px -= dx * k;
+            node.py -= dy * k;
+          }
+        }
+        return !quad.charge;
+      };
+    }
+    force.tick = function() {
+      if ((alpha *= .99) < .005) {
+        event.end({
+          type: "end",
+          alpha: alpha = 0
+        });
+        return true;
+      }
+      var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;
+      for (i = 0; i < m; ++i) {
+        o = links[i];
+        s = o.source;
+        t = o.target;
+        x = t.x - s.x;
+        y = t.y - s.y;
+        if (l = x * x + y * y) {
+          l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
+          x *= l;
+          y *= l;
+          t.x -= x * (k = s.weight / (t.weight + s.weight));
+          t.y -= y * k;
+          s.x += x * (k = 1 - k);
+          s.y += y * k;
+        }
+      }
+      if (k = alpha * gravity) {
+        x = size[0] / 2;
+        y = size[1] / 2;
+        i = -1;
+        if (k) while (++i < n) {
+          o = nodes[i];
+          o.x += (x - o.x) * k;
+          o.y += (y - o.y) * k;
+        }
+      }
+      if (charge) {
+        d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
+        i = -1;
+        while (++i < n) {
+          if (!(o = nodes[i]).fixed) {
+            q.visit(repulse(o));
+          }
+        }
+      }
+      i = -1;
+      while (++i < n) {
+        o = nodes[i];
+        if (o.fixed) {
+          o.x = o.px;
+          o.y = o.py;
+        } else {
+          o.x -= (o.px - (o.px = o.x)) * friction;
+          o.y -= (o.py - (o.py = o.y)) * friction;
+        }
+      }
+      event.tick({
+        type: "tick",
+        alpha: alpha
+      });
+    };
+    force.nodes = function(x) {
+      if (!arguments.length) return nodes;
+      nodes = x;
+      return force;
+    };
+    force.links = function(x) {
+      if (!arguments.length) return links;
+      links = x;
+      return force;
+    };
+    force.size = function(x) {
+      if (!arguments.length) return size;
+      size = x;
+      return force;
+    };
+    force.linkDistance = function(x) {
+      if (!arguments.length) return linkDistance;
+      linkDistance = typeof x === "function" ? x : +x;
+      return force;
+    };
+    force.distance = force.linkDistance;
+    force.linkStrength = function(x) {
+      if (!arguments.length) return linkStrength;
+      linkStrength = typeof x === "function" ? x : +x;
+      return force;
+    };
+    force.friction = function(x) {
+      if (!arguments.length) return friction;
+      friction = +x;
+      return force;
+    };
+    force.charge = function(x) {
+      if (!arguments.length) return charge;
+      charge = typeof x === "function" ? x : +x;
+      return force;
+    };
+    force.gravity = function(x) {
+      if (!arguments.length) return gravity;
+      gravity = +x;
+      return force;
+    };
+    force.theta = function(x) {
+      if (!arguments.length) return theta;
+      theta = +x;
+      return force;
+    };
+    force.alpha = function(x) {
+      if (!arguments.length) return alpha;
+      x = +x;
+      if (alpha) {
+        if (x > 0) alpha = x; else alpha = 0;
+      } else if (x > 0) {
+        event.start({
+          type: "start",
+          alpha: alpha = x
+        });
+        d3.timer(force.tick);
+      }
+      return force;
+    };
+    force.start = function() {
+      var i, j, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;
+      for (i = 0; i < n; ++i) {
+        (o = nodes[i]).index = i;
+        o.weight = 0;
+      }
+      for (i = 0; i < m; ++i) {
+        o = links[i];
+        if (typeof o.source == "number") o.source = nodes[o.source];
+        if (typeof o.target == "number") o.target = nodes[o.target];
+        ++o.source.weight;
+        ++o.target.weight;
+      }
+      for (i = 0; i < n; ++i) {
+        o = nodes[i];
+        if (isNaN(o.x)) o.x = position("x", w);
+        if (isNaN(o.y)) o.y = position("y", h);
+        if (isNaN(o.px)) o.px = o.x;
+        if (isNaN(o.py)) o.py = o.y;
+      }
+      distances = [];
+      if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;
+      strengths = [];
+      if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;
+      charges = [];
+      if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;
+      function position(dimension, size) {
+        var neighbors = neighbor(i), j = -1, m = neighbors.length, x;
+        while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
+        return Math.random() * size;
+      }
+      function neighbor() {
+        if (!neighbors) {
+          neighbors = [];
+          for (j = 0; j < n; ++j) {
+            neighbors[j] = [];
+          }
+          for (j = 0; j < m; ++j) {
+            var o = links[j];
+            neighbors[o.source.index].push(o.target);
+            neighbors[o.target.index].push(o.source);
+          }
+        }
+        return neighbors[i];
+      }
+      return force.resume();
+    };
+    force.resume = function() {
+      return force.alpha(.1);
+    };
+    force.stop = function() {
+      return force.alpha(0);
+    };
+    force.drag = function() {
+      if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend);
+      if (!arguments.length) return drag;
+      this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag);
+    };
+    function dragmove(d) {
+      d.px = d3.event.x, d.py = d3.event.y;
+      force.resume();
+    }
+    return d3.rebind(force, event, "on");
+  };
+  function d3_layout_forceDragstart(d) {
+    d.fixed |= 2;
+  }
+  function d3_layout_forceDragend(d) {
+    d.fixed &= ~6;
+  }
+  function d3_layout_forceMouseover(d) {
+    d.fixed |= 4;
+    d.px = d.x, d.py = d.y;
+  }
+  function d3_layout_forceMouseout(d) {
+    d.fixed &= ~4;
+  }
+  function d3_layout_forceAccumulate(quad, alpha, charges) {
+    var cx = 0, cy = 0;
+    quad.charge = 0;
+    if (!quad.leaf) {
+      var nodes = quad.nodes, n = nodes.length, i = -1, c;
+      while (++i < n) {
+        c = nodes[i];
+        if (c == null) continue;
+        d3_layout_forceAccumulate(c, alpha, charges);
+        quad.charge += c.charge;
+        cx += c.charge * c.cx;
+        cy += c.charge * c.cy;
+      }
+    }
+    if (quad.point) {
+      if (!quad.leaf) {
+        quad.point.x += Math.random() - .5;
+        quad.point.y += Math.random() - .5;
+      }
+      var k = alpha * charges[quad.point.index];
+      quad.charge += quad.pointCharge = k;
+      cx += k * quad.point.x;
+      cy += k * quad.point.y;
+    }
+    quad.cx = cx / quad.charge;
+    quad.cy = cy / quad.charge;
+  }
+  var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1;
+  d3.layout.partition = function() {
+    var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];
+    function position(node, x, dx, dy) {
+      var children = node.children;
+      node.x = x;
+      node.y = node.depth * dy;
+      node.dx = dx;
+      node.dy = dy;
+      if (children && (n = children.length)) {
+        var i = -1, n, c, d;
+        dx = node.value ? dx / node.value : 0;
+        while (++i < n) {
+          position(c = children[i], x, d = c.value * dx, dy);
+          x += d;
+        }
+      }
+    }
+    function depth(node) {
+      var children = node.children, d = 0;
+      if (children && (n = children.length)) {
+        var i = -1, n;
+        while (++i < n) d = Math.max(d, depth(children[i]));
+      }
+      return 1 + d;
+    }
+    function partition(d, i) {
+      var nodes = hierarchy.call(this, d, i);
+      position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
+      return nodes;
+    }
+    partition.size = function(x) {
+      if (!arguments.length) return size;
+      size = x;
+      return partition;
+    };
+    return d3_layout_hierarchyRebind(partition, hierarchy);
+  };
+  d3.layout.pie = function() {
+    var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = 2 * π;
+    function pie(data) {
+      var values = data.map(function(d, i) {
+        return +value.call(pie, d, i);
+      });
+      var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle);
+      var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - startAngle) / d3.sum(values);
+      var index = d3.range(data.length);
+      if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
+        return values[j] - values[i];
+      } : function(i, j) {
+        return sort(data[i], data[j]);
+      });
+      var arcs = [];
+      index.forEach(function(i) {
+        var d;
+        arcs[i] = {
+          data: data[i],
+          value: d = values[i],
+          startAngle: a,
+          endAngle: a += d * k
+        };
+      });
+      return arcs;
+    }
+    pie.value = function(x) {
+      if (!arguments.length) return value;
+      value = x;
+      return pie;
+    };
+    pie.sort = function(x) {
+      if (!arguments.length) return sort;
+      sort = x;
+      return pie;
+    };
+    pie.startAngle = function(x) {
+      if (!arguments.length) return startAngle;
+      startAngle = x;
+      return pie;
+    };
+    pie.endAngle = function(x) {
+      if (!arguments.length) return endAngle;
+      endAngle = x;
+      return pie;
+    };
+    return pie;
+  };
+  var d3_layout_pieSortByValue = {};
+  d3.layout.stack = function() {
+    var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
+    function stack(data, index) {
+      var series = data.map(function(d, i) {
+        return values.call(stack, d, i);
+      });
+      var points = series.map(function(d) {
+        return d.map(function(v, i) {
+          return [ x.call(stack, v, i), y.call(stack, v, i) ];
+        });
+      });
+      var orders = order.call(stack, points, index);
+      series = d3.permute(series, orders);
+      points = d3.permute(points, orders);
+      var offsets = offset.call(stack, points, index);
+      var n = series.length, m = series[0].length, i, j, o;
+      for (j = 0; j < m; ++j) {
+        out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
+        for (i = 1; i < n; ++i) {
+          out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
+        }
+      }
+      return data;
+    }
+    stack.values = function(x) {
+      if (!arguments.length) return values;
+      values = x;
+      return stack;
+    };
+    stack.order = function(x) {
+      if (!arguments.length) return order;
+      order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
+      return stack;
+    };
+    stack.offset = function(x) {
+      if (!arguments.length) return offset;
+      offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
+      return stack;
+    };
+    stack.x = function(z) {
+      if (!arguments.length) return x;
+      x = z;
+      return stack;
+    };
+    stack.y = function(z) {
+      if (!arguments.length) return y;
+      y = z;
+      return stack;
+    };
+    stack.out = function(z) {
+      if (!arguments.length) return out;
+      out = z;
+      return stack;
+    };
+    return stack;
+  };
+  function d3_layout_stackX(d) {
+    return d.x;
+  }
+  function d3_layout_stackY(d) {
+    return d.y;
+  }
+  function d3_layout_stackOut(d, y0, y) {
+    d.y0 = y0;
+    d.y = y;
+  }
+  var d3_layout_stackOrders = d3.map({
+    "inside-out": function(data) {
+      var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {
+        return max[a] - max[b];
+      }), top = 0, bottom = 0, tops = [], bottoms = [];
+      for (i = 0; i < n; ++i) {
+        j = index[i];
+        if (top < bottom) {
+          top += sums[j];
+          tops.push(j);
+        } else {
+          bottom += sums[j];
+          bottoms.push(j);
+        }
+      }
+      return bottoms.reverse().concat(tops);
+    },
+    reverse: function(data) {
+      return d3.range(data.length).reverse();
+    },
+    "default": d3_layout_stackOrderDefault
+  });
+  var d3_layout_stackOffsets = d3.map({
+    silhouette: function(data) {
+      var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];
+      for (j = 0; j < m; ++j) {
+        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+        if (o > max) max = o;
+        sums.push(o);
+      }
+      for (j = 0; j < m; ++j) {
+        y0[j] = (max - sums[j]) / 2;
+      }
+      return y0;
+    },
+    wiggle: function(data) {
+      var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];
+      y0[0] = o = o0 = 0;
+      for (j = 1; j < m; ++j) {
+        for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
+        for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
+          for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
+            s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
+          }
+          s2 += s3 * data[i][j][1];
+        }
+        y0[j] = o -= s1 ? s2 / s1 * dx : 0;
+        if (o < o0) o0 = o;
+      }
+      for (j = 0; j < m; ++j) y0[j] -= o0;
+      return y0;
+    },
+    expand: function(data) {
+      var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];
+      for (j = 0; j < m; ++j) {
+        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+        if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;
+      }
+      for (j = 0; j < m; ++j) y0[j] = 0;
+      return y0;
+    },
+    zero: d3_layout_stackOffsetZero
+  });
+  function d3_layout_stackOrderDefault(data) {
+    return d3.range(data.length);
+  }
+  function d3_layout_stackOffsetZero(data) {
+    var j = -1, m = data[0].length, y0 = [];
+    while (++j < m) y0[j] = 0;
+    return y0;
+  }
+  function d3_layout_stackMaxIndex(array) {
+    var i = 1, j = 0, v = array[0][1], k, n = array.length;
+    for (;i < n; ++i) {
+      if ((k = array[i][1]) > v) {
+        j = i;
+        v = k;
+      }
+    }
+    return j;
+  }
+  function d3_layout_stackReduceSum(d) {
+    return d.reduce(d3_layout_stackSum, 0);
+  }
+  function d3_layout_stackSum(p, d) {
+    return p + d[1];
+  }
+  d3.layout.histogram = function() {
+    var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;
+    function histogram(data, i) {
+      var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;
+      while (++i < m) {
+        bin = bins[i] = [];
+        bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
+        bin.y = 0;
+      }
+      if (m > 0) {
+        i = -1;
+        while (++i < n) {
+          x = values[i];
+          if (x >= range[0] && x <= range[1]) {
+            bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
+            bin.y += k;
+            bin.push(data[i]);
+          }
+        }
+      }
+      return bins;
+    }
+    histogram.value = function(x) {
+      if (!arguments.length) return valuer;
+      valuer = x;
+      return histogram;
+    };
+    histogram.range = function(x) {
+      if (!arguments.length) return ranger;
+      ranger = d3_functor(x);
+      return histogram;
+    };
+    histogram.bins = function(x) {
+      if (!arguments.length) return binner;
+      binner = typeof x === "number" ? function(range) {
+        return d3_layout_histogramBinFixed(range, x);
+      } : d3_functor(x);
+      return histogram;
+    };
+    histogram.frequency = function(x) {
+      if (!arguments.length) return frequency;
+      frequency = !!x;
+      return histogram;
+    };
+    return histogram;
+  };
+  function d3_layout_histogramBinSturges(range, values) {
+    return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
+  }
+  function d3_layout_histogramBinFixed(range, n) {
+    var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
+    while (++x <= n) f[x] = m * x + b;
+    return f;
+  }
+  function d3_layout_histogramRange(values) {
+    return [ d3.min(values), d3.max(values) ];
+  }
+  d3.layout.hierarchy = function() {
+    var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
+    function recurse(node, depth, nodes) {
+      var childs = children.call(hierarchy, node, depth);
+      node.depth = depth;
+      nodes.push(node);
+      if (childs && (n = childs.length)) {
+        var i = -1, n, c = node.children = [], v = 0, j = depth + 1, d;
+        while (++i < n) {
+          d = recurse(childs[i], j, nodes);
+          d.parent = node;
+          c.push(d);
+          v += d.value;
+        }
+        if (sort) c.sort(sort);
+        if (value) node.value = v;
+      } else if (value) {
+        node.value = +value.call(hierarchy, node, depth) || 0;
+      }
+      return node;
+    }
+    function revalue(node, depth) {
+      var children = node.children, v = 0;
+      if (children && (n = children.length)) {
+        var i = -1, n, j = depth + 1;
+        while (++i < n) v += revalue(children[i], j);
+      } else if (value) {
+        v = +value.call(hierarchy, node, depth) || 0;
+      }
+      if (value) node.value = v;
+      return v;
+    }
+    function hierarchy(d) {
+      var nodes = [];
+      recurse(d, 0, nodes);
+      return nodes;
+    }
+    hierarchy.sort = function(x) {
+      if (!arguments.length) return sort;
+      sort = x;
+      return hierarchy;
+    };
+    hierarchy.children = function(x) {
+      if (!arguments.length) return children;
+      children = x;
+      return hierarchy;
+    };
+    hierarchy.value = function(x) {
+      if (!arguments.length) return value;
+      value = x;
+      return hierarchy;
+    };
+    hierarchy.revalue = function(root) {
+      revalue(root, 0);
+      return root;
+    };
+    return hierarchy;
+  };
+  function d3_layout_hierarchyRebind(object, hierarchy) {
+    d3.rebind(object, hierarchy, "sort", "children", "value");
+    object.nodes = object;
+    object.links = d3_layout_hierarchyLinks;
+    return object;
+  }
+  function d3_layout_hierarchyChildren(d) {
+    return d.children;
+  }
+  function d3_layout_hierarchyValue(d) {
+    return d.value;
+  }
+  function d3_layout_hierarchySort(a, b) {
+    return b.value - a.value;
+  }
+  function d3_layout_hierarchyLinks(nodes) {
+    return d3.merge(nodes.map(function(parent) {
+      return (parent.children || []).map(function(child) {
+        return {
+          source: parent,
+          target: child
+        };
+      });
+    }));
+  }
+  d3.layout.pack = function() {
+    var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ];
+    function pack(d, i) {
+      var nodes = hierarchy.call(this, d, i), root = nodes[0];
+      root.x = 0;
+      root.y = 0;
+      d3_layout_treeVisitAfter(root, function(d) {
+        d.r = Math.sqrt(d.value);
+      });
+      d3_layout_treeVisitAfter(root, d3_layout_packSiblings);
+      var w = size[0], h = size[1], k = Math.max(2 * root.r / w, 2 * root.r / h);
+      if (padding > 0) {
+        var dr = padding * k / 2;
+        d3_layout_treeVisitAfter(root, function(d) {
+          d.r += dr;
+        });
+        d3_layout_treeVisitAfter(root, d3_layout_packSiblings);
+        d3_layout_treeVisitAfter(root, function(d) {
+          d.r -= dr;
+        });
+        k = Math.max(2 * root.r / w, 2 * root.r / h);
+      }
+      d3_layout_packTransform(root, w / 2, h / 2, 1 / k);
+      return nodes;
+    }
+    pack.size = function(x) {
+      if (!arguments.length) return size;
+      size = x;
+      return pack;
+    };
+    pack.padding = function(_) {
+      if (!arguments.length) return padding;
+      padding = +_;
+      return pack;
+    };
+    return d3_layout_hierarchyRebind(pack, hierarchy);
+  };
+  function d3_layout_packSort(a, b) {
+    return a.value - b.value;
+  }
+  function d3_layout_packInsert(a, b) {
+    var c = a._pack_next;
+    a._pack_next = b;
+    b._pack_prev = a;
+    b._pack_next = c;
+    c._pack_prev = b;
+  }
+  function d3_layout_packSplice(a, b) {
+    a._pack_next = b;
+    b._pack_prev = a;
+  }
+  function d3_layout_packIntersects(a, b) {
+    var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
+    return dr * dr - dx * dx - dy * dy > .001;
+  }
+  function d3_layout_packSiblings(node) {
+    if (!(nodes = node.children) || !(n = nodes.length)) return;
+    var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
+    function bound(node) {
+      xMin = Math.min(node.x - node.r, xMin);
+      xMax = Math.max(node.x + node.r, xMax);
+      yMin = Math.min(node.y - node.r, yMin);
+      yMax = Math.max(node.y + node.r, yMax);
+    }
+    nodes.forEach(d3_layout_packLink);
+    a = nodes[0];
+    a.x = -a.r;
+    a.y = 0;
+    bound(a);
+    if (n > 1) {
+      b = nodes[1];
+      b.x = b.r;
+      b.y = 0;
+      bound(b);
+      if (n > 2) {
+        c = nodes[2];
+        d3_layout_packPlace(a, b, c);
+        bound(c);
+        d3_layout_packInsert(a, c);
+        a._pack_prev = c;
+        d3_layout_packInsert(c, b);
+        b = a._pack_next;
+        for (i = 3; i < n; i++) {
+          d3_layout_packPlace(a, b, c = nodes[i]);
+          var isect = 0, s1 = 1, s2 = 1;
+          for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
+            if (d3_layout_packIntersects(j, c)) {
+              isect = 1;
+              break;
+            }
+          }
+          if (isect == 1) {
+            for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
+              if (d3_layout_packIntersects(k, c)) {
+                break;
+              }
+            }
+          }
+          if (isect) {
+            if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
+            i--;
+          } else {
+            d3_layout_packInsert(a, c);
+            b = c;
+            bound(c);
+          }
+        }
+      }
+    }
+    var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
+    for (i = 0; i < n; i++) {
+      c = nodes[i];
+      c.x -= cx;
+      c.y -= cy;
+      cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
+    }
+    node.r = cr;
+    nodes.forEach(d3_layout_packUnlink);
+  }
+  function d3_layout_packLink(node) {
+    node._pack_next = node._pack_prev = node;
+  }
+  function d3_layout_packUnlink(node) {
+    delete node._pack_next;
+    delete node._pack_prev;
+  }
+  function d3_layout_packTransform(node, x, y, k) {
+    var children = node.children;
+    node.x = x += k * node.x;
+    node.y = y += k * node.y;
+    node.r *= k;
+    if (children) {
+      var i = -1, n = children.length;
+      while (++i < n) d3_layout_packTransform(children[i], x, y, k);
+    }
+  }
+  function d3_layout_packPlace(a, b, c) {
+    var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
+    if (db && (dx || dy)) {
+      var da = b.r + c.r, dc = dx * dx + dy * dy;
+      da *= da;
+      db *= db;
+      var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
+      c.x = a.x + x * dx + y * dy;
+      c.y = a.y + x * dy - y * dx;
+    } else {
+      c.x = a.x + db;
+      c.y = a.y;
+    }
+  }
+  d3.layout.cluster = function() {
+    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ];
+    function cluster(d, i) {
+      var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
+      d3_layout_treeVisitAfter(root, function(node) {
+        var children = node.children;
+        if (children && children.length) {
+          node.x = d3_layout_clusterX(children);
+          node.y = d3_layout_clusterY(children);
+        } else {
+          node.x = previousNode ? x += separation(node, previousNode) : 0;
+          node.y = 0;
+          previousNode = node;
+        }
+      });
+      var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
+      d3_layout_treeVisitAfter(root, function(node) {
+        node.x = (node.x - x0) / (x1 - x0) * size[0];
+        node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
+      });
+      return nodes;
+    }
+    cluster.separation = function(x) {
+      if (!arguments.length) return separation;
+      separation = x;
+      return cluster;
+    };
+    cluster.size = function(x) {
+      if (!arguments.length) return size;
+      size = x;
+      return cluster;
+    };
+    return d3_layout_hierarchyRebind(cluster, hierarchy);
+  };
+  function d3_layout_clusterY(children) {
+    return 1 + d3.max(children, function(child) {
+      return child.y;
+    });
+  }
+  function d3_layout_clusterX(children) {
+    return children.reduce(function(x, child) {
+      return x + child.x;
+    }, 0) / children.length;
+  }
+  function d3_layout_clusterLeft(node) {
+    var children = node.children;
+    return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
+  }
+  function d3_layout_clusterRight(node) {
+    var children = node.children, n;
+    return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
+  }
+  d3.layout.tree = function() {
+    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ];
+    function tree(d, i) {
+      var nodes = hierarchy.call(this, d, i), root = nodes[0];
+      function firstWalk(node, previousSibling) {
+        var children = node.children, layout = node._tree;
+        if (children && (n = children.length)) {
+          var n, firstChild = children[0], previousChild, ancestor = firstChild, child, i = -1;
+          while (++i < n) {
+            child = children[i];
+            firstWalk(child, previousChild);
+            ancestor = apportion(child, previousChild, ancestor);
+            previousChild = child;
+          }
+          d3_layout_treeShift(node);
+          var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
+          if (previousSibling) {
+            layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+            layout.mod = layout.prelim - midpoint;
+          } else {
+            layout.prelim = midpoint;
+          }
+        } else {
+          if (previousSibling) {
+            layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+          }
+        }
+      }
+      function secondWalk(node, x) {
+        node.x = node._tree.prelim + x;
+        var children = node.children;
+        if (children && (n = children.length)) {
+          var i = -1, n;
+          x += node._tree.mod;
+          while (++i < n) {
+            secondWalk(children[i], x);
+          }
+        }
+      }
+      function apportion(node, previousSibling, ancestor) {
+        if (previousSibling) {
+          var vip = node, vop = node, vim = previousSibling, vom = node.parent.children[0], sip = vip._tree.mod, sop = vop._tree.mod, sim = vim._tree.mod, som = vom._tree.mod, shift;
+          while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
+            vom = d3_layout_treeLeft(vom);
+            vop = d3_layout_treeRight(vop);
+            vop._tree.ancestor = node;
+            shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
+            if (shift > 0) {
+              d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
+              sip += shift;
+              sop += shift;
+            }
+            sim += vim._tree.mod;
+            sip += vip._tree.mod;
+            som += vom._tree.mod;
+            sop += vop._tree.mod;
+          }
+          if (vim && !d3_layout_treeRight(vop)) {
+            vop._tree.thread = vim;
+            vop._tree.mod += sim - sop;
+          }
+          if (vip && !d3_layout_treeLeft(vom)) {
+            vom._tree.thread = vip;
+            vom._tree.mod += sip - som;
+            ancestor = node;
+          }
+        }
+        return ancestor;
+      }
+      d3_layout_treeVisitAfter(root, function(node, previousSibling) {
+        node._tree = {
+          ancestor: node,
+          prelim: 0,
+          mod: 0,
+          change: 0,
+          shift: 0,
+          number: previousSibling ? previousSibling._tree.number + 1 : 0
+        };
+      });
+      firstWalk(root);
+      secondWalk(root, -root._tree.prelim);
+      var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), right = d3_layout_treeSearch(root, d3_layout_treeRightmost), deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2, y1 = deep.depth || 1;
+      d3_layout_treeVisitAfter(root, function(node) {
+        node.x = (node.x - x0) / (x1 - x0) * size[0];
+        node.y = node.depth / y1 * size[1];
+        delete node._tree;
+      });
+      return nodes;
+    }
+    tree.separation = function(x) {
+      if (!arguments.length) return separation;
+      separation = x;
+      return tree;
+    };
+    tree.size = function(x) {
+      if (!arguments.length) return size;
+      size = x;
+      return tree;
+    };
+    return d3_layout_hierarchyRebind(tree, hierarchy);
+  };
+  function d3_layout_treeSeparation(a, b) {
+    return a.parent == b.parent ? 1 : 2;
+  }
+  function d3_layout_treeLeft(node) {
+    var children = node.children;
+    return children && children.length ? children[0] : node._tree.thread;
+  }
+  function d3_layout_treeRight(node) {
+    var children = node.children, n;
+    return children && (n = children.length) ? children[n - 1] : node._tree.thread;
+  }
+  function d3_layout_treeSearch(node, compare) {
+    var children = node.children;
+    if (children && (n = children.length)) {
+      var child, n, i = -1;
+      while (++i < n) {
+        if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
+          node = child;
+        }
+      }
+    }
+    return node;
+  }
+  function d3_layout_treeRightmost(a, b) {
+    return a.x - b.x;
+  }
+  function d3_layout_treeLeftmost(a, b) {
+    return b.x - a.x;
+  }
+  function d3_layout_treeDeepest(a, b) {
+    return a.depth - b.depth;
+  }
+  function d3_layout_treeVisitAfter(node, callback) {
+    function visit(node, previousSibling) {
+      var children = node.children;
+      if (children && (n = children.length)) {
+        var child, previousChild = null, i = -1, n;
+        while (++i < n) {
+          child = children[i];
+          visit(child, previousChild);
+          previousChild = child;
+        }
+      }
+      callback(node, previousSibling);
+    }
+    visit(node, null);
+  }
+  function d3_layout_treeShift(node) {
+    var shift = 0, change = 0, children = node.children, i = children.length, child;
+    while (--i >= 0) {
+      child = children[i]._tree;
+      child.prelim += shift;
+      child.mod += shift;
+      shift += child.shift + (change += child.change);
+    }
+  }
+  function d3_layout_treeMove(ancestor, node, shift) {
+    ancestor = ancestor._tree;
+    node = node._tree;
+    var change = shift / (node.number - ancestor.number);
+    ancestor.change += change;
+    node.change -= change;
+    node.shift += shift;
+    node.prelim += shift;
+    node.mod += shift;
+  }
+  function d3_layout_treeAncestor(vim, node, ancestor) {
+    return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor;
+  }
+  d3.layout.treemap = function() {
+    var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5));
+    function scale(children, k) {
+      var i = -1, n = children.length, child, area;
+      while (++i < n) {
+        area = (child = children[i]).value * (k < 0 ? 0 : k);
+        child.area = isNaN(area) || area <= 0 ? 0 : area;
+      }
+    }
+    function squarify(node) {
+      var children = node.children;
+      if (children && children.length) {
+        var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;
+        scale(remaining, rect.dx * rect.dy / node.value);
+        row.area = 0;
+        while ((n = remaining.length) > 0) {
+          row.push(child = remaining[n - 1]);
+          row.area += child.area;
+          if (mode !== "squarify" || (score = worst(row, u)) <= best) {
+            remaining.pop();
+            best = score;
+          } else {
+            row.area -= row.pop().area;
+            position(row, u, rect, false);
+            u = Math.min(rect.dx, rect.dy);
+            row.length = row.area = 0;
+            best = Infinity;
+          }
+        }
+        if (row.length) {
+          position(row, u, rect, true);
+          row.length = row.area = 0;
+        }
+        children.forEach(squarify);
+      }
+    }
+    function stickify(node) {
+      var children = node.children;
+      if (children && children.length) {
+        var rect = pad(node), remaining = children.slice(), child, row = [];
+        scale(remaining, rect.dx * rect.dy / node.value);
+        row.area = 0;
+        while (child = remaining.pop()) {
+          row.push(child);
+          row.area += child.area;
+          if (child.z != null) {
+            position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
+            row.length = row.area = 0;
+          }
+        }
+        children.forEach(stickify);
+      }
+    }
+    function worst(row, u) {
+      var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;
+      while (++i < n) {
+        if (!(r = row[i].area)) continue;
+        if (r < rmin) rmin = r;
+        if (r > rmax) rmax = r;
+      }
+      s *= s;
+      u *= u;
+      return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;
+    }
+    function position(row, u, rect, flush) {
+      var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;
+      if (u == rect.dx) {
+        if (flush || v > rect.dy) v = rect.dy;
+        while (++i < n) {
+          o = row[i];
+          o.x = x;
+          o.y = y;
+          o.dy = v;
+          x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
+        }
+        o.z = true;
+        o.dx += rect.x + rect.dx - x;
+        rect.y += v;
+        rect.dy -= v;
+      } else {
+        if (flush || v > rect.dx) v = rect.dx;
+        while (++i < n) {
+          o = row[i];
+          o.x = x;
+          o.y = y;
+          o.dx = v;
+          y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
+        }
+        o.z = false;
+        o.dy += rect.y + rect.dy - y;
+        rect.x += v;
+        rect.dx -= v;
+      }
+    }
+    function treemap(d) {
+      var nodes = stickies || hierarchy(d), root = nodes[0];
+      root.x = 0;
+      root.y = 0;
+      root.dx = size[0];
+      root.dy = size[1];
+      if (stickies) hierarchy.revalue(root);
+      scale([ root ], root.dx * root.dy / root.value);
+      (stickies ? stickify : squarify)(root);
+      if (sticky) stickies = nodes;
+      return nodes;
+    }
+    treemap.size = function(x) {
+      if (!arguments.length) return size;
+      size = x;
+      return treemap;
+    };
+    treemap.padding = function(x) {
+      if (!arguments.length) return padding;
+      function padFunction(node) {
+        var p = x.call(treemap, node, node.depth);
+        return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p);
+      }
+      function padConstant(node) {
+        return d3_layout_treemapPad(node, x);
+      }
+      var type;
+      pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ],
+      padConstant) : padConstant;
+      return treemap;
+    };
+    treemap.round = function(x) {
+      if (!arguments.length) return round != Number;
+      round = x ? Math.round : Number;
+      return treemap;
+    };
+    treemap.sticky = function(x) {
+      if (!arguments.length) return sticky;
+      sticky = x;
+      stickies = null;
+      return treemap;
+    };
+    treemap.ratio = function(x) {
+      if (!arguments.length) return ratio;
+      ratio = x;
+      return treemap;
+    };
+    treemap.mode = function(x) {
+      if (!arguments.length) return mode;
+      mode = x + "";
+      return treemap;
+    };
+    return d3_layout_hierarchyRebind(treemap, hierarchy);
+  };
+  function d3_layout_treemapPadNull(node) {
+    return {
+      x: node.x,
+      y: node.y,
+      dx: node.dx,
+      dy: node.dy
+    };
+  }
+  function d3_layout_treemapPad(node, padding) {
+    var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
+    if (dx < 0) {
+      x += dx / 2;
+      dx = 0;
+    }
+    if (dy < 0) {
+      y += dy / 2;
+      dy = 0;
+    }
+    return {
+      x: x,
+      y: y,
+      dx: dx,
+      dy: dy
+    };
+  }
+  function d3_dsv(delimiter, mimeType) {
+    var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
+    function dsv(url, callback) {
+      return d3.xhr(url, mimeType, callback).response(response);
+    }
+    function response(request) {
+      return dsv.parse(request.responseText);
+    }
+    dsv.parse = function(text) {
+      var o;
+      return dsv.parseRows(text, function(row) {
+        if (o) return o(row);
+        o = new Function("d", "return {" + row.map(function(name, i) {
+          return JSON.stringify(name) + ": d[" + i + "]";
+        }).join(",") + "}");
+      });
+    };
+    dsv.parseRows = function(text, f) {
+      var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;
+      function token() {
+        if (I >= N) return EOF;
+        if (eol) return eol = false, EOL;
+        var j = I;
+        if (text.charCodeAt(j) === 34) {
+          var i = j;
+          while (i++ < N) {
+            if (text.charCodeAt(i) === 34) {
+              if (text.charCodeAt(i + 1) !== 34) break;
+              ++i;
+            }
+          }
+          I = i + 2;
+          var c = text.charCodeAt(i + 1);
+          if (c === 13) {
+            eol = true;
+            if (text.charCodeAt(i + 2) === 10) ++I;
+          } else if (c === 10) {
+            eol = true;
+          }
+          return text.substring(j + 1, i).replace(/""/g, '"');
+        }
+        while (I < N) {
+          var c = text.charCodeAt(I++), k = 1;
+          if (c === 10) eol = true; else if (c === 13) {
+            eol = true;
+            if (text.charCodeAt(I) === 10) ++I, ++k;
+          } else if (c !== delimiterCode) continue;
+          return text.substring(j, I - k);
+        }
+        return text.substring(j);
+      }
+      while ((t = token()) !== EOF) {
+        var a = [];
+        while (t !== EOL && t !== EOF) {
+          a.push(t);
+          t = token();
+        }
+        if (f && !(a = f(a, n++))) continue;
+        rows.push(a);
+      }
+      return rows;
+    };
+    dsv.format = function(rows) {
+      return rows.map(formatRow).join("\n");
+    };
+    function formatRow(row) {
+      return row.map(formatValue).join(delimiter);
+    }
+    function formatValue(text) {
+      return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
+    }
+    return dsv;
+  }
+  d3.csv = d3_dsv(",", "text/csv");
+  d3.tsv = d3_dsv("	", "text/tab-separated-values");
+  d3.geo = {};
+  d3.geo.stream = function(object, listener) {
+    if (d3_geo_streamObjectType.hasOwnProperty(object.type)) {
+      d3_geo_streamObjectType[object.type](object, listener);
+    } else {
+      d3_geo_streamGeometry(object, listener);
+    }
+  };
+  function d3_geo_streamGeometry(geometry, listener) {
+    if (d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
+      d3_geo_streamGeometryType[geometry.type](geometry, listener);
+    }
+  }
+  var d3_geo_streamObjectType = {
+    Feature: function(feature, listener) {
+      d3_geo_streamGeometry(feature.geometry, listener);
+    },
+    FeatureCollection: function(object, listener) {
+      var features = object.features, i = -1, n = features.length;
+      while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
+    }
+  };
+  var d3_geo_streamGeometryType = {
+    Sphere: function(object, listener) {
+      listener.sphere();
+    },
+    Point: function(object, listener) {
+      var coordinate = object.coordinates;
+      listener.point(coordinate[0], coordinate[1]);
+    },
+    MultiPoint: function(object, listener) {
+      var coordinates = object.coordinates, i = -1, n = coordinates.length, coordinate;
+      while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1]);
+    },
+    LineString: function(object, listener) {
+      d3_geo_streamLine(object.coordinates, listener, 0);
+    },
+    MultiLineString: function(object, listener) {
+      var coordinates = object.coordinates, i = -1, n = coordinates.length;
+      while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
+    },
+    Polygon: function(object, listener) {
+      d3_geo_streamPolygon(object.coordinates, listener);
+    },
+    MultiPolygon: function(object, listener) {
+      var coordinates = object.coordinates, i = -1, n = coordinates.length;
+      while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
+    },
+    GeometryCollection: function(object, listener) {
+      var geometries = object.geometries, i = -1, n = geometries.length;
+      while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
+    }
+  };
+  function d3_geo_streamLine(coordinates, listener, closed) {
+    var i = -1, n = coordinates.length - closed, coordinate;
+    listener.lineStart();
+    while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1]);
+    listener.lineEnd();
+  }
+  function d3_geo_streamPolygon(coordinates, listener) {
+    var i = -1, n = coordinates.length;
+    listener.polygonStart();
+    while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
+    listener.polygonEnd();
+  }
+  function d3_geo_spherical(cartesian) {
+    return [ Math.atan2(cartesian[1], cartesian[0]), Math.asin(Math.max(-1, Math.min(1, cartesian[2]))) ];
+  }
+  function d3_geo_sphericalEqual(a, b) {
+    return Math.abs(a[0] - b[0]) < ε && Math.abs(a[1] - b[1]) < ε;
+  }
+  function d3_geo_cartesian(spherical) {
+    var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
+    return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
+  }
+  function d3_geo_cartesianDot(a, b) {
+    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+  }
+  function d3_geo_cartesianCross(a, b) {
+    return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
+  }
+  function d3_geo_cartesianAdd(a, b) {
+    a[0] += b[0];
+    a[1] += b[1];
+    a[2] += b[2];
+  }
+  function d3_geo_cartesianScale(vector, k) {
+    return [ vector[0] * k, vector[1] * k, vector[2] * k ];
+  }
+  function d3_geo_cartesianNormalize(d) {
+    var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
+    d[0] /= l;
+    d[1] /= l;
+    d[2] /= l;
+  }
+  function d3_geo_resample(project) {
+    var δ2 = .5, maxDepth = 16;
+    function resample(stream) {
+      var λ0, x0, y0, a0, b0, c0;
+      var resample = {
+        point: point,
+        lineStart: lineStart,
+        lineEnd: lineEnd,
+        polygonStart: function() {
+          stream.polygonStart();
+          resample.lineStart = polygonLineStart;
+        },
+        polygonEnd: function() {
+          stream.polygonEnd();
+          resample.lineStart = lineStart;
+        }
+      };
+      function point(x, y) {
+        x = project(x, y);
+        stream.point(x[0], x[1]);
+      }
+      function lineStart() {
+        x0 = NaN;
+        resample.point = linePoint;
+        stream.lineStart();
+      }
+      function linePoint(λ, φ) {
+        var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);
+        resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
+        stream.point(x0, y0);
+      }
+      function lineEnd() {
+        resample.point = point;
+        stream.lineEnd();
+      }
+      function polygonLineStart() {
+        var λ00, φ00, x00, y00, a00, b00, c00;
+        lineStart();
+        resample.point = function(λ, φ) {
+          linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
+          resample.point = linePoint;
+        };
+        resample.lineEnd = function() {
+          resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);
+          resample.lineEnd = lineEnd;
+          lineEnd();
+        };
+      }
+      return resample;
+    }
+    function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {
+      var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;
+      if (d2 > 4 * δ2 && depth--) {
+        var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = Math.abs(Math.abs(c) - 1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;
+        if (dz * dz / d2 > δ2 || Math.abs((dx * dx2 + dy * dy2) / d2 - .5) > .3) {
+          resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
+          stream.point(x2, y2);
+          resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);
+        }
+      }
+    }
+    resample.precision = function(_) {
+      if (!arguments.length) return Math.sqrt(δ2);
+      maxDepth = (δ2 = _ * _) > 0 && 16;
+      return resample;
+    };
+    return resample;
+  }
+  d3.geo.albersUsa = function() {
+    var lower48 = d3.geo.albers();
+    var alaska = d3.geo.albers().rotate([ 160, 0 ]).center([ 0, 60 ]).parallels([ 55, 65 ]);
+    var hawaii = d3.geo.albers().rotate([ 160, 0 ]).center([ 0, 20 ]).parallels([ 8, 18 ]);
+    var puertoRico = d3.geo.albers().rotate([ 60, 0 ]).center([ 0, 10 ]).parallels([ 8, 18 ]);
+    function albersUsa(coordinates) {
+      return projection(coordinates)(coordinates);
+    }
+    function projection(point) {
+      var lon = point[0], lat = point[1];
+      return lat > 50 ? alaska : lon < -140 ? hawaii : lat < 21 ? puertoRico : lower48;
+    }
+    albersUsa.scale = function(x) {
+      if (!arguments.length) return lower48.scale();
+      lower48.scale(x);
+      alaska.scale(x * .6);
+      hawaii.scale(x);
+      puertoRico.scale(x * 1.5);
+      return albersUsa.translate(lower48.translate());
+    };
+    albersUsa.translate = function(x) {
+      if (!arguments.length) return lower48.translate();
+      var dz = lower48.scale(), dx = x[0], dy = x[1];
+      lower48.translate(x);
+      alaska.translate([ dx - .4 * dz, dy + .17 * dz ]);
+      hawaii.translate([ dx - .19 * dz, dy + .2 * dz ]);
+      puertoRico.translate([ dx + .58 * dz, dy + .43 * dz ]);
+      return albersUsa;
+    };
+    return albersUsa.scale(lower48.scale());
+  };
+  function d3_geo_albers(φ0, φ1) {
+    var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;
+    function albers(λ, φ) {
+      var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
+      return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];
+    }
+    albers.invert = function(x, y) {
+      var ρ0_y = ρ0 - y;
+      return [ Math.atan2(x, ρ0_y) / n, Math.asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];
+    };
+    return albers;
+  }
+  (d3.geo.albers = function() {
+    var φ0 = 29.5 * d3_radians, φ1 = 45.5 * d3_radians, m = d3_geo_projectionMutator(d3_geo_albers), p = m(φ0, φ1);
+    p.parallels = function(_) {
+      if (!arguments.length) return [ φ0 * d3_degrees, φ1 * d3_degrees ];
+      return m(φ0 = _[0] * d3_radians, φ1 = _[1] * d3_radians);
+    };
+    return p.rotate([ 98, 0 ]).center([ 0, 38 ]).scale(1e3);
+  }).raw = d3_geo_albers;
+  var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {
+    return Math.sqrt(2 / (1 + cosλcosφ));
+  }, function(ρ) {
+    return 2 * Math.asin(ρ / 2);
+  });
+  (d3.geo.azimuthalEqualArea = function() {
+    return d3_geo_projection(d3_geo_azimuthalEqualArea);
+  }).raw = d3_geo_azimuthalEqualArea;
+  var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {
+    var c = Math.acos(cosλcosφ);
+    return c && c / Math.sin(c);
+  }, d3_identity);
+  (d3.geo.azimuthalEquidistant = function() {
+    return d3_geo_projection(d3_geo_azimuthalEquidistant);
+  }).raw = d3_geo_azimuthalEquidistant;
+  d3.geo.bounds = d3_geo_bounds(d3_identity);
+  function d3_geo_bounds(projectStream) {
+    var x0, y0, x1, y1;
+    var bound = {
+      point: boundPoint,
+      lineStart: d3_noop,
+      lineEnd: d3_noop,
+      polygonStart: function() {
+        bound.lineEnd = boundPolygonLineEnd;
+      },
+      polygonEnd: function() {
+        bound.point = boundPoint;
+      }
+    };
+    function boundPoint(x, y) {
+      if (x < x0) x0 = x;
+      if (x > x1) x1 = x;
+      if (y < y0) y0 = y;
+      if (y > y1) y1 = y;
+    }
+    function boundPolygonLineEnd() {
+      bound.point = bound.lineEnd = d3_noop;
+    }
+    return function(feature) {
+      y1 = x1 = -(x0 = y0 = Infinity);
+      d3.geo.stream(feature, projectStream(bound));
+      return [ [ x0, y0 ], [ x1, y1 ] ];
+    };
+  }
+  d3.geo.centroid = function(object) {
+    d3_geo_centroidDimension = d3_geo_centroidW = d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+    d3.geo.stream(object, d3_geo_centroid);
+    var m;
+    if (d3_geo_centroidW && Math.abs(m = Math.sqrt(d3_geo_centroidX * d3_geo_centroidX + d3_geo_centroidY * d3_geo_centroidY + d3_geo_centroidZ * d3_geo_centroidZ)) > ε) {
+      return [ Math.atan2(d3_geo_centroidY, d3_geo_centroidX) * d3_degrees, Math.asin(Math.max(-1, Math.min(1, d3_geo_centroidZ / m))) * d3_degrees ];
+    }
+  };
+  var d3_geo_centroidDimension, d3_geo_centroidW, d3_geo_centroidX, d3_geo_centroidY, d3_geo_centroidZ;
+  var d3_geo_centroid = {
+    sphere: function() {
+      if (d3_geo_centroidDimension < 2) {
+        d3_geo_centroidDimension = 2;
+        d3_geo_centroidW = d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+      }
+    },
+    point: d3_geo_centroidPoint,
+    lineStart: d3_geo_centroidLineStart,
+    lineEnd: d3_geo_centroidLineEnd,
+    polygonStart: function() {
+      if (d3_geo_centroidDimension < 2) {
+        d3_geo_centroidDimension = 2;
+        d3_geo_centroidW = d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+      }
+      d3_geo_centroid.lineStart = d3_geo_centroidRingStart;
+    },
+    polygonEnd: function() {
+      d3_geo_centroid.lineStart = d3_geo_centroidLineStart;
+    }
+  };
+  function d3_geo_centroidPoint(λ, φ) {
+    if (d3_geo_centroidDimension) return;
+    ++d3_geo_centroidW;
+    λ *= d3_radians;
+    var cosφ = Math.cos(φ *= d3_radians);
+    d3_geo_centroidX += (cosφ * Math.cos(λ) - d3_geo_centroidX) / d3_geo_centroidW;
+    d3_geo_centroidY += (cosφ * Math.sin(λ) - d3_geo_centroidY) / d3_geo_centroidW;
+    d3_geo_centroidZ += (Math.sin(φ) - d3_geo_centroidZ) / d3_geo_centroidW;
+  }
+  function d3_geo_centroidRingStart() {
+    var λ00, φ00;
+    d3_geo_centroidDimension = 1;
+    d3_geo_centroidLineStart();
+    d3_geo_centroidDimension = 2;
+    var linePoint = d3_geo_centroid.point;
+    d3_geo_centroid.point = function(λ, φ) {
+      linePoint(λ00 = λ, φ00 = φ);
+    };
+    d3_geo_centroid.lineEnd = function() {
+      d3_geo_centroid.point(λ00, φ00);
+      d3_geo_centroidLineEnd();
+      d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;
+    };
+  }
+  function d3_geo_centroidLineStart() {
+    var x0, y0, z0;
+    if (d3_geo_centroidDimension > 1) return;
+    if (d3_geo_centroidDimension < 1) {
+      d3_geo_centroidDimension = 1;
+      d3_geo_centroidW = d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+    }
+    d3_geo_centroid.point = function(λ, φ) {
+      λ *= d3_radians;
+      var cosφ = Math.cos(φ *= d3_radians);
+      x0 = cosφ * Math.cos(λ);
+      y0 = cosφ * Math.sin(λ);
+      z0 = Math.sin(φ);
+      d3_geo_centroid.point = nextPoint;
+    };
+    function nextPoint(λ, φ) {
+      λ *= d3_radians;
+      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
+      d3_geo_centroidW += w;
+      d3_geo_centroidX += w * (x0 + (x0 = x));
+      d3_geo_centroidY += w * (y0 + (y0 = y));
+      d3_geo_centroidZ += w * (z0 + (z0 = z));
+    }
+  }
+  function d3_geo_centroidLineEnd() {
+    d3_geo_centroid.point = d3_geo_centroidPoint;
+  }
+  d3.geo.circle = function() {
+    var origin = [ 0, 0 ], angle, precision = 6, interpolate;
+    function circle() {
+      var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];
+      interpolate(null, null, 1, {
+        point: function(x, y) {
+          ring.push(x = rotate(x, y));
+          x[0] *= d3_degrees, x[1] *= d3_degrees;
+        }
+      });
+      return {
+        type: "Polygon",
+        coordinates: [ ring ]
+      };
+    }
+    circle.origin = function(x) {
+      if (!arguments.length) return origin;
+      origin = x;
+      return circle;
+    };
+    circle.angle = function(x) {
+      if (!arguments.length) return angle;
+      interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);
+      return circle;
+    };
+    circle.precision = function(_) {
+      if (!arguments.length) return precision;
+      interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);
+      return circle;
+    };
+    return circle.angle(90);
+  };
+  function d3_geo_circleInterpolate(radians, precision) {
+    var cr = Math.cos(radians), sr = Math.sin(radians);
+    return function(from, to, direction, listener) {
+      if (from != null) {
+        from = d3_geo_circleAngle(cr, from);
+        to = d3_geo_circleAngle(cr, to);
+        if (direction > 0 ? from < to : from > to) from += direction * 2 * π;
+      } else {
+        from = radians + direction * 2 * π;
+        to = radians;
+      }
+      var point;
+      for (var step = direction * precision, t = from; direction > 0 ? t > to : t < to; t -= step) {
+        listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);
+      }
+    };
+  }
+  function d3_geo_circleAngle(cr, point) {
+    var a = d3_geo_cartesian(point);
+    a[0] -= cr;
+    d3_geo_cartesianNormalize(a);
+    var angle = Math.acos(Math.max(-1, Math.min(1, -a[1])));
+    return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);
+  }
+  function d3_geo_clip(pointVisible, clipLine, interpolate) {
+    return function(listener) {
+      var line = clipLine(listener);
+      var clip = {
+        point: point,
+        lineStart: lineStart,
+        lineEnd: lineEnd,
+        polygonStart: function() {
+          clip.point = pointRing;
+          clip.lineStart = ringStart;
+          clip.lineEnd = ringEnd;
+          invisible = false;
+          invisibleArea = visibleArea = 0;
+          segments = [];
+          listener.polygonStart();
+        },
+        polygonEnd: function() {
+          clip.point = point;
+          clip.lineStart = lineStart;
+          clip.lineEnd = lineEnd;
+          segments = d3.merge(segments);
+          if (segments.length) {
+            d3_geo_clipPolygon(segments, interpolate, listener);
+          } else if (visibleArea < -ε || invisible && invisibleArea < -ε) {
+            listener.lineStart();
+            interpolate(null, null, 1, listener);
+            listener.lineEnd();
+          }
+          listener.polygonEnd();
+          segments = null;
+        },
+        sphere: function() {
+          listener.polygonStart();
+          listener.lineStart();
+          interpolate(null, null, 1, listener);
+          listener.lineEnd();
+          listener.polygonEnd();
+        }
+      };
+      function point(λ, φ) {
+        if (pointVisible(λ, φ)) listener.point(λ, φ);
+      }
+      function pointLine(λ, φ) {
+        line.point(λ, φ);
+      }
+      function lineStart() {
+        clip.point = pointLine;
+        line.lineStart();
+      }
+      function lineEnd() {
+        clip.point = point;
+        line.lineEnd();
+      }
+      var segments, visibleArea, invisibleArea, invisible;
+      var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), ring;
+      function pointRing(λ, φ) {
+        ringListener.point(λ, φ);
+        ring.push([ λ, φ ]);
+      }
+      function ringStart() {
+        ringListener.lineStart();
+        ring = [];
+      }
+      function ringEnd() {
+        pointRing(ring[0][0], ring[0][1]);
+        ringListener.lineEnd();
+        var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;
+        if (!n) {
+          invisible = true;
+          invisibleArea += d3_geo_clipAreaRing(ring, -1);
+          ring = null;
+          return;
+        }
+        ring = null;
+        if (clean & 1) {
+          segment = ringSegments[0];
+          visibleArea += d3_geo_clipAreaRing(segment, 1);
+          var n = segment.length - 1, i = -1, point;
+          listener.lineStart();
+          while (++i < n) listener.point((point = segment[i])[0], point[1]);
+          listener.lineEnd();
+          return;
+        }
+        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
+        segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));
+      }
+      return clip;
+    };
+  }
+  function d3_geo_clipPolygon(segments, interpolate, listener) {
+    var subject = [], clip = [];
+    segments.forEach(function(segment) {
+      if ((n = segment.length) <= 1) return;
+      var n, p0 = segment[0], p1 = segment[n - 1];
+      if (d3_geo_sphericalEqual(p0, p1)) {
+        listener.lineStart();
+        for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);
+        listener.lineEnd();
+        return;
+      }
+      var a = {
+        point: p0,
+        points: segment,
+        other: null,
+        visited: false,
+        entry: true,
+        subject: true
+      }, b = {
+        point: p0,
+        points: [ p0 ],
+        other: a,
+        visited: false,
+        entry: false,
+        subject: false
+      };
+      a.other = b;
+      subject.push(a);
+      clip.push(b);
+      a = {
+        point: p1,
+        points: [ p1 ],
+        other: null,
+        visited: false,
+        entry: false,
+        subject: true
+      };
+      b = {
+        point: p1,
+        points: [ p1 ],
+        other: a,
+        visited: false,
+        entry: true,
+        subject: false
+      };
+      a.other = b;
+      subject.push(a);
+      clip.push(b);
+    });
+    clip.sort(d3_geo_clipSort);
+    d3_geo_clipLinkCircular(subject);
+    d3_geo_clipLinkCircular(clip);
+    if (!subject.length) return;
+    var start = subject[0], current, points, point;
+    while (1) {
+      current = start;
+      while (current.visited) if ((current = current.next) === start) return;
+      points = current.points;
+      listener.lineStart();
+      do {
+        current.visited = current.other.visited = true;
+        if (current.entry) {
+          if (current.subject) {
+            for (var i = 0; i < points.length; i++) listener.point((point = points[i])[0], point[1]);
+          } else {
+            interpolate(current.point, current.next.point, 1, listener);
+          }
+          current = current.next;
+        } else {
+          if (current.subject) {
+            points = current.prev.points;
+            for (var i = points.length; --i >= 0; ) listener.point((point = points[i])[0], point[1]);
+          } else {
+            interpolate(current.point, current.prev.point, -1, listener);
+          }
+          current = current.prev;
+        }
+        current = current.other;
+        points = current.points;
+      } while (!current.visited);
+      listener.lineEnd();
+    }
+  }
+  function d3_geo_clipLinkCircular(array) {
+    if (!(n = array.length)) return;
+    var n, i = 0, a = array[0], b;
+    while (++i < n) {
+      a.next = b = array[i];
+      b.prev = a;
+      a = b;
+    }
+    a.next = b = array[0];
+    b.prev = a;
+  }
+  function d3_geo_clipSort(a, b) {
+    return ((a = a.point)[0] < 0 ? a[1] - π / 2 - ε : π / 2 - a[1]) - ((b = b.point)[0] < 0 ? b[1] - π / 2 - ε : π / 2 - b[1]);
+  }
+  function d3_geo_clipSegmentLength1(segment) {
+    return segment.length > 1;
+  }
+  function d3_geo_clipBufferListener() {
+    var lines = [], line;
+    return {
+      lineStart: function() {
+        lines.push(line = []);
+      },
+      point: function(λ, φ) {
+        line.push([ λ, φ ]);
+      },
+      lineEnd: d3_noop,
+      buffer: function() {
+        var buffer = lines;
+        lines = [];
+        line = null;
+        return buffer;
+      }
+    };
+  }
+  function d3_geo_clipAreaRing(ring, invisible) {
+    if (!(n = ring.length)) return 0;
+    var n, i = 0, area = 0, p = ring[0], λ = p[0], φ = p[1], cosφ = Math.cos(φ), x0 = Math.atan2(invisible * Math.sin(λ) * cosφ, Math.sin(φ)), y0 = 1 - invisible * Math.cos(λ) * cosφ, x1 = x0, x, y;
+    while (++i < n) {
+      p = ring[i];
+      cosφ = Math.cos(φ = p[1]);
+      x = Math.atan2(invisible * Math.sin(λ = p[0]) * cosφ, Math.sin(φ));
+      y = 1 - invisible * Math.cos(λ) * cosφ;
+      if (Math.abs(y0 - 2) < ε && Math.abs(y - 2) < ε) continue;
+      if (Math.abs(y) < ε || Math.abs(y0) < ε) {} else if (Math.abs(Math.abs(x - x0) - π) < ε) {
+        if (y + y0 > 2) area += 4 * (x - x0);
+      } else if (Math.abs(y0 - 2) < ε) area += 4 * (x - x1); else area += ((3 * π + x - x0) % (2 * π) - π) * (y0 + y);
+      x1 = x0, x0 = x, y0 = y;
+    }
+    return area;
+  }
+  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate);
+  function d3_geo_clipAntimeridianLine(listener) {
+    var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
+    return {
+      lineStart: function() {
+        listener.lineStart();
+        clean = 1;
+      },
+      point: function(λ1, φ1) {
+        var sλ1 = λ1 > 0 ? π : -π, dλ = Math.abs(λ1 - λ0);
+        if (Math.abs(dλ - π) < ε) {
+          listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? π / 2 : -π / 2);
+          listener.point(sλ0, φ0);
+          listener.lineEnd();
+          listener.lineStart();
+          listener.point(sλ1, φ0);
+          listener.point(λ1, φ0);
+          clean = 0;
+        } else if (sλ0 !== sλ1 && dλ >= π) {
+          if (Math.abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
+          if (Math.abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
+          φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
+          listener.point(sλ0, φ0);
+          listener.lineEnd();
+          listener.lineStart();
+          listener.point(sλ1, φ0);
+          clean = 0;
+        }
+        listener.point(λ0 = λ1, φ0 = φ1);
+        sλ0 = sλ1;
+      },
+      lineEnd: function() {
+        listener.lineEnd();
+        λ0 = φ0 = NaN;
+      },
+      clean: function() {
+        return 2 - clean;
+      }
+    };
+  }
+  function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {
+    var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);
+    return Math.abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;
+  }
+  function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
+    var φ;
+    if (from == null) {
+      φ = direction * π / 2;
+      listener.point(-π, φ);
+      listener.point(0, φ);
+      listener.point(π, φ);
+      listener.point(π, 0);
+      listener.point(π, -φ);
+      listener.point(0, -φ);
+      listener.point(-π, -φ);
+      listener.point(-π, 0);
+      listener.point(-π, φ);
+    } else if (Math.abs(from[0] - to[0]) > ε) {
+      var s = (from[0] < to[0] ? 1 : -1) * π;
+      φ = direction * s / 2;
+      listener.point(-s, φ);
+      listener.point(0, φ);
+      listener.point(s, φ);
+    } else {
+      listener.point(to[0], to[1]);
+    }
+  }
+  function d3_geo_clipCircle(degrees) {
+    var radians = degrees * d3_radians, cr = Math.cos(radians), interpolate = d3_geo_circleInterpolate(radians, 6 * d3_radians);
+    return d3_geo_clip(visible, clipLine, interpolate);
+    function visible(λ, φ) {
+      return Math.cos(λ) * Math.cos(φ) > cr;
+    }
+    function clipLine(listener) {
+      var point0, v0, v00, clean;
+      return {
+        lineStart: function() {
+          v00 = v0 = false;
+          clean = 1;
+        },
+        point: function(λ, φ) {
+          var point1 = [ λ, φ ], point2, v = visible(λ, φ);
+          if (!point0 && (v00 = v0 = v)) listener.lineStart();
+          if (v !== v0) {
+            point2 = intersect(point0, point1);
+            if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {
+              point1[0] += ε;
+              point1[1] += ε;
+              v = visible(point1[0], point1[1]);
+            }
+          }
+          if (v !== v0) {
+            clean = 0;
+            if (v0 = v) {
+              listener.lineStart();
+              point2 = intersect(point1, point0);
+              listener.point(point2[0], point2[1]);
+            } else {
+              point2 = intersect(point0, point1);
+              listener.point(point2[0], point2[1]);
+              listener.lineEnd();
+            }
+            point0 = point2;
+          }
+          if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) listener.point(point1[0], point1[1]);
+          point0 = point1;
+        },
+        lineEnd: function() {
+          if (v0) listener.lineEnd();
+          point0 = null;
+        },
+        clean: function() {
+          return clean | (v00 && v0) << 1;
+        }
+      };
+    }
+    function intersect(a, b) {
+      var pa = d3_geo_cartesian(a, 0), pb = d3_geo_cartesian(b, 0);
+      var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;
+      if (!determinant) return a;
+      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);
+      d3_geo_cartesianAdd(A, B);
+      var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t = Math.sqrt(w * w - uu * (d3_geo_cartesianDot(A, A) - 1)), q = d3_geo_cartesianScale(u, (-w - t) / uu);
+      d3_geo_cartesianAdd(q, A);
+      return d3_geo_spherical(q);
+    }
+  }
+  function d3_geo_compose(a, b) {
+    function compose(x, y) {
+      return x = a(x, y), b(x[0], x[1]);
+    }
+    if (a.invert && b.invert) compose.invert = function(x, y) {
+      return x = b.invert(x, y), x && a.invert(x[0], x[1]);
+    };
+    return compose;
+  }
+  function d3_geo_equirectangular(λ, φ) {
+    return [ λ, φ ];
+  }
+  (d3.geo.equirectangular = function() {
+    return d3_geo_projection(d3_geo_equirectangular).scale(250 / π);
+  }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;
+  var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {
+    return 1 / cosλcosφ;
+  }, Math.atan);
+  (d3.geo.gnomonic = function() {
+    return d3_geo_projection(d3_geo_gnomonic);
+  }).raw = d3_geo_gnomonic;
+  d3.geo.graticule = function() {
+    var x1, x0, y1, y0, dx = 22.5, dy = dx, x, y, precision = 2.5;
+    function graticule() {
+      return {
+        type: "MultiLineString",
+        coordinates: lines()
+      };
+    }
+    function lines() {
+      return d3.range(Math.ceil(x0 / dx) * dx, x1, dx).map(x).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).map(y));
+    }
+    graticule.lines = function() {
+      return lines().map(function(coordinates) {
+        return {
+          type: "LineString",
+          coordinates: coordinates
+        };
+      });
+    };
+    graticule.outline = function() {
+      return {
+        type: "Polygon",
+        coordinates: [ x(x0).concat(y(y1).slice(1), x(x1).reverse().slice(1), y(y0).reverse().slice(1)) ]
+      };
+    };
+    graticule.extent = function(_) {
+      if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
+      x0 = +_[0][0], x1 = +_[1][0];
+      y0 = +_[0][1], y1 = +_[1][1];
+      if (x0 > x1) _ = x0, x0 = x1, x1 = _;
+      if (y0 > y1) _ = y0, y0 = y1, y1 = _;
+      return graticule.precision(precision);
+    };
+    graticule.step = function(_) {
+      if (!arguments.length) return [ dx, dy ];
+      dx = +_[0], dy = +_[1];
+      return graticule;
+    };
+    graticule.precision = function(_) {
+      if (!arguments.length) return precision;
+      precision = +_;
+      x = d3_geo_graticuleX(y0, y1, precision);
+      y = d3_geo_graticuleY(x0, x1, precision);
+      return graticule;
+    };
+    return graticule.extent([ [ -180 + ε, -90 + ε ], [ 180 - ε, 90 - ε ] ]);
+  };
+  function d3_geo_graticuleX(y0, y1, dy) {
+    var y = d3.range(y0, y1 - ε, dy).concat(y1);
+    return function(x) {
+      return y.map(function(y) {
+        return [ x, y ];
+      });
+    };
+  }
+  function d3_geo_graticuleY(x0, x1, dx) {
+    var x = d3.range(x0, x1 - ε, dx).concat(x1);
+    return function(y) {
+      return x.map(function(x) {
+        return [ x, y ];
+      });
+    };
+  }
+  function d3_geo_haversin(x) {
+    return (x = Math.sin(x / 2)) * x;
+  }
+  d3.geo.interpolate = function(source, target) {
+    return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);
+  };
+  function d3_geo_interpolate(x0, y0, x1, y1) {
+    var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_geo_haversin(y1 - y0) + cy0 * cy1 * d3_geo_haversin(x1 - x0))), k = 1 / Math.sin(d);
+    var interpolate = d ? function(t) {
+      var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
+      return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];
+    } : function() {
+      return [ x0 * d3_degrees, y0 * d3_degrees ];
+    };
+    interpolate.distance = d;
+    return interpolate;
+  }
+  d3.geo.greatArc = function() {
+    var source = d3_source, source_, target = d3_target, target_, precision = 6 * d3_radians, interpolate;
+    function greatArc() {
+      var p0 = source_ || source.apply(this, arguments), p1 = target_ || target.apply(this, arguments), i = interpolate || d3.geo.interpolate(p0, p1), t = 0, dt = precision / i.distance, coordinates = [ p0 ];
+      while ((t += dt) < 1) coordinates.push(i(t));
+      coordinates.push(p1);
+      return {
+        type: "LineString",
+        coordinates: coordinates
+      };
+    }
+    greatArc.distance = function() {
+      return (interpolate || d3.geo.interpolate(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments))).distance;
+    };
+    greatArc.source = function(_) {
+      if (!arguments.length) return source;
+      source = _, source_ = typeof _ === "function" ? null : _;
+      interpolate = source_ && target_ ? d3.geo.interpolate(source_, target_) : null;
+      return greatArc;
+    };
+    greatArc.target = function(_) {
+      if (!arguments.length) return target;
+      target = _, target_ = typeof _ === "function" ? null : _;
+      interpolate = source_ && target_ ? d3.geo.interpolate(source_, target_) : null;
+      return greatArc;
+    };
+    greatArc.precision = function(_) {
+      if (!arguments.length) return precision / d3_radians;
+      precision = _ * d3_radians;
+      return greatArc;
+    };
+    return greatArc;
+  };
+  function d3_geo_mercator(λ, φ) {
+    return [ λ / (2 * π), Math.max(-.5, Math.min(+.5, Math.log(Math.tan(π / 4 + φ / 2)) / (2 * π))) ];
+  }
+  d3_geo_mercator.invert = function(x, y) {
+    return [ 2 * π * x, 2 * Math.atan(Math.exp(2 * π * y)) - π / 2 ];
+  };
+  (d3.geo.mercator = function() {
+    return d3_geo_projection(d3_geo_mercator).scale(500);
+  }).raw = d3_geo_mercator;
+  var d3_geo_orthographic = d3_geo_azimuthal(function() {
+    return 1;
+  }, Math.asin);
+  (d3.geo.orthographic = function() {
+    return d3_geo_projection(d3_geo_orthographic);
+  }).raw = d3_geo_orthographic;
+  d3.geo.path = function() {
+    var pointRadius = 4.5, projection, context, projectStream, contextStream;
+    function path(object) {
+      if (object) d3.geo.stream(object, projectStream(contextStream.pointRadius(typeof pointRadius === "function" ? +pointRadius.apply(this, arguments) : pointRadius)));
+      return contextStream.result();
+    }
+    path.area = function(object) {
+      d3_geo_pathAreaSum = 0;
+      d3.geo.stream(object, projectStream(d3_geo_pathArea));
+      return d3_geo_pathAreaSum;
+    };
+    path.centroid = function(object) {
+      d3_geo_centroidDimension = d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+      d3.geo.stream(object, projectStream(d3_geo_pathCentroid));
+      return d3_geo_centroidZ ? [ d3_geo_centroidX / d3_geo_centroidZ, d3_geo_centroidY / d3_geo_centroidZ ] : undefined;
+    };
+    path.bounds = function(object) {
+      return d3_geo_bounds(projectStream)(object);
+    };
+    path.projection = function(_) {
+      if (!arguments.length) return projection;
+      projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;
+      return path;
+    };
+    path.context = function(_) {
+      if (!arguments.length) return context;
+      contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);
+      return path;
+    };
+    path.pointRadius = function(_) {
+      if (!arguments.length) return pointRadius;
+      pointRadius = typeof _ === "function" ? _ : +_;
+      return path;
+    };
+    return path.projection(d3.geo.albersUsa()).context(null);
+  };
+  function d3_geo_pathCircle(radius) {
+    return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + +2 * radius + "z";
+  }
+  function d3_geo_pathProjectStream(project) {
+    var resample = d3_geo_resample(function(λ, φ) {
+      return project([ λ * d3_degrees, φ * d3_degrees ]);
+    });
+    return function(stream) {
+      stream = resample(stream);
+      return {
+        point: function(λ, φ) {
+          stream.point(λ * d3_radians, φ * d3_radians);
+        },
+        sphere: function() {
+          stream.sphere();
+        },
+        lineStart: function() {
+          stream.lineStart();
+        },
+        lineEnd: function() {
+          stream.lineEnd();
+        },
+        polygonStart: function() {
+          stream.polygonStart();
+        },
+        polygonEnd: function() {
+          stream.polygonEnd();
+        }
+      };
+    };
+  }
+  function d3_geo_pathBuffer() {
+    var pointCircle = d3_geo_pathCircle(4.5), buffer = [];
+    var stream = {
+      point: point,
+      lineStart: function() {
+        stream.point = pointLineStart;
+      },
+      lineEnd: lineEnd,
+      polygonStart: function() {
+        stream.lineEnd = lineEndPolygon;
+      },
+      polygonEnd: function() {
+        stream.lineEnd = lineEnd;
+        stream.point = point;
+      },
+      pointRadius: function(_) {
+        pointCircle = d3_geo_pathCircle(_);
+        return stream;
+      },
+      result: function() {
+        if (buffer.length) {
+          var result = buffer.join("");
+          buffer = [];
+          return result;
+        }
+      }
+    };
+    function point(x, y) {
+      buffer.push("M", x, ",", y, pointCircle);
+    }
+    function pointLineStart(x, y) {
+      buffer.push("M", x, ",", y);
+      stream.point = pointLine;
+    }
+    function pointLine(x, y) {
+      buffer.push("L", x, ",", y);
+    }
+    function lineEnd() {
+      stream.point = point;
+    }
+    function lineEndPolygon() {
+      buffer.push("Z");
+    }
+    return stream;
+  }
+  function d3_geo_pathContext(context) {
+    var pointRadius = 4.5;
+    var stream = {
+      point: point,
+      lineStart: function() {
+        stream.point = pointLineStart;
+      },
+      lineEnd: lineEnd,
+      polygonStart: function() {
+        stream.lineEnd = lineEndPolygon;
+      },
+      polygonEnd: function() {
+        stream.lineEnd = lineEnd;
+        stream.point = point;
+      },
+      pointRadius: function(_) {
+        pointRadius = _;
+        return stream;
+      },
+      result: d3_noop
+    };
+    function point(x, y) {
+      context.moveTo(x, y);
+      context.arc(x, y, pointRadius, 0, 2 * π);
+    }
+    function pointLineStart(x, y) {
+      context.moveTo(x, y);
+      stream.point = pointLine;
+    }
+    function pointLine(x, y) {
+      context.lineTo(x, y);
+    }
+    function lineEnd() {
+      stream.point = point;
+    }
+    function lineEndPolygon() {
+      context.closePath();
+    }
+    return stream;
+  }
+  var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
+    point: d3_noop,
+    lineStart: d3_noop,
+    lineEnd: d3_noop,
+    polygonStart: function() {
+      d3_geo_pathAreaPolygon = 0;
+      d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;
+    },
+    polygonEnd: function() {
+      d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
+      d3_geo_pathAreaSum += Math.abs(d3_geo_pathAreaPolygon / 2);
+    }
+  };
+  function d3_geo_pathAreaRingStart() {
+    var x00, y00, x0, y0;
+    d3_geo_pathArea.point = function(x, y) {
+      d3_geo_pathArea.point = nextPoint;
+      x00 = x0 = x, y00 = y0 = y;
+    };
+    function nextPoint(x, y) {
+      d3_geo_pathAreaPolygon += y0 * x - x0 * y;
+      x0 = x, y0 = y;
+    }
+    d3_geo_pathArea.lineEnd = function() {
+      nextPoint(x00, y00);
+    };
+  }
+  var d3_geo_pathCentroid = {
+    point: d3_geo_pathCentroidPoint,
+    lineStart: d3_geo_pathCentroidLineStart,
+    lineEnd: d3_geo_pathCentroidLineEnd,
+    polygonStart: function() {
+      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;
+    },
+    polygonEnd: function() {
+      d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
+      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;
+      d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;
+    }
+  };
+  function d3_geo_pathCentroidPoint(x, y) {
+    if (d3_geo_centroidDimension) return;
+    d3_geo_centroidX += x;
+    d3_geo_centroidY += y;
+    ++d3_geo_centroidZ;
+  }
+  function d3_geo_pathCentroidLineStart() {
+    var x0, y0;
+    if (d3_geo_centroidDimension !== 1) {
+      if (d3_geo_centroidDimension < 1) {
+        d3_geo_centroidDimension = 1;
+        d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+      } else return;
+    }
+    d3_geo_pathCentroid.point = function(x, y) {
+      d3_geo_pathCentroid.point = nextPoint;
+      x0 = x, y0 = y;
+    };
+    function nextPoint(x, y) {
+      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
+      d3_geo_centroidX += z * (x0 + x) / 2;
+      d3_geo_centroidY += z * (y0 + y) / 2;
+      d3_geo_centroidZ += z;
+      x0 = x, y0 = y;
+    }
+  }
+  function d3_geo_pathCentroidLineEnd() {
+    d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
+  }
+  function d3_geo_pathCentroidRingStart() {
+    var x00, y00, x0, y0;
+    if (d3_geo_centroidDimension < 2) {
+      d3_geo_centroidDimension = 2;
+      d3_geo_centroidX = d3_geo_centroidY = d3_geo_centroidZ = 0;
+    }
+    d3_geo_pathCentroid.point = function(x, y) {
+      d3_geo_pathCentroid.point = nextPoint;
+      x00 = x0 = x, y00 = y0 = y;
+    };
+    function nextPoint(x, y) {
+      var z = y0 * x - x0 * y;
+      d3_geo_centroidX += z * (x0 + x);
+      d3_geo_centroidY += z * (y0 + y);
+      d3_geo_centroidZ += z * 3;
+      x0 = x, y0 = y;
+    }
+    d3_geo_pathCentroid.lineEnd = function() {
+      nextPoint(x00, y00);
+    };
+  }
+  d3.geo.area = function(object) {
+    d3_geo_areaSum = 0;
+    d3.geo.stream(object, d3_geo_area);
+    return d3_geo_areaSum;
+  };
+  var d3_geo_areaSum, d3_geo_areaRingU, d3_geo_areaRingV;
+  var d3_geo_area = {
+    sphere: function() {
+      d3_geo_areaSum += 4 * π;
+    },
+    point: d3_noop,
+    lineStart: d3_noop,
+    lineEnd: d3_noop,
+    polygonStart: function() {
+      d3_geo_areaRingU = 1, d3_geo_areaRingV = 0;
+      d3_geo_area.lineStart = d3_geo_areaRingStart;
+    },
+    polygonEnd: function() {
+      var area = 2 * Math.atan2(d3_geo_areaRingV, d3_geo_areaRingU);
+      d3_geo_areaSum += area < 0 ? 4 * π + area : area;
+      d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
+    }
+  };
+  function d3_geo_areaRingStart() {
+    var λ00, φ00, λ0, cosφ0, sinφ0;
+    d3_geo_area.point = function(λ, φ) {
+      d3_geo_area.point = nextPoint;
+      λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4),
+      sinφ0 = Math.sin(φ);
+    };
+    function nextPoint(λ, φ) {
+      λ *= d3_radians;
+      φ = φ * d3_radians / 2 + π / 4;
+      var dλ = λ - λ0, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u0 = d3_geo_areaRingU, v0 = d3_geo_areaRingV, u = cosφ0 * cosφ + k * Math.cos(dλ), v = k * Math.sin(dλ);
+      d3_geo_areaRingU = u0 * u - v0 * v;
+      d3_geo_areaRingV = v0 * u + u0 * v;
+      λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
+    }
+    d3_geo_area.lineEnd = function() {
+      nextPoint(λ00, φ00);
+    };
+  }
+  d3.geo.projection = d3_geo_projection;
+  d3.geo.projectionMutator = d3_geo_projectionMutator;
+  function d3_geo_projection(project) {
+    return d3_geo_projectionMutator(function() {
+      return project;
+    })();
+  }
+  function d3_geo_projectionMutator(projectAt) {
+    var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {
+      x = project(x, y);
+      return [ x[0] * k + δx, δy - x[1] * k ];
+    }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, clip = d3_geo_clipAntimeridian, clipAngle = null;
+    function projection(point) {
+      point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);
+      return [ point[0] * k + δx, δy - point[1] * k ];
+    }
+    function invert(point) {
+      point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);
+      return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];
+    }
+    projection.stream = function(stream) {
+      return d3_geo_projectionRadiansRotate(rotate, clip(projectResample(stream)));
+    };
+    projection.clipAngle = function(_) {
+      if (!arguments.length) return clipAngle;
+      clip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle(clipAngle = +_);
+      return projection;
+    };
+    projection.scale = function(_) {
+      if (!arguments.length) return k;
+      k = +_;
+      return reset();
+    };
+    projection.translate = function(_) {
+      if (!arguments.length) return [ x, y ];
+      x = +_[0];
+      y = +_[1];
+      return reset();
+    };
+    projection.center = function(_) {
+      if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];
+      λ = _[0] % 360 * d3_radians;
+      φ = _[1] % 360 * d3_radians;
+      return reset();
+    };
+    projection.rotate = function(_) {
+      if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];
+      δλ = _[0] % 360 * d3_radians;
+      δφ = _[1] % 360 * d3_radians;
+      δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;
+      return reset();
+    };
+    d3.rebind(projection, projectResample, "precision");
+    function reset() {
+      projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);
+      var center = project(λ, φ);
+      δx = x - center[0] * k;
+      δy = y + center[1] * k;
+      return projection;
+    }
+    return function() {
+      project = projectAt.apply(this, arguments);
+      projection.invert = project.invert && invert;
+      return reset();
+    };
+  }
+  function d3_geo_projectionRadiansRotate(rotate, stream) {
+    return {
+      point: function(x, y) {
+        y = rotate(x * d3_radians, y * d3_radians), x = y[0];
+        stream.point(x > π ? x - 2 * π : x < -π ? x + 2 * π : x, y[1]);
+      },
+      sphere: function() {
+        stream.sphere();
+      },
+      lineStart: function() {
+        stream.lineStart();
+      },
+      lineEnd: function() {
+        stream.lineEnd();
+      },
+      polygonStart: function() {
+        stream.polygonStart();
+      },
+      polygonEnd: function() {
+        stream.polygonEnd();
+      }
+    };
+  }
+  function d3_geo_rotation(δλ, δφ, δγ) {
+    return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_equirectangular;
+  }
+  function d3_geo_forwardRotationλ(δλ) {
+    return function(λ, φ) {
+      return λ += δλ, [ λ > π ? λ - 2 * π : λ < -π ? λ + 2 * π : λ, φ ];
+    };
+  }
+  function d3_geo_rotationλ(δλ) {
+    var rotation = d3_geo_forwardRotationλ(δλ);
+    rotation.invert = d3_geo_forwardRotationλ(-δλ);
+    return rotation;
+  }
+  function d3_geo_rotationφγ(δφ, δγ) {
+    var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);
+    function rotation(λ, φ) {
+      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;
+      return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), Math.asin(Math.max(-1, Math.min(1, k * cosδγ + y * sinδγ))) ];
+    }
+    rotation.invert = function(λ, φ) {
+      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;
+      return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), Math.asin(Math.max(-1, Math.min(1, k * cosδφ - x * sinδφ))) ];
+    };
+    return rotation;
+  }
+  var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {
+    return 1 / (1 + cosλcosφ);
+  }, function(ρ) {
+    return 2 * Math.atan(ρ);
+  });
+  (d3.geo.stereographic = function() {
+    return d3_geo_projection(d3_geo_stereographic);
+  }).raw = d3_geo_stereographic;
+  function d3_geo_azimuthal(scale, angle) {
+    function azimuthal(λ, φ) {
+      var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
+      return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];
+    }
+    azimuthal.invert = function(x, y) {
+      var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);
+      return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];
+    };
+    return azimuthal;
+  }
+  d3.geom = {};
+  d3.geom.hull = function(vertices) {
+    if (vertices.length < 3) return [];
+    var len = vertices.length, plen = len - 1, points = [], stack = [], i, j, h = 0, x1, y1, x2, y2, u, v, a, sp;
+    for (i = 1; i < len; ++i) {
+      if (vertices[i][1] < vertices[h][1]) {
+        h = i;
+      } else if (vertices[i][1] == vertices[h][1]) {
+        h = vertices[i][0] < vertices[h][0] ? i : h;
+      }
+    }
+    for (i = 0; i < len; ++i) {
+      if (i === h) continue;
+      y1 = vertices[i][1] - vertices[h][1];
+      x1 = vertices[i][0] - vertices[h][0];
+      points.push({
+        angle: Math.atan2(y1, x1),
+        index: i
+      });
+    }
+    points.sort(function(a, b) {
+      return a.angle - b.angle;
+    });
+    a = points[0].angle;
+    v = points[0].index;
+    u = 0;
+    for (i = 1; i < plen; ++i) {
+      j = points[i].index;
+      if (a == points[i].angle) {
+        x1 = vertices[v][0] - vertices[h][0];
+        y1 = vertices[v][1] - vertices[h][1];
+        x2 = vertices[j][0] - vertices[h][0];
+        y2 = vertices[j][1] - vertices[h][1];
+        if (x1 * x1 + y1 * y1 >= x2 * x2 + y2 * y2) {
+          points[i].index = -1;
+        } else {
+          points[u].index = -1;
+          a = points[i].angle;
+          u = i;
+          v = j;
+        }
+      } else {
+        a = points[i].angle;
+        u = i;
+        v = j;
+      }
+    }
+    stack.push(h);
+    for (i = 0, j = 0; i < 2; ++j) {
+      if (points[j].index !== -1) {
+        stack.push(points[j].index);
+        i++;
+      }
+    }
+    sp = stack.length;
+    for (;j < plen; ++j) {
+      if (points[j].index === -1) continue;
+      while (!d3_geom_hullCCW(stack[sp - 2], stack[sp - 1], points[j].index, vertices)) {
+        --sp;
+      }
+      stack[sp++] = points[j].index;
+    }
+    var poly = [];
+    for (i = 0; i < sp; ++i) {
+      poly.push(vertices[stack[i]]);
+    }
+    return poly;
+  };
+  function d3_geom_hullCCW(i1, i2, i3, v) {
+    var t, a, b, c, d, e, f;
+    t = v[i1];
+    a = t[0];
+    b = t[1];
+    t = v[i2];
+    c = t[0];
+    d = t[1];
+    t = v[i3];
+    e = t[0];
+    f = t[1];
+    return (f - b) * (c - a) - (d - b) * (e - a) > 0;
+  }
+  d3.geom.polygon = function(coordinates) {
+    coordinates.area = function() {
+      var i = 0, n = coordinates.length, area = coordinates[n - 1][1] * coordinates[0][0] - coordinates[n - 1][0] * coordinates[0][1];
+      while (++i < n) {
+        area += coordinates[i - 1][1] * coordinates[i][0] - coordinates[i - 1][0] * coordinates[i][1];
+      }
+      return area * .5;
+    };
+    coordinates.centroid = function(k) {
+      var i = -1, n = coordinates.length, x = 0, y = 0, a, b = coordinates[n - 1], c;
+      if (!arguments.length) k = -1 / (6 * coordinates.area());
+      while (++i < n) {
+        a = b;
+        b = coordinates[i];
+        c = a[0] * b[1] - b[0] * a[1];
+        x += (a[0] + b[0]) * c;
+        y += (a[1] + b[1]) * c;
+      }
+      return [ x * k, y * k ];
+    };
+    coordinates.clip = function(subject) {
+      var input, i = -1, n = coordinates.length, j, m, a = coordinates[n - 1], b, c, d;
+      while (++i < n) {
+        input = subject.slice();
+        subject.length = 0;
+        b = coordinates[i];
+        c = input[(m = input.length) - 1];
+        j = -1;
+        while (++j < m) {
+          d = input[j];
+          if (d3_geom_polygonInside(d, a, b)) {
+            if (!d3_geom_polygonInside(c, a, b)) {
+              subject.push(d3_geom_polygonIntersect(c, d, a, b));
+            }
+            subject.push(d);
+          } else if (d3_geom_polygonInside(c, a, b)) {
+            subject.push(d3_geom_polygonIntersect(c, d, a, b));
+          }
+          c = d;
+        }
+        a = b;
+      }
+      return subject;
+    };
+    return coordinates;
+  };
+  function d3_geom_polygonInside(p, a, b) {
+    return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
+  }
+  function d3_geom_polygonIntersect(c, d, a, b) {
+    var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
+    return [ x1 + ua * x21, y1 + ua * y21 ];
+  }
+  d3.geom.voronoi = function(vertices) {
+    var polygons = vertices.map(function() {
+      return [];
+    }), Z = 1e6;
+    d3_voronoi_tessellate(vertices, function(e) {
+      var s1, s2, x1, x2, y1, y2;
+      if (e.a === 1 && e.b >= 0) {
+        s1 = e.ep.r;
+        s2 = e.ep.l;
+      } else {
+        s1 = e.ep.l;
+        s2 = e.ep.r;
+      }
+      if (e.a === 1) {
+        y1 = s1 ? s1.y : -Z;
+        x1 = e.c - e.b * y1;
+        y2 = s2 ? s2.y : Z;
+        x2 = e.c - e.b * y2;
+      } else {
+        x1 = s1 ? s1.x : -Z;
+        y1 = e.c - e.a * x1;
+        x2 = s2 ? s2.x : Z;
+        y2 = e.c - e.a * x2;
+      }
+      var v1 = [ x1, y1 ], v2 = [ x2, y2 ];
+      polygons[e.region.l.index].push(v1, v2);
+      polygons[e.region.r.index].push(v1, v2);
+    });
+    polygons = polygons.map(function(polygon, i) {
+      var cx = vertices[i][0], cy = vertices[i][1], angle = polygon.map(function(v) {
+        return Math.atan2(v[0] - cx, v[1] - cy);
+      }), order = d3.range(polygon.length).sort(function(a, b) {
+        return angle[a] - angle[b];
+      });
+      return order.filter(function(d, i) {
+        return !i || angle[d] - angle[order[i - 1]] > ε;
+      }).map(function(d) {
+        return polygon[d];
+      });
+    });
+    polygons.forEach(function(polygon, i) {
+      var n = polygon.length;
+      if (!n) return polygon.push([ -Z, -Z ], [ -Z, Z ], [ Z, Z ], [ Z, -Z ]);
+      if (n > 2) return;
+      var p0 = vertices[i], p1 = polygon[0], p2 = polygon[1], x0 = p0[0], y0 = p0[1], x1 = p1[0], y1 = p1[1], x2 = p2[0], y2 = p2[1], dx = Math.abs(x2 - x1), dy = y2 - y1;
+      if (Math.abs(dy) < ε) {
+        var y = y0 < y1 ? -Z : Z;
+        polygon.push([ -Z, y ], [ Z, y ]);
+      } else if (dx < ε) {
+        var x = x0 < x1 ? -Z : Z;
+        polygon.push([ x, -Z ], [ x, Z ]);
+      } else {
+        var y = (x2 - x1) * (y1 - y0) < (x1 - x0) * (y2 - y1) ? Z : -Z, z = Math.abs(dy) - dx;
+        if (Math.abs(z) < ε) {
+          polygon.push([ dy < 0 ? y : -y, y ]);
+        } else {
+          if (z > 0) y *= -1;
+          polygon.push([ -Z, y ], [ Z, y ]);
+        }
+      }
+    });
+    return polygons;
+  };
+  var d3_voronoi_opposite = {
+    l: "r",
+    r: "l"
+  };
+  function d3_voronoi_tessellate(vertices, callback) {
+    var Sites = {
+      list: vertices.map(function(v, i) {
+        return {
+          index: i,
+          x: v[0],
+          y: v[1]
+        };
+      }).sort(function(a, b) {
+        return a.y < b.y ? -1 : a.y > b.y ? 1 : a.x < b.x ? -1 : a.x > b.x ? 1 : 0;
+      }),
+      bottomSite: null
+    };
+    var EdgeList = {
+      list: [],
+      leftEnd: null,
+      rightEnd: null,
+      init: function() {
+        EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l");
+        EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l");
+        EdgeList.leftEnd.r = EdgeList.rightEnd;
+        EdgeList.rightEnd.l = EdgeList.leftEnd;
+        EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd);
+      },
+      createHalfEdge: function(edge, side) {
+        return {
+          edge: edge,
+          side: side,
+          vertex: null,
+          l: null,
+          r: null
+        };
+      },
+      insert: function(lb, he) {
+        he.l = lb;
+        he.r = lb.r;
+        lb.r.l = he;
+        lb.r = he;
+      },
+      leftBound: function(p) {
+        var he = EdgeList.leftEnd;
+        do {
+          he = he.r;
+        } while (he != EdgeList.rightEnd && Geom.rightOf(he, p));
+        he = he.l;
+        return he;
+      },
+      del: function(he) {
+        he.l.r = he.r;
+        he.r.l = he.l;
+        he.edge = null;
+      },
+      right: function(he) {
+        return he.r;
+      },
+      left: function(he) {
+        return he.l;
+      },
+      leftRegion: function(he) {
+        return he.edge == null ? Sites.bottomSite : he.edge.region[he.side];
+      },
+      rightRegion: function(he) {
+        return he.edge == null ? Sites.bottomSite : he.edge.region[d3_voronoi_opposite[he.side]];
+      }
+    };
+    var Geom = {
+      bisect: function(s1, s2) {
+        var newEdge = {
+          region: {
+            l: s1,
+            r: s2
+          },
+          ep: {
+            l: null,
+            r: null
+          }
+        };
+        var dx = s2.x - s1.x, dy = s2.y - s1.y, adx = dx > 0 ? dx : -dx, ady = dy > 0 ? dy : -dy;
+        newEdge.c = s1.x * dx + s1.y * dy + (dx * dx + dy * dy) * .5;
+        if (adx > ady) {
+          newEdge.a = 1;
+          newEdge.b = dy / dx;
+          newEdge.c /= dx;
+        } else {
+          newEdge.b = 1;
+          newEdge.a = dx / dy;
+          newEdge.c /= dy;
+        }
+        return newEdge;
+      },
+      intersect: function(el1, el2) {
+        var e1 = el1.edge, e2 = el2.edge;
+        if (!e1 || !e2 || e1.region.r == e2.region.r) {
+          return null;
+        }
+        var d = e1.a * e2.b - e1.b * e2.a;
+        if (Math.abs(d) < 1e-10) {
+          return null;
+        }
+        var xint = (e1.c * e2.b - e2.c * e1.b) / d, yint = (e2.c * e1.a - e1.c * e2.a) / d, e1r = e1.region.r, e2r = e2.region.r, el, e;
+        if (e1r.y < e2r.y || e1r.y == e2r.y && e1r.x < e2r.x) {
+          el = el1;
+          e = e1;
+        } else {
+          el = el2;
+          e = e2;
+        }
+        var rightOfSite = xint >= e.region.r.x;
+        if (rightOfSite && el.side === "l" || !rightOfSite && el.side === "r") {
+          return null;
+        }
+        return {
+          x: xint,
+          y: yint
+        };
+      },
+      rightOf: function(he, p) {
+        var e = he.edge, topsite = e.region.r, rightOfSite = p.x > topsite.x;
+        if (rightOfSite && he.side === "l") {
+          return 1;
+        }
+        if (!rightOfSite && he.side === "r") {
+          return 0;
+        }
+        if (e.a === 1) {
+          var dyp = p.y - topsite.y, dxp = p.x - topsite.x, fast = 0, above = 0;
+          if (!rightOfSite && e.b < 0 || rightOfSite && e.b >= 0) {
+            above = fast = dyp >= e.b * dxp;
+          } else {
+            above = p.x + p.y * e.b > e.c;
+            if (e.b < 0) {
+              above = !above;
+            }
+            if (!above) {
+              fast = 1;
+            }
+          }
+          if (!fast) {
+            var dxs = topsite.x - e.region.l.x;
+            above = e.b * (dxp * dxp - dyp * dyp) < dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b);
+            if (e.b < 0) {
+              above = !above;
+            }
+          }
+        } else {
+          var yl = e.c - e.a * p.x, t1 = p.y - yl, t2 = p.x - topsite.x, t3 = yl - topsite.y;
+          above = t1 * t1 > t2 * t2 + t3 * t3;
+        }
+        return he.side === "l" ? above : !above;
+      },
+      endPoint: function(edge, side, site) {
+        edge.ep[side] = site;
+        if (!edge.ep[d3_voronoi_opposite[side]]) return;
+        callback(edge);
+      },
+      distance: function(s, t) {
+        var dx = s.x - t.x, dy = s.y - t.y;
+        return Math.sqrt(dx * dx + dy * dy);
+      }
+    };
+    var EventQueue = {
+      list: [],
+      insert: function(he, site, offset) {
+        he.vertex = site;
+        he.ystar = site.y + offset;
+        for (var i = 0, list = EventQueue.list, l = list.length; i < l; i++) {
+          var next = list[i];
+          if (he.ystar > next.ystar || he.ystar == next.ystar && site.x > next.vertex.x) {
+            continue;
+          } else {
+            break;
+          }
+        }
+        list.splice(i, 0, he);
+      },
+      del: function(he) {
+        for (var i = 0, ls = EventQueue.list, l = ls.length; i < l && ls[i] != he; ++i) {}
+        ls.splice(i, 1);
+      },
+      empty: function() {
+        return EventQueue.list.length === 0;
+      },
+      nextEvent: function(he) {
+        for (var i = 0, ls = EventQueue.list, l = ls.length; i < l; ++i) {
+          if (ls[i] == he) return ls[i + 1];
+        }
+        return null;
+      },
+      min: function() {
+        var elem = EventQueue.list[0];
+        return {
+          x: elem.vertex.x,
+          y: elem.ystar
+        };
+      },
+      extractMin: function() {
+        return EventQueue.list.shift();
+      }
+    };
+    EdgeList.init();
+    Sites.bottomSite = Sites.list.shift();
+    var newSite = Sites.list.shift(), newIntStar;
+    var lbnd, rbnd, llbnd, rrbnd, bisector;
+    var bot, top, temp, p, v;
+    var e, pm;
+    while (true) {
+      if (!EventQueue.empty()) {
+        newIntStar = EventQueue.min();
+      }
+      if (newSite && (EventQueue.empty() || newSite.y < newIntStar.y || newSite.y == newIntStar.y && newSite.x < newIntStar.x)) {
+        lbnd = EdgeList.leftBound(newSite);
+        rbnd = EdgeList.right(lbnd);
+        bot = EdgeList.rightRegion(lbnd);
+        e = Geom.bisect(bot, newSite);
+        bisector = EdgeList.createHalfEdge(e, "l");
+        EdgeList.insert(lbnd, bisector);
+        p = Geom.intersect(lbnd, bisector);
+        if (p) {
+          EventQueue.del(lbnd);
+          EventQueue.insert(lbnd, p, Geom.distance(p, newSite));
+        }
+        lbnd = bisector;
+        bisector = EdgeList.createHalfEdge(e, "r");
+        EdgeList.insert(lbnd, bisector);
+        p = Geom.intersect(bisector, rbnd);
+        if (p) {
+          EventQueue.insert(bisector, p, Geom.distance(p, newSite));
+        }
+        newSite = Sites.list.shift();
+      } else if (!EventQueue.empty()) {
+        lbnd = EventQueue.extractMin();
+        llbnd = EdgeList.left(lbnd);
+        rbnd = EdgeList.right(lbnd);
+        rrbnd = EdgeList.right(rbnd);
+        bot = EdgeList.leftRegion(lbnd);
+        top = EdgeList.rightRegion(rbnd);
+        v = lbnd.vertex;
+        Geom.endPoint(lbnd.edge, lbnd.side, v);
+        Geom.endPoint(rbnd.edge, rbnd.side, v);
+        EdgeList.del(lbnd);
+        EventQueue.del(rbnd);
+        EdgeList.del(rbnd);
+        pm = "l";
+        if (bot.y > top.y) {
+          temp = bot;
+          bot = top;
+          top = temp;
+          pm = "r";
+        }
+        e = Geom.bisect(bot, top);
+        bisector = EdgeList.createHalfEdge(e, pm);
+        EdgeList.insert(llbnd, bisector);
+        Geom.endPoint(e, d3_voronoi_opposite[pm], v);
+        p = Geom.intersect(llbnd, bisector);
+        if (p) {
+          EventQueue.del(llbnd);
+          EventQueue.insert(llbnd, p, Geom.distance(p, bot));
+        }
+        p = Geom.intersect(bisector, rrbnd);
+        if (p) {
+          EventQueue.insert(bisector, p, Geom.distance(p, bot));
+        }
+      } else {
+        break;
+      }
+    }
+    for (lbnd = EdgeList.right(EdgeList.leftEnd); lbnd != EdgeList.rightEnd; lbnd = EdgeList.right(lbnd)) {
+      callback(lbnd.edge);
+    }
+  }
+  d3.geom.delaunay = function(vertices) {
+    var edges = vertices.map(function() {
+      return [];
+    }), triangles = [];
+    d3_voronoi_tessellate(vertices, function(e) {
+      edges[e.region.l.index].push(vertices[e.region.r.index]);
+    });
+    edges.forEach(function(edge, i) {
+      var v = vertices[i], cx = v[0], cy = v[1];
+      edge.forEach(function(v) {
+        v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+      });
+      edge.sort(function(a, b) {
+        return a.angle - b.angle;
+      });
+      for (var j = 0, m = edge.length - 1; j < m; j++) {
+        triangles.push([ v, edge[j], edge[j + 1] ]);
+      }
+    });
+    return triangles;
+  };
+  d3.geom.quadtree = function(points, x1, y1, x2, y2) {
+    var p, i = -1, n = points.length;
+    if (arguments.length < 5) {
+      if (arguments.length === 3) {
+        y2 = y1;
+        x2 = x1;
+        y1 = x1 = 0;
+      } else {
+        x1 = y1 = Infinity;
+        x2 = y2 = -Infinity;
+        while (++i < n) {
+          p = points[i];
+          if (p.x < x1) x1 = p.x;
+          if (p.y < y1) y1 = p.y;
+          if (p.x > x2) x2 = p.x;
+          if (p.y > y2) y2 = p.y;
+        }
+      }
+    }
+    var dx = x2 - x1, dy = y2 - y1;
+    if (dx > dy) y2 = y1 + dx; else x2 = x1 + dy;
+    function insert(n, p, x1, y1, x2, y2) {
+      if (isNaN(p.x) || isNaN(p.y)) return;
+      if (n.leaf) {
+        var v = n.point;
+        if (v) {
+          if (Math.abs(v.x - p.x) + Math.abs(v.y - p.y) < .01) {
+            insertChild(n, p, x1, y1, x2, y2);
+          } else {
+            n.point = null;
+            insertChild(n, v, x1, y1, x2, y2);
+            insertChild(n, p, x1, y1, x2, y2);
+          }
+        } else {
+          n.point = p;
+        }
+      } else {
+        insertChild(n, p, x1, y1, x2, y2);
+      }
+    }
+    function insertChild(n, p, x1, y1, x2, y2) {
+      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = p.x >= sx, bottom = p.y >= sy, i = (bottom << 1) + right;
+      n.leaf = false;
+      n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
+      if (right) x1 = sx; else x2 = sx;
+      if (bottom) y1 = sy; else y2 = sy;
+      insert(n, p, x1, y1, x2, y2);
+    }
+    var root = d3_geom_quadtreeNode();
+    root.add = function(p) {
+      insert(root, p, x1, y1, x2, y2);
+    };
+    root.visit = function(f) {
+      d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2);
+    };
+    points.forEach(root.add);
+    return root;
+  };
+  function d3_geom_quadtreeNode() {
+    return {
+      leaf: true,
+      nodes: [],
+      point: null
+    };
+  }
+  function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
+    if (!f(node, x1, y1, x2, y2)) {
+      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
+      if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
+      if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
+      if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
+      if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
+    }
+  }
+  d3.time = {};
+  var d3_time = Date, d3_time_daySymbols = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ];
+  function d3_time_utc() {
+    this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
+  }
+  d3_time_utc.prototype = {
+    getDate: function() {
+      return this._.getUTCDate();
+    },
+    getDay: function() {
+      return this._.getUTCDay();
+    },
+    getFullYear: function() {
+      return this._.getUTCFullYear();
+    },
+    getHours: function() {
+      return this._.getUTCHours();
+    },
+    getMilliseconds: function() {
+      return this._.getUTCMilliseconds();
+    },
+    getMinutes: function() {
+      return this._.getUTCMinutes();
+    },
+    getMonth: function() {
+      return this._.getUTCMonth();
+    },
+    getSeconds: function() {
+      return this._.getUTCSeconds();
+    },
+    getTime: function() {
+      return this._.getTime();
+    },
+    getTimezoneOffset: function() {
+      return 0;
+    },
+    valueOf: function() {
+      return this._.valueOf();
+    },
+    setDate: function() {
+      d3_time_prototype.setUTCDate.apply(this._, arguments);
+    },
+    setDay: function() {
+      d3_time_prototype.setUTCDay.apply(this._, arguments);
+    },
+    setFullYear: function() {
+      d3_time_prototype.setUTCFullYear.apply(this._, arguments);
+    },
+    setHours: function() {
+      d3_time_prototype.setUTCHours.apply(this._, arguments);
+    },
+    setMilliseconds: function() {
+      d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);
+    },
+    setMinutes: function() {
+      d3_time_prototype.setUTCMinutes.apply(this._, arguments);
+    },
+    setMonth: function() {
+      d3_time_prototype.setUTCMonth.apply(this._, arguments);
+    },
+    setSeconds: function() {
+      d3_time_prototype.setUTCSeconds.apply(this._, arguments);
+    },
+    setTime: function() {
+      d3_time_prototype.setTime.apply(this._, arguments);
+    }
+  };
+  var d3_time_prototype = Date.prototype;
+  var d3_time_formatDateTime = "%a %b %e %X %Y", d3_time_formatDate = "%m/%d/%Y", d3_time_formatTime = "%H:%M:%S";
+  var d3_time_days = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], d3_time_dayAbbreviations = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], d3_time_months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], d3_time_monthAbbreviations = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
+  d3.time.format = function(template) {
+    var n = template.length;
+    function format(date) {
+      var string = [], i = -1, j = 0, c, p, f;
+      while (++i < n) {
+        if (template.charCodeAt(i) === 37) {
+          string.push(template.substring(j, i));
+          if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
+          if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
+          string.push(c);
+          j = i + 1;
+        }
+      }
+      string.push(template.substring(j, i));
+      return string.join("");
+    }
+    format.parse = function(string) {
+      var d = {
+        y: 1900,
+        m: 0,
+        d: 1,
+        H: 0,
+        M: 0,
+        S: 0,
+        L: 0
+      }, i = d3_time_parse(d, template, string, 0);
+      if (i != string.length) return null;
+      if ("p" in d) d.H = d.H % 12 + d.p * 12;
+      var date = new d3_time();
+      date.setFullYear(d.y, d.m, d.d);
+      date.setHours(d.H, d.M, d.S, d.L);
+      return date;
+    };
+    format.toString = function() {
+      return template;
+    };
+    return format;
+  };
+  function d3_time_parse(date, template, string, j) {
+    var c, p, i = 0, n = template.length, m = string.length;
+    while (i < n) {
+      if (j >= m) return -1;
+      c = template.charCodeAt(i++);
+      if (c === 37) {
+        p = d3_time_parsers[template.charAt(i++)];
+        if (!p || (j = p(date, string, j)) < 0) return -1;
+      } else if (c != string.charCodeAt(j++)) {
+        return -1;
+      }
+    }
+    return j;
+  }
+  function d3_time_formatRe(names) {
+    return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
+  }
+  function d3_time_formatLookup(names) {
+    var map = new d3_Map(), i = -1, n = names.length;
+    while (++i < n) map.set(names[i].toLowerCase(), i);
+    return map;
+  }
+  function d3_time_formatPad(value, fill, width) {
+    value += "";
+    var length = value.length;
+    return length < width ? new Array(width - length + 1).join(fill) + value : value;
+  }
+  var d3_time_dayRe = d3_time_formatRe(d3_time_days), d3_time_dayAbbrevRe = d3_time_formatRe(d3_time_dayAbbreviations), d3_time_monthRe = d3_time_formatRe(d3_time_months), d3_time_monthLookup = d3_time_formatLookup(d3_time_months), d3_time_monthAbbrevRe = d3_time_formatRe(d3_time_monthAbbreviations), d3_time_monthAbbrevLookup = d3_time_formatLookup(d3_time_monthAbbreviations);
+  var d3_time_formatPads = {
+    "-": "",
+    _: " ",
+    "0": "0"
+  };
+  var d3_time_formats = {
+    a: function(d) {
+      return d3_time_dayAbbreviations[d.getDay()];
+    },
+    A: function(d) {
+      return d3_time_days[d.getDay()];
+    },
+    b: function(d) {
+      return d3_time_monthAbbreviations[d.getMonth()];
+    },
+    B: function(d) {
+      return d3_time_months[d.getMonth()];
+    },
+    c: d3.time.format(d3_time_formatDateTime),
+    d: function(d, p) {
+      return d3_time_formatPad(d.getDate(), p, 2);
+    },
+    e: function(d, p) {
+      return d3_time_formatPad(d.getDate(), p, 2);
+    },
+    H: function(d, p) {
+      return d3_time_formatPad(d.getHours(), p, 2);
+    },
+    I: function(d, p) {
+      return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);
+    },
+    j: function(d, p) {
+      return d3_time_formatPad(1 + d3.time.dayOfYear(d), p, 3);
+    },
+    L: function(d, p) {
+      return d3_time_formatPad(d.getMilliseconds(), p, 3);
+    },
+    m: function(d, p) {
+      return d3_time_formatPad(d.getMonth() + 1, p, 2);
+    },
+    M: function(d, p) {
+      return d3_time_formatPad(d.getMinutes(), p, 2);
+    },
+    p: function(d) {
+      return d.getHours() >= 12 ? "PM" : "AM";
+    },
+    S: function(d, p) {
+      return d3_time_formatPad(d.getSeconds(), p, 2);
+    },
+    U: function(d, p) {
+      return d3_time_formatPad(d3.time.sundayOfYear(d), p, 2);
+    },
+    w: function(d) {
+      return d.getDay();
+    },
+    W: function(d, p) {
+      return d3_time_formatPad(d3.time.mondayOfYear(d), p, 2);
+    },
+    x: d3.time.format(d3_time_formatDate),
+    X: d3.time.format(d3_time_formatTime),
+    y: function(d, p) {
+      return d3_time_formatPad(d.getFullYear() % 100, p, 2);
+    },
+    Y: function(d, p) {
+      return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);
+    },
+    Z: d3_time_zone,
+    "%": function() {
+      return "%";
+    }
+  };
+  var d3_time_parsers = {
+    a: d3_time_parseWeekdayAbbrev,
+    A: d3_time_parseWeekday,
+    b: d3_time_parseMonthAbbrev,
+    B: d3_time_parseMonth,
+    c: d3_time_parseLocaleFull,
+    d: d3_time_parseDay,
+    e: d3_time_parseDay,
+    H: d3_time_parseHour24,
+    I: d3_time_parseHour24,
+    L: d3_time_parseMilliseconds,
+    m: d3_time_parseMonthNumber,
+    M: d3_time_parseMinutes,
+    p: d3_time_parseAmPm,
+    S: d3_time_parseSeconds,
+    x: d3_time_parseLocaleDate,
+    X: d3_time_parseLocaleTime,
+    y: d3_time_parseYear,
+    Y: d3_time_parseFullYear
+  };
+  function d3_time_parseWeekdayAbbrev(date, string, i) {
+    d3_time_dayAbbrevRe.lastIndex = 0;
+    var n = d3_time_dayAbbrevRe.exec(string.substring(i));
+    return n ? i += n[0].length : -1;
+  }
+  function d3_time_parseWeekday(date, string, i) {
+    d3_time_dayRe.lastIndex = 0;
+    var n = d3_time_dayRe.exec(string.substring(i));
+    return n ? i += n[0].length : -1;
+  }
+  function d3_time_parseMonthAbbrev(date, string, i) {
+    d3_time_monthAbbrevRe.lastIndex = 0;
+    var n = d3_time_monthAbbrevRe.exec(string.substring(i));
+    return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i += n[0].length) : -1;
+  }
+  function d3_time_parseMonth(date, string, i) {
+    d3_time_monthRe.lastIndex = 0;
+    var n = d3_time_monthRe.exec(string.substring(i));
+    return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i += n[0].length) : -1;
+  }
+  function d3_time_parseLocaleFull(date, string, i) {
+    return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
+  }
+  function d3_time_parseLocaleDate(date, string, i) {
+    return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
+  }
+  function d3_time_parseLocaleTime(date, string, i) {
+    return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
+  }
+  function d3_time_parseFullYear(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 4));
+    return n ? (date.y = +n[0], i += n[0].length) : -1;
+  }
+  function d3_time_parseYear(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+    return n ? (date.y = d3_time_expandYear(+n[0]), i += n[0].length) : -1;
+  }
+  function d3_time_expandYear(d) {
+    return d + (d > 68 ? 1900 : 2e3);
+  }
+  function d3_time_parseMonthNumber(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+    return n ? (date.m = n[0] - 1, i += n[0].length) : -1;
+  }
+  function d3_time_parseDay(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+    return n ? (date.d = +n[0], i += n[0].length) : -1;
+  }
+  function d3_time_parseHour24(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+    return n ? (date.H = +n[0], i += n[0].length) : -1;
+  }
+  function d3_time_parseMinutes(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+    return n ? (date.M = +n[0], i += n[0].length) : -1;
+  }
+  function d3_time_parseSeconds(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+    return n ? (date.S = +n[0], i += n[0].length) : -1;
+  }
+  function d3_time_parseMilliseconds(date, string, i) {
+    d3_time_numberRe.lastIndex = 0;
+    var n = d3_time_numberRe.exec(string.substring(i, i + 3));
+    return n ? (date.L = +n[0], i += n[0].length) : -1;
+  }
+  var d3_time_numberRe = /^\s*\d+/;
+  function d3_time_parseAmPm(date, string, i) {
+    var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase());
+    return n == null ? -1 : (date.p = n, i);
+  }
+  var d3_time_amPmLookup = d3.map({
+    am: 0,
+    pm: 1
+  });
+  function d3_time_zone(d) {
+    var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(Math.abs(z) / 60), zm = Math.abs(z) % 60;
+    return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
+  }
+  d3.time.format.utc = function(template) {
+    var local = d3.time.format(template);
+    function format(date) {
+      try {
+        d3_time = d3_time_utc;
+        var utc = new d3_time();
+        utc._ = date;
+        return local(utc);
+      } finally {
+        d3_time = Date;
+      }
+    }
+    format.parse = function(string) {
+      try {
+        d3_time = d3_time_utc;
+        var date = local.parse(string);
+        return date && date._;
+      } finally {
+        d3_time = Date;
+      }
+    };
+    format.toString = local.toString;
+    return format;
+  };
+  var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");
+  d3.time.format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso;
+  function d3_time_formatIsoNative(date) {
+    return date.toISOString();
+  }
+  d3_time_formatIsoNative.parse = function(string) {
+    var date = new Date(string);
+    return isNaN(date) ? null : date;
+  };
+  d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
+  function d3_time_interval(local, step, number) {
+    function round(date) {
+      var d0 = local(date), d1 = offset(d0, 1);
+      return date - d0 < d1 - date ? d0 : d1;
+    }
+    function ceil(date) {
+      step(date = local(new d3_time(date - 1)), 1);
+      return date;
+    }
+    function offset(date, k) {
+      step(date = new d3_time(+date), k);
+      return date;
+    }
+    function range(t0, t1, dt) {
+      var time = ceil(t0), times = [];
+      if (dt > 1) {
+        while (time < t1) {
+          if (!(number(time) % dt)) times.push(new Date(+time));
+          step(time, 1);
+        }
+      } else {
+        while (time < t1) times.push(new Date(+time)), step(time, 1);
+      }
+      return times;
+    }
+    function range_utc(t0, t1, dt) {
+      try {
+        d3_time = d3_time_utc;
+        var utc = new d3_time_utc();
+        utc._ = t0;
+        return range(utc, t1, dt);
+      } finally {
+        d3_time = Date;
+      }
+    }
+    local.floor = local;
+    local.round = round;
+    local.ceil = ceil;
+    local.offset = offset;
+    local.range = range;
+    var utc = local.utc = d3_time_interval_utc(local);
+    utc.floor = utc;
+    utc.round = d3_time_interval_utc(round);
+    utc.ceil = d3_time_interval_utc(ceil);
+    utc.offset = d3_time_interval_utc(offset);
+    utc.range = range_utc;
+    return local;
+  }
+  function d3_time_interval_utc(method) {
+    return function(date, k) {
+      try {
+        d3_time = d3_time_utc;
+        var utc = new d3_time_utc();
+        utc._ = date;
+        return method(utc, k)._;
+      } finally {
+        d3_time = Date;
+      }
+    };
+  }
+  d3.time.second = d3_time_interval(function(date) {
+    return new d3_time(Math.floor(date / 1e3) * 1e3);
+  }, function(date, offset) {
+    date.setTime(date.getTime() + Math.floor(offset) * 1e3);
+  }, function(date) {
+    return date.getSeconds();
+  });
+  d3.time.seconds = d3.time.second.range;
+  d3.time.seconds.utc = d3.time.second.utc.range;
+  d3.time.minute = d3_time_interval(function(date) {
+    return new d3_time(Math.floor(date / 6e4) * 6e4);
+  }, function(date, offset) {
+    date.setTime(date.getTime() + Math.floor(offset) * 6e4);
+  }, function(date) {
+    return date.getMinutes();
+  });
+  d3.time.minutes = d3.time.minute.range;
+  d3.time.minutes.utc = d3.time.minute.utc.range;
+  d3.time.hour = d3_time_interval(function(date) {
+    var timezone = date.getTimezoneOffset() / 60;
+    return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
+  }, function(date, offset) {
+    date.setTime(date.getTime() + Math.floor(offset) * 36e5);
+  }, function(date) {
+    return date.getHours();
+  });
+  d3.time.hours = d3.time.hour.range;
+  d3.time.hours.utc = d3.time.hour.utc.range;
+  d3.time.day = d3_time_interval(function(date) {
+    var day = new d3_time(1970, 0);
+    day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+    return day;
+  }, function(date, offset) {
+    date.setDate(date.getDate() + offset);
+  }, function(date) {
+    return date.getDate() - 1;
+  });
+  d3.time.days = d3.time.day.range;
+  d3.time.days.utc = d3.time.day.utc.range;
+  d3.time.dayOfYear = function(date) {
+    var year = d3.time.year(date);
+    return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
+  };
+  d3_time_daySymbols.forEach(function(day, i) {
+    day = day.toLowerCase();
+    i = 7 - i;
+    var interval = d3.time[day] = d3_time_interval(function(date) {
+      (date = d3.time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
+      return date;
+    }, function(date, offset) {
+      date.setDate(date.getDate() + Math.floor(offset) * 7);
+    }, function(date) {
+      var day = d3.time.year(date).getDay();
+      return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
+    });
+    d3.time[day + "s"] = interval.range;
+    d3.time[day + "s"].utc = interval.utc.range;
+    d3.time[day + "OfYear"] = function(date) {
+      var day = d3.time.year(date).getDay();
+      return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7);
+    };
+  });
+  d3.time.week = d3.time.sunday;
+  d3.time.weeks = d3.time.sunday.range;
+  d3.time.weeks.utc = d3.time.sunday.utc.range;
+  d3.time.weekOfYear = d3.time.sundayOfYear;
+  d3.time.month = d3_time_interval(function(date) {
+    date = d3.time.day(date);
+    date.setDate(1);
+    return date;
+  }, function(date, offset) {
+    date.setMonth(date.getMonth() + offset);
+  }, function(date) {
+    return date.getMonth();
+  });
+  d3.time.months = d3.time.month.range;
+  d3.time.months.utc = d3.time.month.utc.range;
+  d3.time.year = d3_time_interval(function(date) {
+    date = d3.time.day(date);
+    date.setMonth(0, 1);
+    return date;
+  }, function(date, offset) {
+    date.setFullYear(date.getFullYear() + offset);
+  }, function(date) {
+    return date.getFullYear();
+  });
+  d3.time.years = d3.time.year.range;
+  d3.time.years.utc = d3.time.year.utc.range;
+  function d3_time_scale(linear, methods, format) {
+    function scale(x) {
+      return linear(x);
+    }
+    scale.invert = function(x) {
+      return d3_time_scaleDate(linear.invert(x));
+    };
+    scale.domain = function(x) {
+      if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
+      linear.domain(x);
+      return scale;
+    };
+    scale.nice = function(m) {
+      return scale.domain(d3_scale_nice(scale.domain(), function() {
+        return m;
+      }));
+    };
+    scale.ticks = function(m, k) {
+      var extent = d3_time_scaleExtent(scale.domain());
+      if (typeof m !== "function") {
+        var span = extent[1] - extent[0], target = span / m, i = d3.bisect(d3_time_scaleSteps, target);
+        if (i == d3_time_scaleSteps.length) return methods.year(extent, m);
+        if (!i) return linear.ticks(m).map(d3_time_scaleDate);
+        if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
+        m = methods[i];
+        k = m[1];
+        m = m[0].range;
+      }
+      return m(extent[0], new Date(+extent[1] + 1), k);
+    };
+    scale.tickFormat = function() {
+      return format;
+    };
+    scale.copy = function() {
+      return d3_time_scale(linear.copy(), methods, format);
+    };
+    return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
+  }
+  function d3_time_scaleExtent(domain) {
+    var start = domain[0], stop = domain[domain.length - 1];
+    return start < stop ? [ start, stop ] : [ stop, start ];
+  }
+  function d3_time_scaleDate(t) {
+    return new Date(t);
+  }
+  function d3_time_scaleFormat(formats) {
+    return function(date) {
+      var i = formats.length - 1, f = formats[i];
+      while (!f[1](date)) f = formats[--i];
+      return f[0](date);
+    };
+  }
+  function d3_time_scaleSetYear(y) {
+    var d = new Date(y, 0, 1);
+    d.setFullYear(y);
+    return d;
+  }
+  function d3_time_scaleGetYear(d) {
+    var y = d.getFullYear(), d0 = d3_time_scaleSetYear(y), d1 = d3_time_scaleSetYear(y + 1);
+    return y + (d - d0) / (d1 - d0);
+  }
+  var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];
+  var d3_time_scaleLocalMethods = [ [ d3.time.second, 1 ], [ d3.time.second, 5 ], [ d3.time.second, 15 ], [ d3.time.second, 30 ], [ d3.time.minute, 1 ], [ d3.time.minute, 5 ], [ d3.time.minute, 15 ], [ d3.time.minute, 30 ], [ d3.time.hour, 1 ], [ d3.time.hour, 3 ], [ d3.time.hour, 6 ], [ d3.time.hour, 12 ], [ d3.time.day, 1 ], [ d3.time.day, 2 ], [ d3.time.week, 1 ], [ d3.time.month, 1 ], [ d3.time.month, 3 ], [ d3.time.year, 1 ] ];
+  var d3_time_scaleLocalFormats = [ [ d3.time.format("%Y"), d3_true ], [ d3.time.format("%B"), function(d) {
+    return d.getMonth();
+  } ], [ d3.time.format("%b %d"), function(d) {
+    return d.getDate() != 1;
+  } ], [ d3.time.format("%a %d"), function(d) {
+    return d.getDay() && d.getDate() != 1;
+  } ], [ d3.time.format("%I %p"), function(d) {
+    return d.getHours();
+  } ], [ d3.time.format("%I:%M"), function(d) {
+    return d.getMinutes();
+  } ], [ d3.time.format(":%S"), function(d) {
+    return d.getSeconds();
+  } ], [ d3.time.format(".%L"), function(d) {
+    return d.getMilliseconds();
+  } ] ];
+  var d3_time_scaleLinear = d3.scale.linear(), d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
+  d3_time_scaleLocalMethods.year = function(extent, m) {
+    return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear);
+  };
+  d3.time.scale = function() {
+    return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
+  };
+  var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) {
+    return [ m[0].utc, m[1] ];
+  });
+  var d3_time_scaleUTCFormats = [ [ d3.time.format.utc("%Y"), d3_true ], [ d3.time.format.utc("%B"), function(d) {
+    return d.getUTCMonth();
+  } ], [ d3.time.format.utc("%b %d"), function(d) {
+    return d.getUTCDate() != 1;
+  } ], [ d3.time.format.utc("%a %d"), function(d) {
+    return d.getUTCDay() && d.getUTCDate() != 1;
+  } ], [ d3.time.format.utc("%I %p"), function(d) {
+    return d.getUTCHours();
+  } ], [ d3.time.format.utc("%I:%M"), function(d) {
+    return d.getUTCMinutes();
+  } ], [ d3.time.format.utc(":%S"), function(d) {
+    return d.getUTCSeconds();
+  } ], [ d3.time.format.utc(".%L"), function(d) {
+    return d.getUTCMilliseconds();
+  } ] ];
+  var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
+  function d3_time_scaleUTCSetYear(y) {
+    var d = new Date(Date.UTC(y, 0, 1));
+    d.setUTCFullYear(y);
+    return d;
+  }
+  function d3_time_scaleUTCGetYear(d) {
+    var y = d.getUTCFullYear(), d0 = d3_time_scaleUTCSetYear(y), d1 = d3_time_scaleUTCSetYear(y + 1);
+    return y + (d - d0) / (d1 - d0);
+  }
+  d3_time_scaleUTCMethods.year = function(extent, m) {
+    return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear);
+  };
+  d3.time.scale.utc = function() {
+    return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
+  };
+  return d3;
+}();
\ No newline at end of file
diff --git a/web/ons-demo/js/d3.v3.min.js b/web/ons-demo/js/d3.v3.min.js
new file mode 100644
index 0000000..7f3faa4
--- /dev/null
+++ b/web/ons-demo/js/d3.v3.min.js
@@ -0,0 +1,4 @@
+d3=function(){function t(t){return t.target}function n(t){return t.source}function e(t,n){try{for(var e in n)Object.defineProperty(t.prototype,e,{value:n[e],enumerable:!1})}catch(r){t.prototype=n}}function r(t){for(var n=-1,e=t.length,r=[];e>++n;)r.push(t[n]);return r}function u(t){return Array.prototype.slice.call(t)}function i(){}function a(t){return t}function o(){return!0}function c(t){return"function"==typeof t?t:function(){return t}}function l(t,n,e){return function(){var r=e.apply(n,arguments);return r===n?t:r}}function f(t){return null!=t&&!isNaN(t)}function s(t){return t.length}function h(t){return t.trim().replace(/\s+/g," ")}function g(t){for(var n=1;t*n%1;)n*=10;return n}function p(t){return 1===t.length?function(n,e){t(null==n?e:null)}:t}function d(t){return t.responseText}function m(t){return JSON.parse(t.responseText)}function v(t){var n=Li.createRange();return n.selectNode(Li.body),n.createContextualFragment(t.responseText)}function y(t){return t.responseXML}function M(){}function b(t){function n(){for(var n,r=e,u=-1,i=r.length;i>++u;)(n=r[u].on)&&n.apply(this,arguments);return t}var e=[],r=new i;return n.on=function(n,u){var i,a=r.get(n);return 2>arguments.length?a&&a.on:(a&&(a.on=null,e=e.slice(0,i=e.indexOf(a)).concat(e.slice(i+1)),r.remove(n)),u&&e.push(r.set(n,{on:u})),t)},n}function x(t,n){return n-(t?Math.ceil(Math.log(t)/Math.LN10):1)}function _(t){return t+""}function w(t,n){var e=Math.pow(10,3*Math.abs(8-n));return{scale:n>8?function(t){return t/e}:function(t){return t*e},symbol:t}}function S(t){return function(n){return 0>=n?0:n>=1?1:t(n)}}function k(t){return function(n){return 1-t(1-n)}}function E(t){return function(n){return.5*(.5>n?t(2*n):2-t(2-2*n))}}function A(t){return t*t}function N(t){return t*t*t}function T(t){if(0>=t)return 0;if(t>=1)return 1;var n=t*t,e=n*t;return 4*(.5>t?e:3*(t-n)+e-.75)}function q(t){return function(n){return Math.pow(n,t)}}function C(t){return 1-Math.cos(t*Ti/2)}function z(t){return Math.pow(2,10*(t-1))}function D(t){return 1-Math.sqrt(1-t*t)}function L(t,n){var e;return 2>arguments.length&&(n=.45),arguments.length?e=n/(2*Ti)*Math.asin(1/t):(t=1,e=n/4),function(r){return 1+t*Math.pow(2,10*-r)*Math.sin(2*(r-e)*Ti/n)}}function F(t){return t||(t=1.70158),function(n){return n*n*((t+1)*n-t)}}function H(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function j(){Ci.event.stopPropagation(),Ci.event.preventDefault()}function P(){for(var t,n=Ci.event;t=n.sourceEvent;)n=t;return n}function R(t){for(var n=new M,e=0,r=arguments.length;r>++e;)n[arguments[e]]=b(n);return n.of=function(e,r){return function(u){try{var i=u.sourceEvent=Ci.event;u.target=t,Ci.event=u,n[u.type].apply(e,r)}finally{Ci.event=i}}},n}function O(t){var n=[t.a,t.b],e=[t.c,t.d],r=U(n),u=Y(n,e),i=U(I(e,n,-u))||0;n[0]*e[1]<e[0]*n[1]&&(n[0]*=-1,n[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(n[1],n[0]):Math.atan2(-e[0],e[1]))*Di,this.translate=[t.e,t.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Di:0}function Y(t,n){return t[0]*n[0]+t[1]*n[1]}function U(t){var n=Math.sqrt(Y(t,t));return n&&(t[0]/=n,t[1]/=n),n}function I(t,n,e){return t[0]+=e*n[0],t[1]+=e*n[1],t}function V(t){return"transform"==t?Ci.interpolateTransform:Ci.interpolate}function Z(t,n){return n=n-(t=+t)?1/(n-t):0,function(e){return(e-t)*n}}function X(t,n){return n=n-(t=+t)?1/(n-t):0,function(e){return Math.max(0,Math.min(1,(e-t)*n))}}function B(){}function $(t,n,e){return new J(t,n,e)}function J(t,n,e){this.r=t,this.g=n,this.b=e}function G(t){return 16>t?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function K(t,n,e){var r,u,i,a=0,o=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(t))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return n(nn(u[0]),nn(u[1]),nn(u[2]))}return(i=oa.get(t))?n(i.r,i.g,i.b):(null!=t&&"#"===t.charAt(0)&&(4===t.length?(a=t.charAt(1),a+=a,o=t.charAt(2),o+=o,c=t.charAt(3),c+=c):7===t.length&&(a=t.substring(1,3),o=t.substring(3,5),c=t.substring(5,7)),a=parseInt(a,16),o=parseInt(o,16),c=parseInt(c,16)),n(a,o,c))}function W(t,n,e){var r,u,i=Math.min(t/=255,n/=255,e/=255),a=Math.max(t,n,e),o=a-i,c=(a+i)/2;return o?(u=.5>c?o/(a+i):o/(2-a-i),r=t==a?(n-e)/o+(e>n?6:0):n==a?(e-t)/o+2:(t-n)/o+4,r*=60):u=r=0,en(r,u,c)}function Q(t,n,e){t=tn(t),n=tn(n),e=tn(e);var r=pn((.4124564*t+.3575761*n+.1804375*e)/sa),u=pn((.2126729*t+.7151522*n+.072175*e)/ha),i=pn((.0193339*t+.119192*n+.9503041*e)/ga);return ln(116*u-16,500*(r-u),200*(u-i))}function tn(t){return.04045>=(t/=255)?t/12.92:Math.pow((t+.055)/1.055,2.4)}function nn(t){var n=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*n):n}function en(t,n,e){return new rn(t,n,e)}function rn(t,n,e){this.h=t,this.s=n,this.l=e}function un(t,n,e){function r(t){return t>360?t-=360:0>t&&(t+=360),60>t?i+(a-i)*t/60:180>t?a:240>t?i+(a-i)*(240-t)/60:i}function u(t){return Math.round(255*r(t))}var i,a;return t%=360,0>t&&(t+=360),n=0>n?0:n>1?1:n,e=0>e?0:e>1?1:e,a=.5>=e?e*(1+n):e+n-e*n,i=2*e-a,$(u(t+120),u(t),u(t-120))}function an(t,n,e){return new on(t,n,e)}function on(t,n,e){this.h=t,this.c=n,this.l=e}function cn(t,n,e){return ln(e,Math.cos(t*=zi)*n,Math.sin(t)*n)}function ln(t,n,e){return new fn(t,n,e)}function fn(t,n,e){this.l=t,this.a=n,this.b=e}function sn(t,n,e){var r=(t+16)/116,u=r+n/500,i=r-e/200;return u=gn(u)*sa,r=gn(r)*ha,i=gn(i)*ga,$(dn(3.2404542*u-1.5371385*r-.4985314*i),dn(-.969266*u+1.8760108*r+.041556*i),dn(.0556434*u-.2040259*r+1.0572252*i))}function hn(t,n,e){return an(180*(Math.atan2(e,n)/Ti),Math.sqrt(n*n+e*e),t)}function gn(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function pn(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function dn(t){return Math.round(255*(.00304>=t?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function mn(t){return Vi(t,ba),t}function vn(t){return function(){return da(t,this)}}function yn(t){return function(){return ma(t,this)}}function Mn(t,n){function e(){this.removeAttribute(t)}function r(){this.removeAttributeNS(t.space,t.local)}function u(){this.setAttribute(t,n)}function i(){this.setAttributeNS(t.space,t.local,n)}function a(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}function o(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}return t=Ci.ns.qualify(t),null==n?t.local?r:e:"function"==typeof n?t.local?o:a:t.local?i:u}function bn(t){return RegExp("(?:^|\\s+)"+Ci.requote(t)+"(?:\\s+|$)","g")}function xn(t,n){function e(){for(var e=-1;u>++e;)t[e](this,n)}function r(){for(var e=-1,r=n.apply(this,arguments);u>++e;)t[e](this,r)}t=t.trim().split(/\s+/).map(_n);var u=t.length;return"function"==typeof n?r:e}function _n(t){var n=bn(t);return function(e,r){if(u=e.classList)return r?u.add(t):u.remove(t);var u=e.className,i=null!=u.baseVal,a=i?u.baseVal:u;r?(n.lastIndex=0,n.test(a)||(a=h(a+" "+t),i?u.baseVal=a:e.className=a)):a&&(a=h(a.replace(n," ")),i?u.baseVal=a:e.className=a)}}function wn(t,n,e){function r(){this.style.removeProperty(t)}function u(){this.style.setProperty(t,n,e)}function i(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}return null==n?r:"function"==typeof n?i:u}function Sn(t,n){function e(){delete this[t]}function r(){this[t]=n}function u(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}return null==n?e:"function"==typeof n?u:r}function kn(t){return{__data__:t}}function En(t){return function(){return Ma(this,t)}}function An(t){return arguments.length||(t=Ci.ascending),function(n,e){return!n-!e||t(n.__data__,e.__data__)}}function Nn(t,n,e){function r(){var n=this[i];n&&(this.removeEventListener(t,n,n.$),delete this[i])}function u(){function u(t){var e=Ci.event;Ci.event=t,o[0]=a.__data__;try{n.apply(a,o)}finally{Ci.event=e}}var a=this,o=Ui(arguments);r.call(this),this.addEventListener(t,this[i]=u,u.$=e),u._=n}var i="__on"+t,a=t.indexOf(".");return a>0&&(t=t.substring(0,a)),n?u:r}function Tn(t,n){for(var e=0,r=t.length;r>e;e++)for(var u,i=t[e],a=0,o=i.length;o>a;a++)(u=i[a])&&n(u,a,e);return t}function qn(t){return Vi(t,_a),t}function Cn(t,n){return Vi(t,Sa),t.id=n,t}function zn(t,n,e,r){var u=t.__transition__||(t.__transition__={active:0,count:0}),a=u[e];if(!a){var o=r.time;return a=u[e]={tween:new i,event:Ci.dispatch("start","end"),time:o,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Ci.timer(function(r){function i(r){return u.active>e?l():(u.active=e,h.start.call(t,f,n),a.tween.forEach(function(e,r){(r=r.call(t,f,n))&&d.push(r)}),c(r)||Ci.timer(c,0,o),1)}function c(r){if(u.active!==e)return l();for(var i=(r-g)/p,a=s(i),o=d.length;o>0;)d[--o].call(t,a);return i>=1?(l(),h.end.call(t,f,n),1):void 0}function l(){return--u.count?delete u[e]:delete t.__transition__,1}var f=t.__data__,s=a.ease,h=a.event,g=a.delay,p=a.duration,d=[];return r>=g?i(r):Ci.timer(i,g,o),1},0,o),a}}function Dn(t){return null==t&&(t=""),function(){this.textContent=t}}function Ln(t,n,e,r){var u=t.id;return Tn(t,"function"==typeof e?function(t,i,a){t.__transition__[u].tween.set(n,r(e.call(t,t.__data__,i,a)))}:(e=r(e),function(t){t.__transition__[u].tween.set(n,e)}))}function Fn(){for(var t,n=Date.now(),e=Ca;e;)t=n-e.then,t>=e.delay&&(e.flush=e.callback(t)),e=e.next;var r=Hn()-n;r>24?(isFinite(r)&&(clearTimeout(Na),Na=setTimeout(Fn,r)),Aa=0):(Aa=1,za(Fn))}function Hn(){for(var t=null,n=Ca,e=1/0;n;)n.flush?(delete qa[n.callback.id],n=t?t.next=n.next:Ca=n.next):(e=Math.min(e,n.then+n.delay),n=(t=n).next);return e}function jn(t,n){var e=t.ownerSVGElement||t;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>Da&&(Fi.scrollX||Fi.scrollY)){e=Ci.select(Li.body).append("svg").style("position","absolute").style("top",0).style("left",0);var u=e[0][0].getScreenCTM();Da=!(u.f||u.e),e.remove()}return Da?(r.x=n.pageX,r.y=n.pageY):(r.x=n.clientX,r.y=n.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var i=t.getBoundingClientRect();return[n.clientX-i.left-t.clientLeft,n.clientY-i.top-t.clientTop]}function Pn(){}function Rn(t){var n=t[0],e=t[t.length-1];return e>n?[n,e]:[e,n]}function On(t){return t.rangeExtent?t.rangeExtent():Rn(t.range())}function Yn(t,n){var e,r=0,u=t.length-1,i=t[r],a=t[u];return i>a&&(e=r,r=u,u=e,e=i,i=a,a=e),(n=n(a-i))&&(t[r]=n.floor(i),t[u]=n.ceil(a)),t}function Un(){return Math}function In(t,n,e,r){function u(){var u=Math.min(t.length,n.length)>2?Gn:Jn,c=r?X:Z;return a=u(t,n,c,e),o=u(n,t,c,Ci.interpolate),i}function i(t){return a(t)}var a,o;return i.invert=function(t){return o(t)},i.domain=function(n){return arguments.length?(t=n.map(Number),u()):t},i.range=function(t){return arguments.length?(n=t,u()):n},i.rangeRound=function(t){return i.range(t).interpolate(Ci.interpolateRound)},i.clamp=function(t){return arguments.length?(r=t,u()):r},i.interpolate=function(t){return arguments.length?(e=t,u()):e},i.ticks=function(n){return Bn(t,n)},i.tickFormat=function(n){return $n(t,n)},i.nice=function(){return Yn(t,Zn),u()},i.copy=function(){return In(t,n,e,r)},u()}function Vn(t,n){return Ci.rebind(t,n,"range","rangeRound","interpolate","clamp")}function Zn(t){return t=Math.pow(10,Math.round(Math.log(t)/Math.LN10)-1),t&&{floor:function(n){return Math.floor(n/t)*t},ceil:function(n){return Math.ceil(n/t)*t}}}function Xn(t,n){var e=Rn(t),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/n)/Math.LN10)),i=n/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Bn(t,n){return Ci.range.apply(Ci,Xn(t,n))}function $n(t,n){return Ci.format(",."+Math.max(0,-Math.floor(Math.log(Xn(t,n)[2])/Math.LN10+.01))+"f")}function Jn(t,n,e,r){var u=e(t[0],t[1]),i=r(n[0],n[1]);return function(t){return i(u(t))}}function Gn(t,n,e,r){var u=[],i=[],a=0,o=Math.min(t.length,n.length)-1;for(t[o]<t[0]&&(t=t.slice().reverse(),n=n.slice().reverse());o>=++a;)u.push(e(t[a-1],t[a])),i.push(r(n[a-1],n[a]));return function(n){var e=Ci.bisect(t,n,1,o)-1;return i[e](u[e](n))}}function Kn(t,n){function e(e){return t(n(e))}var r=n.pow;return e.invert=function(n){return r(t.invert(n))},e.domain=function(u){return arguments.length?(n=0>u[0]?Qn:Wn,r=n.pow,t.domain(u.map(n)),e):t.domain().map(r)},e.nice=function(){return t.domain(Yn(t.domain(),Un)),e},e.ticks=function(){var e=Rn(t.domain()),u=[];if(e.every(isFinite)){var i=Math.floor(e[0]),a=Math.ceil(e[1]),o=r(e[0]),c=r(e[1]);if(n===Qn)for(u.push(r(i));a>i++;)for(var l=9;l>0;l--)u.push(r(i)*l);else{for(;a>i;i++)for(var l=1;10>l;l++)u.push(r(i)*l);u.push(r(i))}for(i=0;o>u[i];i++);for(a=u.length;u[a-1]>c;a--);u=u.slice(i,a)}return u},e.tickFormat=function(t,u){if(2>arguments.length&&(u=La),!arguments.length)return u;var i,a=Math.max(.1,t/e.ticks().length),o=n===Qn?(i=-1e-12,Math.floor):(i=1e-12,Math.ceil);return function(t){return a>=t/r(o(n(t)+i))?u(t):""}},e.copy=function(){return Kn(t.copy(),n)},Vn(e,t)}function Wn(t){return Math.log(0>t?0:t)/Math.LN10}function Qn(t){return-Math.log(t>0?0:-t)/Math.LN10}function te(t,n){function e(n){return t(r(n))}var r=ne(n),u=ne(1/n);return e.invert=function(n){return u(t.invert(n))},e.domain=function(n){return arguments.length?(t.domain(n.map(r)),e):t.domain().map(u)},e.ticks=function(t){return Bn(e.domain(),t)},e.tickFormat=function(t){return $n(e.domain(),t)},e.nice=function(){return e.domain(Yn(e.domain(),Zn))},e.exponent=function(t){if(!arguments.length)return n;var i=e.domain();return r=ne(n=t),u=ne(1/n),e.domain(i)},e.copy=function(){return te(t.copy(),n)},Vn(e,t)}function ne(t){return function(n){return 0>n?-Math.pow(-n,t):Math.pow(n,t)}}function ee(t,n){function e(n){return a[((u.get(n)||u.set(n,t.push(n)))-1)%a.length]}function r(n,e){return Ci.range(t.length).map(function(t){return n+e*t})}var u,a,o;return e.domain=function(r){if(!arguments.length)return t;t=[],u=new i;for(var a,o=-1,c=r.length;c>++o;)u.has(a=r[o])||u.set(a,t.push(a));return e[n.t].apply(e,n.a)},e.range=function(t){return arguments.length?(a=t,o=0,n={t:"range",a:arguments},e):a},e.rangePoints=function(u,i){2>arguments.length&&(i=0);var c=u[0],l=u[1],f=(l-c)/(Math.max(1,t.length-1)+i);return a=r(2>t.length?(c+l)/2:c+f*i/2,f),o=0,n={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,i,c){2>arguments.length&&(i=0),3>arguments.length&&(c=i);var l=u[1]<u[0],f=u[l-0],s=u[1-l],h=(s-f)/(t.length-i+2*c);return a=r(f+h*c,h),l&&a.reverse(),o=h*(1-i),n={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,i,c){2>arguments.length&&(i=0),3>arguments.length&&(c=i);var l=u[1]<u[0],f=u[l-0],s=u[1-l],h=Math.floor((s-f)/(t.length-i+2*c)),g=s-f-(t.length-i)*h;return a=r(f+Math.round(g/2),h),l&&a.reverse(),o=Math.round(h*(1-i)),n={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Rn(n.a[0])},e.copy=function(){return ee(t,n)},e.domain(t)}function re(t,n){function e(){var e=0,i=n.length;for(u=[];i>++e;)u[e-1]=Ci.quantile(t,e/i);return r}function r(t){return isNaN(t=+t)?0/0:n[Ci.bisect(u,t)]}var u;return r.domain=function(n){return arguments.length?(t=n.filter(function(t){return!isNaN(t)}).sort(Ci.ascending),e()):t},r.range=function(t){return arguments.length?(n=t,e()):n},r.quantiles=function(){return u},r.copy=function(){return re(t,n)},e()}function ue(t,n,e){function r(n){return e[Math.max(0,Math.min(a,Math.floor(i*(n-t))))]}function u(){return i=e.length/(n-t),a=e.length-1,r}var i,a;return r.domain=function(e){return arguments.length?(t=+e[0],n=+e[e.length-1],u()):[t,n]},r.range=function(t){return arguments.length?(e=t,u()):e},r.copy=function(){return ue(t,n,e)},u()}function ie(t,n){function e(e){return n[Ci.bisect(t,e)]}return e.domain=function(n){return arguments.length?(t=n,e):t},e.range=function(t){return arguments.length?(n=t,e):n},e.copy=function(){return ie(t,n)},e}function ae(t){function n(t){return+t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=e.map(n),n):t},n.ticks=function(n){return Bn(t,n)},n.tickFormat=function(n){return $n(t,n)},n.copy=function(){return ae(t)},n}function oe(t){return t.innerRadius}function ce(t){return t.outerRadius}function le(t){return t.startAngle}function fe(t){return t.endAngle}function se(t){function n(n){function a(){f.push("M",i(t(s),l))}for(var o,f=[],s=[],h=-1,g=n.length,p=c(e),d=c(r);g>++h;)u.call(this,o=n[h],h)?s.push([+p.call(this,o,h),+d.call(this,o,h)]):s.length&&(a(),s=[]);return s.length&&a(),f.length?f.join(""):null}var e=he,r=ge,u=o,i=pe,a=i.key,l=.7;return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n.defined=function(t){return arguments.length?(u=t,n):u},n.interpolate=function(t){return arguments.length?(a="function"==typeof t?i=t:(i=Ya.get(t)||pe).key,n):a},n.tension=function(t){return arguments.length?(l=t,n):l},n}function he(t){return t[0]}function ge(t){return t[1]}function pe(t){return t.join("L")}function de(t){return pe(t)+"Z"}function me(t){for(var n=0,e=t.length,r=t[0],u=[r[0],",",r[1]];e>++n;)u.push("V",(r=t[n])[1],"H",r[0]);return u.join("")}function ve(t){for(var n=0,e=t.length,r=t[0],u=[r[0],",",r[1]];e>++n;)u.push("H",(r=t[n])[0],"V",r[1]);return u.join("")}function ye(t,n){return 4>t.length?pe(t):t[1]+xe(t.slice(1,t.length-1),_e(t,n))}function Me(t,n){return 3>t.length?pe(t):t[0]+xe((t.push(t[0]),t),_e([t[t.length-2]].concat(t,[t[1]]),n))}function be(t,n){return 3>t.length?pe(t):t[0]+xe(t,_e(t,n))}function xe(t,n){if(1>n.length||t.length!=n.length&&t.length!=n.length+2)return pe(t);var e=t.length!=n.length,r="",u=t[0],i=t[1],a=n[0],o=a,c=1;if(e&&(r+="Q"+(i[0]-2*a[0]/3)+","+(i[1]-2*a[1]/3)+","+i[0]+","+i[1],u=t[1],c=2),n.length>1){o=n[1],i=t[c],c++,r+="C"+(u[0]+a[0])+","+(u[1]+a[1])+","+(i[0]-o[0])+","+(i[1]-o[1])+","+i[0]+","+i[1];for(var l=2;n.length>l;l++,c++)i=t[c],o=n[l],r+="S"+(i[0]-o[0])+","+(i[1]-o[1])+","+i[0]+","+i[1]}if(e){var f=t[c];r+="Q"+(i[0]+2*o[0]/3)+","+(i[1]+2*o[1]/3)+","+f[0]+","+f[1]}return r}function _e(t,n){for(var e,r=[],u=(1-n)/2,i=t[0],a=t[1],o=1,c=t.length;c>++o;)e=i,i=a,a=t[o],r.push([u*(a[0]-e[0]),u*(a[1]-e[1])]);return r}function we(t){if(3>t.length)return pe(t);var n=1,e=t.length,r=t[0],u=r[0],i=r[1],a=[u,u,u,(r=t[1])[0]],o=[i,i,i,r[1]],c=[u,",",i];for(Ne(c,a,o);e>++n;)r=t[n],a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),Ne(c,a,o);for(n=-1;2>++n;)a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),Ne(c,a,o);return c.join("")}function Se(t){if(4>t.length)return pe(t);for(var n,e=[],r=-1,u=t.length,i=[0],a=[0];3>++r;)n=t[r],i.push(n[0]),a.push(n[1]);for(e.push(Ae(Va,i)+","+Ae(Va,a)),--r;u>++r;)n=t[r],i.shift(),i.push(n[0]),a.shift(),a.push(n[1]),Ne(e,i,a);return e.join("")}function ke(t){for(var n,e,r=-1,u=t.length,i=u+4,a=[],o=[];4>++r;)e=t[r%u],a.push(e[0]),o.push(e[1]);for(n=[Ae(Va,a),",",Ae(Va,o)],--r;i>++r;)e=t[r%u],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Ne(n,a,o);return n.join("")}function Ee(t,n){var e=t.length-1;if(e)for(var r,u,i=t[0][0],a=t[0][1],o=t[e][0]-i,c=t[e][1]-a,l=-1;e>=++l;)r=t[l],u=l/e,r[0]=n*r[0]+(1-n)*(i+u*o),r[1]=n*r[1]+(1-n)*(a+u*c);return we(t)}function Ae(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]}function Ne(t,n,e){t.push("C",Ae(Ua,n),",",Ae(Ua,e),",",Ae(Ia,n),",",Ae(Ia,e),",",Ae(Va,n),",",Ae(Va,e))}function Te(t,n){return(n[1]-t[1])/(n[0]-t[0])}function qe(t){for(var n=0,e=t.length-1,r=[],u=t[0],i=t[1],a=r[0]=Te(u,i);e>++n;)r[n]=(a+(a=Te(u=i,i=t[n+1])))/2;return r[n]=a,r}function Ce(t){for(var n,e,r,u,i=[],a=qe(t),o=-1,c=t.length-1;c>++o;)n=Te(t[o],t[o+1]),1e-6>Math.abs(n)?a[o]=a[o+1]=0:(e=a[o]/n,r=a[o+1]/n,u=e*e+r*r,u>9&&(u=3*n/Math.sqrt(u),a[o]=u*e,a[o+1]=u*r));for(o=-1;c>=++o;)u=(t[Math.min(c,o+1)][0]-t[Math.max(0,o-1)][0])/(6*(1+a[o]*a[o])),i.push([u||0,a[o]*u||0]);return i}function ze(t){return 3>t.length?pe(t):t[0]+xe(t,Ce(t))}function De(t){for(var n,e,r,u=-1,i=t.length;i>++u;)n=t[u],e=n[0],r=n[1]+Ra,n[0]=e*Math.cos(r),n[1]=e*Math.sin(r);return t}function Le(t){function n(n){function o(){m.push("M",l(t(y),g),h,s(t(v.reverse()),g),"Z")}for(var f,p,d,m=[],v=[],y=[],M=-1,b=n.length,x=c(e),_=c(u),w=e===r?function(){return p}:c(r),S=u===i?function(){return d}:c(i);b>++M;)a.call(this,f=n[M],M)?(v.push([p=+x.call(this,f,M),d=+_.call(this,f,M)]),y.push([+w.call(this,f,M),+S.call(this,f,M)])):v.length&&(o(),v=[],y=[]);return v.length&&o(),m.length?m.join(""):null}var e=he,r=he,u=0,i=ge,a=o,l=pe,f=l.key,s=l,h="L",g=.7;return n.x=function(t){return arguments.length?(e=r=t,n):r},n.x0=function(t){return arguments.length?(e=t,n):e},n.x1=function(t){return arguments.length?(r=t,n):r},n.y=function(t){return arguments.length?(u=i=t,n):i},n.y0=function(t){return arguments.length?(u=t,n):u},n.y1=function(t){return arguments.length?(i=t,n):i},n.defined=function(t){return arguments.length?(a=t,n):a},n.interpolate=function(t){return arguments.length?(f="function"==typeof t?l=t:(l=Ya.get(t)||pe).key,s=l.reverse||l,h=l.closed?"M":"L",n):f},n.tension=function(t){return arguments.length?(g=t,n):g},n}function Fe(t){return t.radius}function He(t){return[t.x,t.y]}function je(t){return function(){var n=t.apply(this,arguments),e=n[0],r=n[1]+Ra;return[e*Math.cos(r),e*Math.sin(r)]}}function Pe(){return 64}function Re(){return"circle"}function Oe(t){var n=Math.sqrt(t/Ti);return"M0,"+n+"A"+n+","+n+" 0 1,1 0,"+-n+"A"+n+","+n+" 0 1,1 0,"+n+"Z"}function Ye(t,n){t.attr("transform",function(t){return"translate("+n(t)+",0)"})}function Ue(t,n){t.attr("transform",function(t){return"translate(0,"+n(t)+")"})}function Ie(t,n,e){if(r=[],e&&n.length>1){for(var r,u,i,a=Rn(t.domain()),o=-1,c=n.length,l=(n[1]-n[0])/++e;c>++o;)for(u=e;--u>0;)(i=+n[o]-u*l)>=a[0]&&r.push(i);for(--o,u=0;e>++u&&(i=+n[o]+u*l)<a[1];)r.push(i)}return r}function Ve(t){for(var n=t.source,e=t.target,r=Xe(n,e),u=[n];n!==r;)n=n.parent,u.push(n);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Ze(t){for(var n=[],e=t.parent;null!=e;)n.push(t),t=e,e=e.parent;return n.push(t),n}function Xe(t,n){if(t===n)return t;for(var e=Ze(t),r=Ze(n),u=e.pop(),i=r.pop(),a=null;u===i;)a=u,u=e.pop(),i=r.pop();return a}function Be(t){t.fixed|=2}function $e(t){t.fixed&=-7}function Je(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Ge(t){t.fixed&=-5}function Ke(t,n,e){var r=0,u=0;if(t.charge=0,!t.leaf)for(var i,a=t.nodes,o=a.length,c=-1;o>++c;)i=a[c],null!=i&&(Ke(i,n,e),t.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var l=n*e[t.point.index];t.charge+=t.pointCharge=l,r+=l*t.point.x,u+=l*t.point.y}t.cx=r/t.charge,t.cy=u/t.charge}function We(t){return t.x}function Qe(t){return t.y}function tr(t,n,e){t.y0=n,t.y=e}function nr(t){return Ci.range(t.length)}function er(t){for(var n=-1,e=t[0].length,r=[];e>++n;)r[n]=0;return r}function rr(t){for(var n,e=1,r=0,u=t[0][1],i=t.length;i>e;++e)(n=t[e][1])>u&&(r=e,u=n);return r}function ur(t){return t.reduce(ir,0)}function ir(t,n){return t+n[1]}function ar(t,n){return or(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function or(t,n){for(var e=-1,r=+t[0],u=(t[1]-r)/n,i=[];n>=++e;)i[e]=u*e+r;return i}function cr(t){return[Ci.min(t),Ci.max(t)]}function lr(t,n){return Ci.rebind(t,n,"sort","children","value"),t.nodes=t,t.links=gr,t}function fr(t){return t.children}function sr(t){return t.value}function hr(t,n){return n.value-t.value}function gr(t){return Ci.merge(t.map(function(t){return(t.children||[]).map(function(n){return{source:t,target:n}})}))}function pr(t,n){return t.value-n.value}function dr(t,n){var e=t._pack_next;t._pack_next=n,n._pack_prev=t,n._pack_next=e,e._pack_prev=n}function mr(t,n){t._pack_next=n,n._pack_prev=t}function vr(t,n){var e=n.x-t.x,r=n.y-t.y,u=t.r+n.r;return u*u-e*e-r*r>.001}function yr(t){function n(t){f=Math.min(t.x-t.r,f),s=Math.max(t.x+t.r,s),h=Math.min(t.y-t.r,h),g=Math.max(t.y+t.r,g)}if((e=t.children)&&(l=e.length)){var e,r,u,i,a,o,c,l,f=1/0,s=-1/0,h=1/0,g=-1/0;if(e.forEach(Mr),r=e[0],r.x=-r.r,r.y=0,n(r),l>1&&(u=e[1],u.x=u.r,u.y=0,n(u),l>2))for(i=e[2],_r(r,u,i),n(i),dr(r,i),r._pack_prev=i,dr(i,u),u=r._pack_next,a=3;l>a;a++){_r(r,u,i=e[a]);var p=0,d=1,m=1;for(o=u._pack_next;o!==u;o=o._pack_next,d++)if(vr(o,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==o._pack_prev&&!vr(c,i);c=c._pack_prev,m++);p?(m>d||d==m&&u.r<r.r?mr(r,u=o):mr(r=c,u),a--):(dr(r,i),u=i,n(i))}var v=(f+s)/2,y=(h+g)/2,M=0;for(a=0;l>a;a++)i=e[a],i.x-=v,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=M,e.forEach(br)}}function Mr(t){t._pack_next=t._pack_prev=t}function br(t){delete t._pack_next,delete t._pack_prev}function xr(t,n,e,r){var u=t.children;if(t.x=n+=r*t.x,t.y=e+=r*t.y,t.r*=r,u)for(var i=-1,a=u.length;a>++i;)xr(u[i],n,e,r)}function _r(t,n,e){var r=t.r+e.r,u=n.x-t.x,i=n.y-t.y;if(r&&(u||i)){var a=n.r+e.r,o=u*u+i*i;a*=a,r*=r;var c=.5+(r-a)/(2*o),l=Math.sqrt(Math.max(0,2*a*(r+o)-(r-=o)*r-a*a))/(2*o);e.x=t.x+c*u+l*i,e.y=t.y+c*i-l*u}else e.x=t.x+r,e.y=t.y}function wr(t){return 1+Ci.max(t,function(t){return t.y})}function Sr(t){return t.reduce(function(t,n){return t+n.x},0)/t.length}function kr(t){var n=t.children;return n&&n.length?kr(n[0]):t}function Er(t){var n,e=t.children;return e&&(n=e.length)?Er(e[n-1]):t}function Ar(t,n){return t.parent==n.parent?1:2}function Nr(t){var n=t.children;return n&&n.length?n[0]:t._tree.thread}function Tr(t){var n,e=t.children;return e&&(n=e.length)?e[n-1]:t._tree.thread}function qr(t,n){var e=t.children;if(e&&(u=e.length))for(var r,u,i=-1;u>++i;)n(r=qr(e[i],n),t)>0&&(t=r);return t}function Cr(t,n){return t.x-n.x}function zr(t,n){return n.x-t.x}function Dr(t,n){return t.depth-n.depth}function Lr(t,n){function e(t,r){var u=t.children;if(u&&(a=u.length))for(var i,a,o=null,c=-1;a>++c;)i=u[c],e(i,o),o=i;n(t,r)}e(t,null)}function Fr(t){for(var n,e=0,r=0,u=t.children,i=u.length;--i>=0;)n=u[i]._tree,n.prelim+=e,n.mod+=e,e+=n.shift+(r+=n.change)}function Hr(t,n,e){t=t._tree,n=n._tree;var r=e/(n.number-t.number);t.change+=r,n.change-=r,n.shift+=e,n.prelim+=e,n.mod+=e}function jr(t,n,e){return t._tree.ancestor.parent==n.parent?t._tree.ancestor:e}function Pr(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Rr(t,n){var e=t.x+n[3],r=t.y+n[0],u=t.dx-n[1]-n[3],i=t.dy-n[0]-n[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Or(t,n){function e(t,e){return Ci.xhr(t,n,e).response(r)}function r(t){return e.parse(t.responseText)}function u(n){return n.map(i).join(t)}function i(t){return a.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}var a=RegExp('["'+t+"\n]"),o=t.charCodeAt(0);return e.parse=function(t){var n;return e.parseRows(t,function(t){return n?n(t):(n=Function("d","return {"+t.map(function(t,n){return JSON.stringify(t)+": d["+n+"]"}).join(",")+"}"),void 0)})},e.parseRows=function(t,n){function e(){if(f>=l)return a;if(u)return u=!1,i;var n=f;if(34===t.charCodeAt(n)){for(var e=n;l>e++;)if(34===t.charCodeAt(e)){if(34!==t.charCodeAt(e+1))break;++e}f=e+2;var r=t.charCodeAt(e+1);return 13===r?(u=!0,10===t.charCodeAt(e+2)&&++f):10===r&&(u=!0),t.substring(n+1,e).replace(/""/g,'"')}for(;l>f;){var r=t.charCodeAt(f++),c=1;if(10===r)u=!0;else if(13===r)u=!0,10===t.charCodeAt(f)&&(++f,++c);else if(r!==o)continue;return t.substring(n,f-c)}return t.substring(n)}for(var r,u,i={},a={},c=[],l=t.length,f=0,s=0;(r=e())!==a;){for(var h=[];r!==i&&r!==a;)h.push(r),r=e();(!n||(h=n(h,s++)))&&c.push(h)}return c},e.format=function(t){return t.map(u).join("\n")},e}function Yr(t,n){oo.hasOwnProperty(t.type)&&oo[t.type](t,n)}function Ur(t,n,e){var r,u=-1,i=t.length-e;for(n.lineStart();i>++u;)r=t[u],n.point(r[0],r[1]);n.lineEnd()}function Ir(t,n){var e=-1,r=t.length;for(n.polygonStart();r>++e;)Ur(t[e],n,1);n.polygonEnd()}function Vr(t){return[Math.atan2(t[1],t[0]),Math.asin(Math.max(-1,Math.min(1,t[2])))]}function Zr(t,n){return qi>Math.abs(t[0]-n[0])&&qi>Math.abs(t[1]-n[1])}function Xr(t){var n=t[0],e=t[1],r=Math.cos(e);return[r*Math.cos(n),r*Math.sin(n),Math.sin(e)]}function Br(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function $r(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Jr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Gr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Kr(t){var n=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Wr(t){function n(n){function r(e,r){e=t(e,r),n.point(e[0],e[1])}function i(){f=0/0,d.point=a,n.lineStart()}function a(r,i){var a=Xr([r,i]),o=t(r,i);e(f,s,l,h,g,p,f=o[0],s=o[1],l=r,h=a[0],g=a[1],p=a[2],u,n),n.point(f,s)}function o(){d.point=r,n.lineEnd()}function c(){var t,r,c,m,v,y,M;i(),d.point=function(n,e){a(t=n,r=e),c=f,m=s,v=h,y=g,M=p,d.point=a},d.lineEnd=function(){e(f,s,l,h,g,p,c,m,t,v,y,M,u,n),d.lineEnd=o,o()}}var l,f,s,h,g,p,d={point:r,lineStart:i,lineEnd:o,polygonStart:function(){n.polygonStart(),d.lineStart=c},polygonEnd:function(){n.polygonEnd(),d.lineStart=i}};return d}function e(n,u,i,a,o,c,l,f,s,h,g,p,d,m){var v=l-n,y=f-u,M=v*v+y*y;if(M>4*r&&d--){var b=a+h,x=o+g,_=c+p,w=Math.sqrt(b*b+x*x+_*_),S=Math.asin(_/=w),k=qi>Math.abs(Math.abs(_)-1)?(i+s)/2:Math.atan2(x,b),E=t(k,S),A=E[0],N=E[1],T=A-n,q=N-u,C=y*T-v*q;(C*C/M>r||Math.abs((v*T+y*q)/M-.5)>.3)&&(e(n,u,i,a,o,c,A,N,k,b/=w,x/=w,_,d,m),m.point(A,N),e(A,N,k,b,x,_,l,f,s,h,g,p,d,m))}}var r=.5,u=16;return n.precision=function(t){return arguments.length?(u=(r=t*t)>0&&16,n):Math.sqrt(r)},n}function Qr(t,n){function e(t,n){var e=Math.sqrt(i-2*u*Math.sin(n))/u;return[e*Math.sin(t*=u),a-e*Math.cos(t)]}var r=Math.sin(t),u=(r+Math.sin(n))/2,i=1+r*(2*u-r),a=Math.sqrt(i)/u;return e.invert=function(t,n){var e=a-n;return[Math.atan2(t,e)/u,Math.asin((i-(t*t+e*e)*u*u)/(2*u))]},e}function tu(t){function n(t,n){r>t&&(r=t),t>i&&(i=t),u>n&&(u=n),n>a&&(a=n)}function e(){o.point=o.lineEnd=Pn}var r,u,i,a,o={point:n,lineStart:Pn,lineEnd:Pn,polygonStart:function(){o.lineEnd=e},polygonEnd:function(){o.point=n}};return function(n){return a=i=-(r=u=1/0),Ci.geo.stream(n,t(o)),[[r,u],[i,a]]}}function nu(t,n){if(!fo){++so,t*=zi;var e=Math.cos(n*=zi);ho+=(e*Math.cos(t)-ho)/so,go+=(e*Math.sin(t)-go)/so,po+=(Math.sin(n)-po)/so}}function eu(){var t,n;fo=1,ru(),fo=2;var e=mo.point;mo.point=function(r,u){e(t=r,n=u)},mo.lineEnd=function(){mo.point(t,n),uu(),mo.lineEnd=uu}}function ru(){function t(t,u){t*=zi;var i=Math.cos(u*=zi),a=i*Math.cos(t),o=i*Math.sin(t),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*o)*l+(l=r*a-n*c)*l+(l=n*o-e*a)*l),n*a+e*o+r*c);so+=l,ho+=l*(n+(n=a)),go+=l*(e+(e=o)),po+=l*(r+(r=c))}var n,e,r;fo>1||(1>fo&&(fo=1,so=ho=go=po=0),mo.point=function(u,i){u*=zi;var a=Math.cos(i*=zi);n=a*Math.cos(u),e=a*Math.sin(u),r=Math.sin(i),mo.point=t})}function uu(){mo.point=nu}function iu(t,n){var e=Math.cos(t),r=Math.sin(t);return function(u,i,a,o){null!=u?(u=au(e,u),i=au(e,i),(a>0?i>u:u>i)&&(u+=2*a*Ti)):(u=t+2*a*Ti,i=t);for(var c,l=a*n,f=u;a>0?f>i:i>f;f-=l)o.point((c=Vr([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function au(t,n){var e=Xr(n);e[0]-=t,Kr(e);var r=Math.acos(Math.max(-1,Math.min(1,-e[1])));return((0>-e[2]?-r:r)+2*Math.PI-qi)%(2*Math.PI)}function ou(t,n,e){return function(r){function u(n,e){t(n,e)&&r.point(n,e)}function i(t,n){m.point(t,n)}function a(){v.point=i,m.lineStart()}function o(){v.point=u,m.lineEnd()}function c(t,n){M.point(t,n),d.push([t,n])}function l(){M.lineStart(),d=[]}function f(){c(d[0][0],d[0][1]),M.lineEnd();var t,n=M.clean(),e=y.buffer(),u=e.length;if(!u)return p=!0,g+=gu(d,-1),d=null,void 0;if(d=null,1&n){t=e[0],h+=gu(t,1);var i,u=t.length-1,a=-1;for(r.lineStart();u>++a;)r.point((i=t[a])[0],i[1]);return r.lineEnd(),void 0}u>1&&2&n&&e.push(e.pop().concat(e.shift())),s.push(e.filter(su))}var s,h,g,p,d,m=n(r),v={point:u,lineStart:a,lineEnd:o,polygonStart:function(){v.point=c,v.lineStart=l,v.lineEnd=f,p=!1,g=h=0,s=[],r.polygonStart()},polygonEnd:function(){v.point=u,v.lineStart=a,v.lineEnd=o,s=Ci.merge(s),s.length?cu(s,e,r):(-qi>h||p&&-qi>g)&&(r.lineStart(),e(null,null,1,r),r.lineEnd()),r.polygonEnd(),s=null},sphere:function(){r.polygonStart(),r.lineStart(),e(null,null,1,r),r.lineEnd(),r.polygonEnd()}},y=hu(),M=n(y);return v}}function cu(t,n,e){var r=[],u=[];if(t.forEach(function(t){if(!(1>=(n=t.length))){var n,i=t[0],a=t[n-1];if(Zr(i,a)){e.lineStart();
+for(var o=0;n>o;++o)e.point((i=t[o])[0],i[1]);return e.lineEnd(),void 0}var c={point:i,points:t,other:null,visited:!1,entry:!0,subject:!0},l={point:i,points:[i],other:c,visited:!1,entry:!1,subject:!1};c.other=l,r.push(c),u.push(l),c={point:a,points:[a],other:null,visited:!1,entry:!1,subject:!0},l={point:a,points:[a],other:c,visited:!1,entry:!0,subject:!1},c.other=l,r.push(c),u.push(l)}}),u.sort(fu),lu(r),lu(u),r.length)for(var i,a,o,c=r[0];;){for(i=c;i.visited;)if((i=i.next)===c)return;a=i.points,e.lineStart();do{if(i.visited=i.other.visited=!0,i.entry){if(i.subject)for(var l=0;a.length>l;l++)e.point((o=a[l])[0],o[1]);else n(i.point,i.next.point,1,e);i=i.next}else{if(i.subject){a=i.prev.points;for(var l=a.length;--l>=0;)e.point((o=a[l])[0],o[1])}else n(i.point,i.prev.point,-1,e);i=i.prev}i=i.other,a=i.points}while(!i.visited);e.lineEnd()}}function lu(t){if(n=t.length){for(var n,e,r=0,u=t[0];n>++r;)u.next=e=t[r],e.prev=u,u=e;u.next=e=t[0],e.prev=u}}function fu(t,n){return(0>(t=t.point)[0]?t[1]-Ti/2-qi:Ti/2-t[1])-(0>(n=n.point)[0]?n[1]-Ti/2-qi:Ti/2-n[1])}function su(t){return t.length>1}function hu(){var t,n=[];return{lineStart:function(){n.push(t=[])},point:function(n,e){t.push([n,e])},lineEnd:Pn,buffer:function(){var e=n;return n=[],t=null,e}}}function gu(t,n){if(!(e=t.length))return 0;for(var e,r,u,i=0,a=0,o=t[0],c=o[0],l=o[1],f=Math.cos(l),s=Math.atan2(n*Math.sin(c)*f,Math.sin(l)),h=1-n*Math.cos(c)*f,g=s;e>++i;)o=t[i],f=Math.cos(l=o[1]),r=Math.atan2(n*Math.sin(c=o[0])*f,Math.sin(l)),u=1-n*Math.cos(c)*f,qi>Math.abs(h-2)&&qi>Math.abs(u-2)||(qi>Math.abs(u)||qi>Math.abs(h)||(qi>Math.abs(Math.abs(r-s)-Ti)?u+h>2&&(a+=4*(r-s)):a+=qi>Math.abs(h-2)?4*(r-g):((3*Ti+r-s)%(2*Ti)-Ti)*(h+u)),g=s,s=r,h=u);return a}function pu(t){var n,e=0/0,r=0/0,u=0/0;return{lineStart:function(){t.lineStart(),n=1},point:function(i,a){var o=i>0?Ti:-Ti,c=Math.abs(i-e);qi>Math.abs(c-Ti)?(t.point(e,r=(r+a)/2>0?Ti/2:-Ti/2),t.point(u,r),t.lineEnd(),t.lineStart(),t.point(o,r),t.point(i,r),n=0):u!==o&&c>=Ti&&(qi>Math.abs(e-u)&&(e-=u*qi),qi>Math.abs(i-o)&&(i-=o*qi),r=du(e,r,i,a),t.point(u,r),t.lineEnd(),t.lineStart(),t.point(o,r),n=0),t.point(e=i,r=a),u=o},lineEnd:function(){t.lineEnd(),e=r=0/0},clean:function(){return 2-n}}}function du(t,n,e,r){var u,i,a=Math.sin(t-e);return Math.abs(a)>qi?Math.atan((Math.sin(n)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(n))*Math.sin(t))/(u*i*a)):(n+r)/2}function mu(t,n,e,r){var u;if(null==t)u=e*Ti/2,r.point(-Ti,u),r.point(0,u),r.point(Ti,u),r.point(Ti,0),r.point(Ti,-u),r.point(0,-u),r.point(-Ti,-u),r.point(-Ti,0),r.point(-Ti,u);else if(Math.abs(t[0]-n[0])>qi){var i=(t[0]<n[0]?1:-1)*Ti;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(n[0],n[1])}function vu(t){function n(t,n){return Math.cos(t)*Math.cos(n)>i}function e(t){var e,u,i,a;return{lineStart:function(){i=u=!1,a=1},point:function(o,c){var l,f=[o,c],s=n(o,c);!e&&(i=u=s)&&t.lineStart(),s!==u&&(l=r(e,f),(Zr(e,l)||Zr(f,l))&&(f[0]+=qi,f[1]+=qi,s=n(f[0],f[1]))),s!==u&&(a=0,(u=s)?(t.lineStart(),l=r(f,e),t.point(l[0],l[1])):(l=r(e,f),t.point(l[0],l[1]),t.lineEnd()),e=l),!s||e&&Zr(e,f)||t.point(f[0],f[1]),e=f},lineEnd:function(){u&&t.lineEnd(),e=null},clean:function(){return a|(i&&u)<<1}}}function r(t,n){var e=Xr(t,0),r=Xr(n,0),u=[1,0,0],a=$r(e,r),o=Br(a,a),c=a[0],l=o-c*c;if(!l)return t;var f=i*o/l,s=-i*c/l,h=$r(u,a),g=Gr(u,f),p=Gr(a,s);Jr(g,p);var d=h,m=Br(g,d),v=Br(d,d),y=Math.sqrt(m*m-v*(Br(g,g)-1)),M=Gr(d,(-m-y)/v);return Jr(M,g),Vr(M)}var u=t*zi,i=Math.cos(u),a=iu(u,6*zi);return ou(n,e,a)}function yu(t,n){function e(e,r){return e=t(e,r),n(e[0],e[1])}return t.invert&&n.invert&&(e.invert=function(e,r){return e=n.invert(e,r),e&&t.invert(e[0],e[1])}),e}function Mu(t,n){return[t,n]}function bu(t,n,e){var r=Ci.range(t,n-qi,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function xu(t,n,e){var r=Ci.range(t,n-qi,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function _u(t){return(t=Math.sin(t/2))*t}function wu(t,n,e,r){var u=Math.cos(n),i=Math.sin(n),a=Math.cos(r),o=Math.sin(r),c=u*Math.cos(t),l=u*Math.sin(t),f=a*Math.cos(e),s=a*Math.sin(e),h=2*Math.asin(Math.sqrt(_u(r-n)+u*a*_u(e-t))),g=1/Math.sin(h),p=h?function(t){var n=Math.sin(t*=h)*g,e=Math.sin(h-t)*g,r=e*c+n*f,u=e*l+n*s,a=e*i+n*o;return[Math.atan2(u,r)*Di,Math.atan2(a,Math.sqrt(r*r+u*u))*Di]}:function(){return[t*Di,n*Di]};return p.distance=h,p}function Su(t,n){return[t/(2*Ti),Math.max(-.5,Math.min(.5,Math.log(Math.tan(Ti/4+n/2))/(2*Ti)))]}function ku(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Eu(t){var n=Wr(function(n,e){return t([n*Di,e*Di])});return function(t){return t=n(t),{point:function(n,e){t.point(n*zi,e*zi)},sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}}function Au(){function t(t,n){a.push("M",t,",",n,i)}function n(t,n){a.push("M",t,",",n),o.point=e}function e(t,n){a.push("L",t,",",n)}function r(){o.point=t}function u(){a.push("Z")}var i=ku(4.5),a=[],o={point:t,lineStart:function(){o.point=n},lineEnd:r,polygonStart:function(){o.lineEnd=u},polygonEnd:function(){o.lineEnd=r,o.point=t},pointRadius:function(t){return i=ku(t),o},result:function(){if(a.length){var t=a.join("");return a=[],t}}};return o}function Nu(t){function n(n,e){t.moveTo(n,e),t.arc(n,e,a,0,2*Ti)}function e(n,e){t.moveTo(n,e),o.point=r}function r(n,e){t.lineTo(n,e)}function u(){o.point=n}function i(){t.closePath()}var a=4.5,o={point:n,lineStart:function(){o.point=e},lineEnd:u,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=u,o.point=n},pointRadius:function(t){return a=t,o},result:Pn};return o}function Tu(){function t(t,n){xo+=u*t-r*n,r=t,u=n}var n,e,r,u;_o.point=function(i,a){_o.point=t,n=r=i,e=u=a},_o.lineEnd=function(){t(n,e)}}function qu(t,n){fo||(ho+=t,go+=n,++po)}function Cu(){function t(t,r){var u=t-n,i=r-e,a=Math.sqrt(u*u+i*i);ho+=a*(n+t)/2,go+=a*(e+r)/2,po+=a,n=t,e=r}var n,e;if(1!==fo){if(!(1>fo))return;fo=1,ho=go=po=0}wo.point=function(r,u){wo.point=t,n=r,e=u}}function zu(){wo.point=qu}function Du(){function t(t,n){var e=u*t-r*n;ho+=e*(r+t),go+=e*(u+n),po+=3*e,r=t,u=n}var n,e,r,u;2>fo&&(fo=2,ho=go=po=0),wo.point=function(i,a){wo.point=t,n=r=i,e=u=a},wo.lineEnd=function(){t(n,e)}}function Lu(){function t(t,n){t*=zi,n=n*zi/2+Ti/4;var e=t-r,a=Math.cos(n),o=Math.sin(n),c=i*o,l=ko,f=Eo,s=u*a+c*Math.cos(e),h=c*Math.sin(e);ko=l*s-f*h,Eo=f*s+l*h,r=t,u=a,i=o}var n,e,r,u,i;Ao.point=function(a,o){Ao.point=t,r=(n=a)*zi,u=Math.cos(o=(e=o)*zi/2+Ti/4),i=Math.sin(o)},Ao.lineEnd=function(){t(n,e)}}function Fu(t){return Hu(function(){return t})()}function Hu(t){function n(t){return t=a(t[0]*zi,t[1]*zi),[t[0]*f+o,c-t[1]*f]}function e(t){return t=a.invert((t[0]-o)/f,(c-t[1])/f),t&&[t[0]*Di,t[1]*Di]}function r(){a=yu(i=Pu(d,m,v),u);var t=u(g,p);return o=s-t[0]*f,c=h+t[1]*f,n}var u,i,a,o,c,l=Wr(function(t,n){return t=u(t,n),[t[0]*f+o,c-t[1]*f]}),f=150,s=480,h=250,g=0,p=0,d=0,m=0,v=0,y=vo,M=null;return n.stream=function(t){return ju(i,y(l(t)))},n.clipAngle=function(t){return arguments.length?(y=null==t?(M=t,vo):vu(M=+t),n):M},n.scale=function(t){return arguments.length?(f=+t,r()):f},n.translate=function(t){return arguments.length?(s=+t[0],h=+t[1],r()):[s,h]},n.center=function(t){return arguments.length?(g=t[0]%360*zi,p=t[1]%360*zi,r()):[g*Di,p*Di]},n.rotate=function(t){return arguments.length?(d=t[0]%360*zi,m=t[1]%360*zi,v=t.length>2?t[2]%360*zi:0,r()):[d*Di,m*Di,v*Di]},Ci.rebind(n,l,"precision"),function(){return u=t.apply(this,arguments),n.invert=u.invert&&e,r()}}function ju(t,n){return{point:function(e,r){r=t(e*zi,r*zi),e=r[0],n.point(e>Ti?e-2*Ti:-Ti>e?e+2*Ti:e,r[1])},sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function Pu(t,n,e){return t?n||e?yu(Ou(t),Yu(n,e)):Ou(t):n||e?Yu(n,e):Mu}function Ru(t){return function(n,e){return n+=t,[n>Ti?n-2*Ti:-Ti>n?n+2*Ti:n,e]}}function Ou(t){var n=Ru(t);return n.invert=Ru(-t),n}function Yu(t,n){function e(t,n){var e=Math.cos(n),o=Math.cos(t)*e,c=Math.sin(t)*e,l=Math.sin(n),f=l*r+o*u;return[Math.atan2(c*i-f*a,o*r-l*u),Math.asin(Math.max(-1,Math.min(1,f*i+c*a)))]}var r=Math.cos(t),u=Math.sin(t),i=Math.cos(n),a=Math.sin(n);return e.invert=function(t,n){var e=Math.cos(n),o=Math.cos(t)*e,c=Math.sin(t)*e,l=Math.sin(n),f=l*i-c*a;return[Math.atan2(c*i+l*a,o*r+f*u),Math.asin(Math.max(-1,Math.min(1,f*r-o*u)))]},e}function Uu(t,n){function e(n,e){var r=Math.cos(n),u=Math.cos(e),i=t(r*u);return[i*u*Math.sin(n),i*Math.sin(e)]}return e.invert=function(t,e){var r=Math.sqrt(t*t+e*e),u=n(r),i=Math.sin(u),a=Math.cos(u);return[Math.atan2(t*i,r*a),Math.asin(r&&e*i/r)]},e}function Iu(t,n,e,r){var u,i,a,o,c,l,f;return u=r[t],i=u[0],a=u[1],u=r[n],o=u[0],c=u[1],u=r[e],l=u[0],f=u[1],(f-a)*(o-i)-(c-a)*(l-i)>0}function Vu(t,n,e){return(e[0]-n[0])*(t[1]-n[1])<(e[1]-n[1])*(t[0]-n[0])}function Zu(t,n,e,r){var u=t[0],i=e[0],a=n[0]-u,o=r[0]-i,c=t[1],l=e[1],f=n[1]-c,s=r[1]-l,h=(o*(c-l)-s*(u-i))/(s*a-o*f);return[u+h*a,c+h*f]}function Xu(t,n){var e={list:t.map(function(t,n){return{index:n,x:t[0],y:t[1]}}).sort(function(t,n){return t.y<n.y?-1:t.y>n.y?1:t.x<n.x?-1:t.x>n.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(t,n){return{edge:t,side:n,vertex:null,l:null,r:null}},insert:function(t,n){n.l=t,n.r=t.r,t.r.l=n,t.r=n},leftBound:function(t){var n=r.leftEnd;do n=n.r;while(n!=r.rightEnd&&u.rightOf(n,t));return n=n.l},del:function(t){t.l.r=t.r,t.r.l=t.l,t.edge=null},right:function(t){return t.r},left:function(t){return t.l},leftRegion:function(t){return null==t.edge?e.bottomSite:t.edge.region[t.side]},rightRegion:function(t){return null==t.edge?e.bottomSite:t.edge.region[To[t.side]]}},u={bisect:function(t,n){var e={region:{l:t,r:n},ep:{l:null,r:null}},r=n.x-t.x,u=n.y-t.y,i=r>0?r:-r,a=u>0?u:-u;return e.c=t.x*r+t.y*u+.5*(r*r+u*u),i>a?(e.a=1,e.b=u/r,e.c/=r):(e.b=1,e.a=r/u,e.c/=u),e},intersect:function(t,n){var e=t.edge,r=n.edge;if(!e||!r||e.region.r==r.region.r)return null;var u=e.a*r.b-e.b*r.a;if(1e-10>Math.abs(u))return null;var i,a,o=(e.c*r.b-r.c*e.b)/u,c=(r.c*e.a-e.c*r.a)/u,l=e.region.r,f=r.region.r;l.y<f.y||l.y==f.y&&l.x<f.x?(i=t,a=e):(i=n,a=r);var s=o>=a.region.r.x;return s&&"l"===i.side||!s&&"r"===i.side?null:{x:o,y:c}},rightOf:function(t,n){var e=t.edge,r=e.region.r,u=n.x>r.x;if(u&&"l"===t.side)return 1;if(!u&&"r"===t.side)return 0;if(1===e.a){var i=n.y-r.y,a=n.x-r.x,o=0,c=0;if(!u&&0>e.b||u&&e.b>=0?c=o=i>=e.b*a:(c=n.x+n.y*e.b>e.c,0>e.b&&(c=!c),c||(o=1)),!o){var l=r.x-e.region.l.x;c=e.b*(a*a-i*i)<l*i*(1+2*a/l+e.b*e.b),0>e.b&&(c=!c)}}else{var f=e.c-e.a*n.x,s=n.y-f,h=n.x-r.x,g=f-r.y;c=s*s>h*h+g*g}return"l"===t.side?c:!c},endPoint:function(t,e,r){t.ep[e]=r,t.ep[To[e]]&&n(t)},distance:function(t,n){var e=t.x-n.x,r=t.y-n.y;return Math.sqrt(e*e+r*r)}},i={list:[],insert:function(t,n,e){t.vertex=n,t.ystar=n.y+e;for(var r=0,u=i.list,a=u.length;a>r;r++){var o=u[r];if(!(t.ystar>o.ystar||t.ystar==o.ystar&&n.x>o.vertex.x))break}u.splice(r,0,t)},del:function(t){for(var n=0,e=i.list,r=e.length;r>n&&e[n]!=t;++n);e.splice(n,1)},empty:function(){return 0===i.list.length},nextEvent:function(t){for(var n=0,e=i.list,r=e.length;r>n;++n)if(e[n]==t)return e[n+1];return null},min:function(){var t=i.list[0];return{x:t.vertex.x,y:t.ystar}},extractMin:function(){return i.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var a,o,c,l,f,s,h,g,p,d,m,v,y,M=e.list.shift();;)if(i.empty()||(a=i.min()),M&&(i.empty()||M.y<a.y||M.y==a.y&&M.x<a.x))o=r.leftBound(M),c=r.right(o),h=r.rightRegion(o),v=u.bisect(h,M),s=r.createHalfEdge(v,"l"),r.insert(o,s),d=u.intersect(o,s),d&&(i.del(o),i.insert(o,d,u.distance(d,M))),o=s,s=r.createHalfEdge(v,"r"),r.insert(o,s),d=u.intersect(s,c),d&&i.insert(s,d,u.distance(d,M)),M=e.list.shift();else{if(i.empty())break;o=i.extractMin(),l=r.left(o),c=r.right(o),f=r.right(c),h=r.leftRegion(o),g=r.rightRegion(c),m=o.vertex,u.endPoint(o.edge,o.side,m),u.endPoint(c.edge,c.side,m),r.del(o),i.del(c),r.del(c),y="l",h.y>g.y&&(p=h,h=g,g=p,y="r"),v=u.bisect(h,g),s=r.createHalfEdge(v,y),r.insert(l,s),u.endPoint(v,To[y],m),d=u.intersect(l,s),d&&(i.del(l),i.insert(l,d,u.distance(d,h))),d=u.intersect(s,f),d&&i.insert(s,d,u.distance(d,h))}for(o=r.right(r.leftEnd);o!=r.rightEnd;o=r.right(o))n(o.edge)}function Bu(){return{leaf:!0,nodes:[],point:null}}function $u(t,n,e,r,u,i){if(!t(n,e,r,u,i)){var a=.5*(e+u),o=.5*(r+i),c=n.nodes;c[0]&&$u(t,c[0],e,r,a,o),c[1]&&$u(t,c[1],a,r,u,o),c[2]&&$u(t,c[2],e,o,a,i),c[3]&&$u(t,c[3],a,o,u,i)}}function Ju(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Gu(t,n,e,r){for(var u,i,a=0,o=n.length,c=e.length;o>a;){if(r>=c)return-1;if(u=n.charCodeAt(a++),37===u){if(i=$o[n.charAt(a++)],!i||0>(r=i(t,e,r)))return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function Ku(t){return RegExp("^(?:"+t.map(Ci.requote).join("|")+")","i")}function Wu(t){for(var n=new i,e=-1,r=t.length;r>++e;)n.set(t[e].toLowerCase(),e);return n}function Qu(t,n,e){t+="";var r=t.length;return e>r?Array(e-r+1).join(n)+t:t}function ti(t,n,e){Yo.lastIndex=0;var r=Yo.exec(n.substring(e));return r?e+=r[0].length:-1}function ni(t,n,e){Oo.lastIndex=0;var r=Oo.exec(n.substring(e));return r?e+=r[0].length:-1}function ei(t,n,e){Vo.lastIndex=0;var r=Vo.exec(n.substring(e));return r?(t.m=Zo.get(r[0].toLowerCase()),e+=r[0].length):-1}function ri(t,n,e){Uo.lastIndex=0;var r=Uo.exec(n.substring(e));return r?(t.m=Io.get(r[0].toLowerCase()),e+=r[0].length):-1}function ui(t,n,e){return Gu(t,""+Bo.c,n,e)}function ii(t,n,e){return Gu(t,""+Bo.x,n,e)}function ai(t,n,e){return Gu(t,""+Bo.X,n,e)}function oi(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+4));return r?(t.y=+r[0],e+=r[0].length):-1}function ci(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+2));return r?(t.y=li(+r[0]),e+=r[0].length):-1}function li(t){return t+(t>68?1900:2e3)}function fi(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+2));return r?(t.m=r[0]-1,e+=r[0].length):-1}function si(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+2));return r?(t.d=+r[0],e+=r[0].length):-1}function hi(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+2));return r?(t.H=+r[0],e+=r[0].length):-1}function gi(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+2));return r?(t.M=+r[0],e+=r[0].length):-1}function pi(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+2));return r?(t.S=+r[0],e+=r[0].length):-1}function di(t,n,e){Jo.lastIndex=0;var r=Jo.exec(n.substring(e,e+3));return r?(t.L=+r[0],e+=r[0].length):-1}function mi(t,n,e){var r=Go.get(n.substring(e,e+=2).toLowerCase());return null==r?-1:(t.p=r,e)}function vi(t){var n=t.getTimezoneOffset(),e=n>0?"-":"+",r=~~(Math.abs(n)/60),u=Math.abs(n)%60;return e+Qu(r,"0",2)+Qu(u,"0",2)}function yi(t){return t.toISOString()}function Mi(t,n,e){function r(n){var e=t(n),r=i(e,1);return r-n>n-e?e:r}function u(e){return n(e=t(new qo(e-1)),1),e}function i(t,e){return n(t=new qo(+t),e),t}function a(t,r,i){var a=u(t),o=[];if(i>1)for(;r>a;)e(a)%i||o.push(new Date(+a)),n(a,1);else for(;r>a;)o.push(new Date(+a)),n(a,1);return o}function o(t,n,e){try{qo=Ju;var r=new Ju;return r._=t,a(r,n,e)}finally{qo=Date}}t.floor=t,t.round=r,t.ceil=u,t.offset=i,t.range=a;var c=t.utc=bi(t);return c.floor=c,c.round=bi(r),c.ceil=bi(u),c.offset=bi(i),c.range=o,t}function bi(t){return function(n,e){try{qo=Ju;var r=new Ju;return r._=n,t(r,e)._}finally{qo=Date}}}function xi(t,n,e){function r(n){return t(n)}return r.invert=function(n){return wi(t.invert(n))},r.domain=function(n){return arguments.length?(t.domain(n),r):t.domain().map(wi)},r.nice=function(t){return r.domain(Yn(r.domain(),function(){return t}))},r.ticks=function(e,u){var i=_i(r.domain());if("function"!=typeof e){var a=i[1]-i[0],o=a/e,c=Ci.bisect(Wo,o);if(c==Wo.length)return n.year(i,e);if(!c)return t.ticks(e).map(wi);Math.log(o/Wo[c-1])<Math.log(Wo[c]/o)&&--c,e=n[c],u=e[1],e=e[0].range}return e(i[0],new Date(+i[1]+1),u)},r.tickFormat=function(){return e},r.copy=function(){return xi(t.copy(),n,e)},Ci.rebind(r,t,"range","rangeRound","interpolate","clamp")}function _i(t){var n=t[0],e=t[t.length-1];return e>n?[n,e]:[e,n]}function wi(t){return new Date(t)}function Si(t){return function(n){for(var e=t.length-1,r=t[e];!r[1](n);)r=t[--e];return r[0](n)}}function ki(t){var n=new Date(t,0,1);return n.setFullYear(t),n}function Ei(t){var n=t.getFullYear(),e=ki(n),r=ki(n+1);return n+(t-e)/(r-e)}function Ai(t){var n=new Date(Date.UTC(t,0,1));return n.setUTCFullYear(t),n}function Ni(t){var n=t.getUTCFullYear(),e=Ai(n),r=Ai(n+1);return n+(t-e)/(r-e)}var Ti=Math.PI,qi=1e-6,Ci={version:"3.0.8"},zi=Ti/180,Di=180/Ti,Li=document,Fi=window,Hi=".",ji=",",Pi=[3,3];Date.now||(Date.now=function(){return+new Date});try{Li.createElement("div").style.setProperty("opacity",0,"")}catch(Ri){var Oi=Fi.CSSStyleDeclaration.prototype,Yi=Oi.setProperty;Oi.setProperty=function(t,n,e){Yi.call(this,t,n+"",e)}}var Ui=u;try{Ui(Li.documentElement.childNodes)[0].nodeType}catch(Ii){Ui=r}var Vi=[].__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};Ci.map=function(t){var n=new i;for(var e in t)n.set(e,t[e]);return n},e(i,{has:function(t){return Zi+t in this},get:function(t){return this[Zi+t]},set:function(t,n){return this[Zi+t]=n},remove:function(t){return t=Zi+t,t in this&&delete this[t]},keys:function(){var t=[];return this.forEach(function(n){t.push(n)}),t},values:function(){var t=[];return this.forEach(function(n,e){t.push(e)}),t},entries:function(){var t=[];return this.forEach(function(n,e){t.push({key:n,value:e})}),t},forEach:function(t){for(var n in this)n.charCodeAt(0)===Xi&&t.call(this,n.substring(1),this[n])}});var Zi="\0",Xi=Zi.charCodeAt(0);Ci.functor=c,Ci.rebind=function(t,n){for(var e,r=1,u=arguments.length;u>++r;)t[e=arguments[r]]=l(t,n,n[e]);return t},Ci.ascending=function(t,n){return n>t?-1:t>n?1:t>=n?0:0/0},Ci.descending=function(t,n){return t>n?-1:n>t?1:n>=t?0:0/0},Ci.mean=function(t,n){var e,r=t.length,u=0,i=-1,a=0;if(1===arguments.length)for(;r>++i;)f(e=t[i])&&(u+=(e-u)/++a);else for(;r>++i;)f(e=n.call(t,t[i],i))&&(u+=(e-u)/++a);return a?u:void 0},Ci.median=function(t,n){return arguments.length>1&&(t=t.map(n)),t=t.filter(f),t.length?Ci.quantile(t.sort(Ci.ascending),.5):void 0},Ci.min=function(t,n){var e,r,u=-1,i=t.length;if(1===arguments.length){for(;i>++u&&(null==(e=t[u])||e!=e);)e=void 0;for(;i>++u;)null!=(r=t[u])&&e>r&&(e=r)}else{for(;i>++u&&(null==(e=n.call(t,t[u],u))||e!=e);)e=void 0;for(;i>++u;)null!=(r=n.call(t,t[u],u))&&e>r&&(e=r)}return e},Ci.max=function(t,n){var e,r,u=-1,i=t.length;if(1===arguments.length){for(;i>++u&&(null==(e=t[u])||e!=e);)e=void 0;for(;i>++u;)null!=(r=t[u])&&r>e&&(e=r)}else{for(;i>++u&&(null==(e=n.call(t,t[u],u))||e!=e);)e=void 0;for(;i>++u;)null!=(r=n.call(t,t[u],u))&&r>e&&(e=r)}return e},Ci.extent=function(t,n){var e,r,u,i=-1,a=t.length;if(1===arguments.length){for(;a>++i&&(null==(e=u=t[i])||e!=e);)e=u=void 0;for(;a>++i;)null!=(r=t[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;a>++i&&(null==(e=u=n.call(t,t[i],i))||e!=e);)e=void 0;for(;a>++i;)null!=(r=n.call(t,t[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Ci.random={normal:function(t,n){var e=arguments.length;return 2>e&&(n=1),1>e&&(t=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return t+n*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var t=Ci.random.normal.apply(Ci,arguments);return function(){return Math.exp(t())}},irwinHall:function(t){return function(){for(var n=0,e=0;t>e;e++)n+=Math.random();return n/t}}},Ci.sum=function(t,n){var e,r=0,u=t.length,i=-1;if(1===arguments.length)for(;u>++i;)isNaN(e=+t[i])||(r+=e);else for(;u>++i;)isNaN(e=+n.call(t,t[i],i))||(r+=e);return r},Ci.quantile=function(t,n){var e=(t.length-1)*n+1,r=Math.floor(e),u=+t[r-1],i=e-r;return i?u+i*(t[r]-u):u},Ci.shuffle=function(t){for(var n,e,r=t.length;r;)e=0|Math.random()*r--,n=t[r],t[r]=t[e],t[e]=n;return t},Ci.transpose=function(t){return Ci.zip.apply(Ci,t)},Ci.zip=function(){if(!(r=arguments.length))return[];for(var t=-1,n=Ci.min(arguments,s),e=Array(n);n>++t;)for(var r,u=-1,i=e[t]=Array(r);r>++u;)i[u]=arguments[u][t];return e},Ci.bisector=function(t){return{left:function(n,e,r,u){for(3>arguments.length&&(r=0),4>arguments.length&&(u=n.length);u>r;){var i=r+u>>>1;e>t.call(n,n[i],i)?r=i+1:u=i}return r},right:function(n,e,r,u){for(3>arguments.length&&(r=0),4>arguments.length&&(u=n.length);u>r;){var i=r+u>>>1;t.call(n,n[i],i)>e?u=i:r=i+1}return r}}};var Bi=Ci.bisector(function(t){return t});Ci.bisectLeft=Bi.left,Ci.bisect=Ci.bisectRight=Bi.right,Ci.nest=function(){function t(n,o){if(o>=a.length)return r?r.call(u,n):e?n.sort(e):n;for(var c,l,f,s=-1,h=n.length,g=a[o++],p=new i,d={};h>++s;)(f=p.get(c=g(l=n[s])))?f.push(l):p.set(c,[l]);return p.forEach(function(n,e){d[n]=t(e,o)}),d}function n(t,e){if(e>=a.length)return t;var r,u=[],i=o[e++];for(r in t)u.push({key:r,values:n(t[r],e)});return i&&u.sort(function(t,n){return i(t.key,n.key)}),u}var e,r,u={},a=[],o=[];return u.map=function(n){return t(n,0)},u.entries=function(e){return n(t(e,0),0)},u.key=function(t){return a.push(t),u},u.sortKeys=function(t){return o[a.length-1]=t,u},u.sortValues=function(t){return e=t,u},u.rollup=function(t){return r=t,u},u},Ci.keys=function(t){var n=[];for(var e in t)n.push(e);return n},Ci.values=function(t){var n=[];for(var e in t)n.push(t[e]);return n},Ci.entries=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},Ci.permute=function(t,n){for(var e=[],r=-1,u=n.length;u>++r;)e[r]=t[n[r]];return e},Ci.merge=function(t){return Array.prototype.concat.apply([],t)},Ci.range=function(t,n,e){if(3>arguments.length&&(e=1,2>arguments.length&&(n=t,t=0)),1/0===(n-t)/e)throw Error("infinite range");var r,u=[],i=g(Math.abs(e)),a=-1;if(t*=i,n*=i,e*=i,0>e)for(;(r=t+e*++a)>n;)u.push(r/i);else for(;n>(r=t+e*++a);)u.push(r/i);return u},Ci.requote=function(t){return t.replace($i,"\\$&")};var $i=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;Ci.round=function(t,n){return n?Math.round(t*(n=Math.pow(10,n)))/n:Math.round(t)},Ci.xhr=function(t,n,e){function r(){var t=l.status;!t&&l.responseText||t>=200&&300>t||304===t?i.load.call(u,c.call(u,l)):i.error.call(u,l)}var u={},i=Ci.dispatch("progress","load","error"),o={},c=a,l=new(Fi.XDomainRequest&&/^(http(s)?:)?\/\//.test(t)?XDomainRequest:XMLHttpRequest);return"onload"in l?l.onload=l.onerror=r:l.onreadystatechange=function(){l.readyState>3&&r()},l.onprogress=function(t){var n=Ci.event;Ci.event=t;try{i.progress.call(u,l)}finally{Ci.event=n}},u.header=function(t,n){return t=(t+"").toLowerCase(),2>arguments.length?o[t]:(null==n?delete o[t]:o[t]=n+"",u)},u.mimeType=function(t){return arguments.length?(n=null==t?null:t+"",u):n},u.response=function(t){return c=t,u},["get","post"].forEach(function(t){u[t]=function(){return u.send.apply(u,[t].concat(Ui(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,t,!0),null==n||"accept"in o||(o.accept=n+",*/*"),l.setRequestHeader)for(var a in o)l.setRequestHeader(a,o[a]);return null!=n&&l.overrideMimeType&&l.overrideMimeType(n),null!=i&&u.on("error",i).on("load",function(t){i(null,t)}),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},Ci.rebind(u,i,"on"),2===arguments.length&&"function"==typeof n&&(e=n,n=null),null==e?u:u.get(p(e))},Ci.text=function(){return Ci.xhr.apply(Ci,arguments).response(d)},Ci.json=function(t,n){return Ci.xhr(t,"application/json",n).response(m)},Ci.html=function(t,n){return Ci.xhr(t,"text/html",n).response(v)},Ci.xml=function(){return Ci.xhr.apply(Ci,arguments).response(y)};var Ji={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Ci.ns={prefix:Ji,qualify:function(t){var n=t.indexOf(":"),e=t;return n>=0&&(e=t.substring(0,n),t=t.substring(n+1)),Ji.hasOwnProperty(e)?{space:Ji[e],local:t}:t}},Ci.dispatch=function(){for(var t=new M,n=-1,e=arguments.length;e>++n;)t[arguments[n]]=b(t);return t},M.prototype.on=function(t,n){var e=t.indexOf("."),r="";return e>0&&(r=t.substring(e+1),t=t.substring(0,e)),2>arguments.length?this[t].on(r):this[t].on(r,n)},Ci.format=function(t){var n=Gi.exec(t),e=n[1]||" ",r=n[2]||">",u=n[3]||"",i=n[4]||"",a=n[5],o=+n[6],c=n[7],l=n[8],f=n[9],s=1,h="",g=!1;switch(l&&(l=+l.substring(1)),(a||"0"===e&&"="===r)&&(a=e="0",r="=",c&&(o-=Math.floor((o-1)/4))),f){case"n":c=!0,f="g";break;case"%":s=100,h="%",f="f";break;case"p":s=100,h="%",f="r";break;case"b":case"o":case"x":case"X":i&&(i="0"+f.toLowerCase());case"c":case"d":g=!0,l=0;break;case"s":s=-1,f="r"}"#"===i&&(i=""),"r"!=f||l||(f="g"),f=Ki.get(f)||_;var p=a&&c;return function(t){if(g&&t%1)return"";var n=0>t||0===t&&0>1/t?(t=-t,"-"):u;if(0>s){var d=Ci.formatPrefix(t,l);t=d.scale(t),h=d.symbol}else t*=s;t=f(t,l),!a&&c&&(t=Wi(t));var m=i.length+t.length+(p?0:n.length),v=o>m?Array(m=o-m+1).join(e):"";return p&&(t=Wi(v+t)),Hi&&t.replace(".",Hi),n+=i,("<"===r?n+t+v:">"===r?v+n+t:"^"===r?v.substring(0,m>>=1)+n+t+v.substring(m):n+(p?t:v+t))+h}};var Gi=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,Ki=Ci.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return(t=Ci.round(t,x(t,n))).toFixed(Math.max(0,Math.min(20,x(t*(1+1e-15),n))))}}),Wi=a;if(Pi){var Qi=Pi.length;Wi=function(t){for(var n=t.lastIndexOf("."),e=n>=0?"."+t.substring(n+1):(n=t.length,""),r=[],u=0,i=Pi[0];n>0&&i>0;)r.push(t.substring(n-=i,n+i)),i=Pi[u=(u+1)%Qi];return r.reverse().join(ji||"")+e}}var ta=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(w);Ci.formatPrefix=function(t,n){var e=0;return t&&(0>t&&(t*=-1),n&&(t=Ci.round(t,x(t,n))),e=1+Math.floor(1e-12+Math.log(t)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),ta[8+e/3]};var na=function(){return a},ea=Ci.map({linear:na,poly:q,quad:function(){return A},cubic:function(){return N},sin:function(){return C},exp:function(){return z},circle:function(){return D},elastic:L,back:F,bounce:function(){return H}}),ra=Ci.map({"in":a,out:k,"in-out":E,"out-in":function(t){return E(k(t))}});Ci.ease=function(t){var n=t.indexOf("-"),e=n>=0?t.substring(0,n):t,r=n>=0?t.substring(n+1):"in";return e=ea.get(e)||na,r=ra.get(r)||a,S(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},Ci.event=null,Ci.transform=function(t){var n=Li.createElementNS(Ci.ns.prefix.svg,"g");return(Ci.transform=function(t){n.setAttribute("transform",t);var e=n.transform.baseVal.consolidate();return new O(e?e.matrix:ua)})(t)},O.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ua={a:1,b:0,c:0,d:1,e:0,f:0};Ci.interpolate=function(t,n){for(var e,r=Ci.interpolators.length;--r>=0&&!(e=Ci.interpolators[r](t,n)););return e},Ci.interpolateNumber=function(t,n){return n-=t,function(e){return t+n*e}},Ci.interpolateRound=function(t,n){return n-=t,function(e){return Math.round(t+n*e)}},Ci.interpolateString=function(t,n){var e,r,u,i,a,o=0,c=0,l=[],f=[];for(ia.lastIndex=0,r=0;e=ia.exec(n);++r)e.index&&l.push(n.substring(o,c=e.index)),f.push({i:l.length,x:e[0]}),l.push(null),o=ia.lastIndex;for(n.length>o&&l.push(n.substring(o)),r=0,i=f.length;(e=ia.exec(t))&&i>r;++r)if(a=f[r],a.x==e[0]){if(a.i)if(null==l[a.i+1])for(l[a.i-1]+=a.x,l.splice(a.i,1),u=r+1;i>u;++u)f[u].i--;else for(l[a.i-1]+=a.x+l[a.i+1],l.splice(a.i,2),u=r+1;i>u;++u)f[u].i-=2;else if(null==l[a.i+1])l[a.i]=a.x;else for(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1),u=r+1;i>u;++u)f[u].i--;f.splice(r,1),i--,r--}else a.x=Ci.interpolateNumber(parseFloat(e[0]),parseFloat(a.x));for(;i>r;)a=f.pop(),null==l[a.i+1]?l[a.i]=a.x:(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1)),i--;return 1===l.length?null==l[0]?f[0].x:function(){return n}:function(t){for(r=0;i>r;++r)l[(a=f[r]).i]=a.x(t);return l.join("")}},Ci.interpolateTransform=function(t,n){var e,r=[],u=[],i=Ci.transform(t),a=Ci.transform(n),o=i.translate,c=a.translate,l=i.rotate,f=a.rotate,s=i.skew,h=a.skew,g=i.scale,p=a.scale;return o[0]!=c[0]||o[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:Ci.interpolateNumber(o[0],c[0])},{i:3,x:Ci.interpolateNumber(o[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),l!=f?(l-f>180?f+=360:f-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:Ci.interpolateNumber(l,f)})):f&&r.push(r.pop()+"rotate("+f+")"),s!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:Ci.interpolateNumber(s,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:Ci.interpolateNumber(g[0],p[0])},{i:e-2,x:Ci.interpolateNumber(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(t){for(var n,i=-1;e>++i;)r[(n=u[i]).i]=n.x(t);return r.join("")}},Ci.interpolateRgb=function(t,n){t=Ci.rgb(t),n=Ci.rgb(n);var e=t.r,r=t.g,u=t.b,i=n.r-e,a=n.g-r,o=n.b-u;return function(t){return"#"+G(Math.round(e+i*t))+G(Math.round(r+a*t))+G(Math.round(u+o*t))}},Ci.interpolateHsl=function(t,n){t=Ci.hsl(t),n=Ci.hsl(n);var e=t.h,r=t.s,u=t.l,i=n.h-e,a=n.s-r,o=n.l-u;return i>180?i-=360:-180>i&&(i+=360),function(t){return un(e+i*t,r+a*t,u+o*t)+""}},Ci.interpolateLab=function(t,n){t=Ci.lab(t),n=Ci.lab(n);var e=t.l,r=t.a,u=t.b,i=n.l-e,a=n.a-r,o=n.b-u;return function(t){return sn(e+i*t,r+a*t,u+o*t)+""}},Ci.interpolateHcl=function(t,n){t=Ci.hcl(t),n=Ci.hcl(n);var e=t.h,r=t.c,u=t.l,i=n.h-e,a=n.c-r,o=n.l-u;return i>180?i-=360:-180>i&&(i+=360),function(t){return cn(e+i*t,r+a*t,u+o*t)+""}},Ci.interpolateArray=function(t,n){var e,r=[],u=[],i=t.length,a=n.length,o=Math.min(t.length,n.length);for(e=0;o>e;++e)r.push(Ci.interpolate(t[e],n[e]));for(;i>e;++e)u[e]=t[e];for(;a>e;++e)u[e]=n[e];return function(t){for(e=0;o>e;++e)u[e]=r[e](t);return u}},Ci.interpolateObject=function(t,n){var e,r={},u={};for(e in t)e in n?r[e]=V(e)(t[e],n[e]):u[e]=t[e];for(e in n)e in t||(u[e]=n[e]);return function(t){for(e in r)u[e]=r[e](t);return u}};var ia=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;Ci.interpolators=[Ci.interpolateObject,function(t,n){return n instanceof Array&&Ci.interpolateArray(t,n)},function(t,n){return("string"==typeof t||"string"==typeof n)&&Ci.interpolateString(t+"",n+"")},function(t,n){return("string"==typeof n?oa.has(n)||/^(#|rgb\(|hsl\()/.test(n):n instanceof B)&&Ci.interpolateRgb(t,n)},function(t,n){return!isNaN(t=+t)&&!isNaN(n=+n)&&Ci.interpolateNumber(t,n)}],B.prototype.toString=function(){return this.rgb()+""},Ci.rgb=function(t,n,e){return 1===arguments.length?t instanceof J?$(t.r,t.g,t.b):K(""+t,$,un):$(~~t,~~n,~~e)};var aa=J.prototype=new B;aa.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var n=this.r,e=this.g,r=this.b,u=30;return n||e||r?(n&&u>n&&(n=u),e&&u>e&&(e=u),r&&u>r&&(r=u),$(Math.min(255,Math.floor(n/t)),Math.min(255,Math.floor(e/t)),Math.min(255,Math.floor(r/t)))):$(u,u,u)},aa.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),$(Math.floor(t*this.r),Math.floor(t*this.g),Math.floor(t*this.b))},aa.hsl=function(){return W(this.r,this.g,this.b)},aa.toString=function(){return"#"+G(this.r)+G(this.g)+G(this.b)};var oa=Ci.map({aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"});
+oa.forEach(function(t,n){oa.set(t,K(n,$,un))}),Ci.hsl=function(t,n,e){return 1===arguments.length?t instanceof rn?en(t.h,t.s,t.l):K(""+t,W,en):en(+t,+n,+e)};var ca=rn.prototype=new B;ca.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),en(this.h,this.s,this.l/t)},ca.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),en(this.h,this.s,t*this.l)},ca.rgb=function(){return un(this.h,this.s,this.l)},Ci.hcl=function(t,n,e){return 1===arguments.length?t instanceof on?an(t.h,t.c,t.l):t instanceof fn?hn(t.l,t.a,t.b):hn((t=Q((t=Ci.rgb(t)).r,t.g,t.b)).l,t.a,t.b):an(+t,+n,+e)};var la=on.prototype=new B;la.brighter=function(t){return an(this.h,this.c,Math.min(100,this.l+fa*(arguments.length?t:1)))},la.darker=function(t){return an(this.h,this.c,Math.max(0,this.l-fa*(arguments.length?t:1)))},la.rgb=function(){return cn(this.h,this.c,this.l).rgb()},Ci.lab=function(t,n,e){return 1===arguments.length?t instanceof fn?ln(t.l,t.a,t.b):t instanceof on?cn(t.l,t.c,t.h):Q((t=Ci.rgb(t)).r,t.g,t.b):ln(+t,+n,+e)};var fa=18,sa=.95047,ha=1,ga=1.08883,pa=fn.prototype=new B;pa.brighter=function(t){return ln(Math.min(100,this.l+fa*(arguments.length?t:1)),this.a,this.b)},pa.darker=function(t){return ln(Math.max(0,this.l-fa*(arguments.length?t:1)),this.a,this.b)},pa.rgb=function(){return sn(this.l,this.a,this.b)};var da=function(t,n){return n.querySelector(t)},ma=function(t,n){return n.querySelectorAll(t)},va=Li.documentElement,ya=va.matchesSelector||va.webkitMatchesSelector||va.mozMatchesSelector||va.msMatchesSelector||va.oMatchesSelector,Ma=function(t,n){return ya.call(t,n)};"function"==typeof Sizzle&&(da=function(t,n){return Sizzle(t,n)[0]||null},ma=function(t,n){return Sizzle.uniqueSort(Sizzle(t,n))},Ma=Sizzle.matchesSelector);var ba=[];Ci.selection=function(){return xa},Ci.selection.prototype=ba,ba.select=function(t){var n,e,r,u,i=[];"function"!=typeof t&&(t=vn(t));for(var a=-1,o=this.length;o>++a;){i.push(n=[]),n.parentNode=(r=this[a]).parentNode;for(var c=-1,l=r.length;l>++c;)(u=r[c])?(n.push(e=t.call(u,u.__data__,c)),e&&"__data__"in u&&(e.__data__=u.__data__)):n.push(null)}return mn(i)},ba.selectAll=function(t){var n,e,r=[];"function"!=typeof t&&(t=yn(t));for(var u=-1,i=this.length;i>++u;)for(var a=this[u],o=-1,c=a.length;c>++o;)(e=a[o])&&(r.push(n=Ui(t.call(e,e.__data__,o))),n.parentNode=e);return mn(r)},ba.attr=function(t,n){if(2>arguments.length){if("string"==typeof t){var e=this.node();return t=Ci.ns.qualify(t),t.local?e.getAttributeNS(t.space,t.local):e.getAttribute(t)}for(n in t)this.each(Mn(n,t[n]));return this}return this.each(Mn(t,n))},ba.classed=function(t,n){if(2>arguments.length){if("string"==typeof t){var e=this.node(),r=(t=t.trim().split(/^|\s+/g)).length,u=-1;if(n=e.classList){for(;r>++u;)if(!n.contains(t[u]))return!1}else for(n=e.className,null!=n.baseVal&&(n=n.baseVal);r>++u;)if(!bn(t[u]).test(n))return!1;return!0}for(n in t)this.each(xn(n,t[n]));return this}return this.each(xn(t,n))},ba.style=function(t,n,e){var r=arguments.length;if(3>r){if("string"!=typeof t){2>r&&(n="");for(e in t)this.each(wn(e,t[e],n));return this}if(2>r)return Fi.getComputedStyle(this.node(),null).getPropertyValue(t);e=""}return this.each(wn(t,n,e))},ba.property=function(t,n){if(2>arguments.length){if("string"==typeof t)return this.node()[t];for(n in t)this.each(Sn(n,t[n]));return this}return this.each(Sn(t,n))},ba.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var n=t.apply(this,arguments);this.textContent=null==n?"":n}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},ba.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var n=t.apply(this,arguments);this.innerHTML=null==n?"":n}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},ba.append=function(t){function n(){return this.appendChild(Li.createElementNS(this.namespaceURI,t))}function e(){return this.appendChild(Li.createElementNS(t.space,t.local))}return t=Ci.ns.qualify(t),this.select(t.local?e:n)},ba.insert=function(t,n){function e(){return this.insertBefore(Li.createElementNS(this.namespaceURI,t),da(n,this))}function r(){return this.insertBefore(Li.createElementNS(t.space,t.local),da(n,this))}return t=Ci.ns.qualify(t),this.select(t.local?r:e)},ba.remove=function(){return this.each(function(){var t=this.parentNode;t&&t.removeChild(this)})},ba.data=function(t,n){function e(t,e){var r,u,a,o=t.length,s=e.length,h=Math.min(o,s),g=Array(s),p=Array(s),d=Array(o);if(n){var m,v=new i,y=new i,M=[];for(r=-1;o>++r;)m=n.call(u=t[r],u.__data__,r),v.has(m)?d[r]=u:v.set(m,u),M.push(m);for(r=-1;s>++r;)m=n.call(e,a=e[r],r),(u=v.get(m))?(g[r]=u,u.__data__=a):y.has(m)||(p[r]=kn(a)),y.set(m,a),v.remove(m);for(r=-1;o>++r;)v.has(M[r])&&(d[r]=t[r])}else{for(r=-1;h>++r;)u=t[r],a=e[r],u?(u.__data__=a,g[r]=u):p[r]=kn(a);for(;s>r;++r)p[r]=kn(e[r]);for(;o>r;++r)d[r]=t[r]}p.update=g,p.parentNode=g.parentNode=d.parentNode=t.parentNode,c.push(p),l.push(g),f.push(d)}var r,u,a=-1,o=this.length;if(!arguments.length){for(t=Array(o=(r=this[0]).length);o>++a;)(u=r[a])&&(t[a]=u.__data__);return t}var c=qn([]),l=mn([]),f=mn([]);if("function"==typeof t)for(;o>++a;)e(r=this[a],t.call(r,r.parentNode.__data__,a));else for(;o>++a;)e(r=this[a],t);return l.enter=function(){return c},l.exit=function(){return f},l},ba.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},ba.filter=function(t){var n,e,r,u=[];"function"!=typeof t&&(t=En(t));for(var i=0,a=this.length;a>i;i++){u.push(n=[]),n.parentNode=(e=this[i]).parentNode;for(var o=0,c=e.length;c>o;o++)(r=e[o])&&t.call(r,r.__data__,o)&&n.push(r)}return mn(u)},ba.order=function(){for(var t=-1,n=this.length;n>++t;)for(var e,r=this[t],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ba.sort=function(t){t=An.apply(this,arguments);for(var n=-1,e=this.length;e>++n;)this[n].sort(t);return this.order()},ba.on=function(t,n,e){var r=arguments.length;if(3>r){if("string"!=typeof t){2>r&&(n=!1);for(e in t)this.each(Nn(e,t[e],n));return this}if(2>r)return(r=this.node()["__on"+t])&&r._;e=!1}return this.each(Nn(t,n,e))},ba.each=function(t){return Tn(this,function(n,e,r){t.call(n,n.__data__,e,r)})},ba.call=function(t){var n=Ui(arguments);return t.apply(n[0]=this,n),this},ba.empty=function(){return!this.node()},ba.node=function(){for(var t=0,n=this.length;n>t;t++)for(var e=this[t],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ba.transition=function(){var t,n,e=wa||++ka,r=[],u=Object.create(Ea);u.time=Date.now();for(var i=-1,a=this.length;a>++i;){r.push(t=[]);for(var o=this[i],c=-1,l=o.length;l>++c;)(n=o[c])&&zn(n,c,e,u),t.push(n)}return Cn(r,e)};var xa=mn([[Li]]);xa[0].parentNode=va,Ci.select=function(t){return"string"==typeof t?xa.select(t):mn([[t]])},Ci.selectAll=function(t){return"string"==typeof t?xa.selectAll(t):mn([Ui(t)])};var _a=[];Ci.selection.enter=qn,Ci.selection.enter.prototype=_a,_a.append=ba.append,_a.insert=ba.insert,_a.empty=ba.empty,_a.node=ba.node,_a.select=function(t){for(var n,e,r,u,i,a=[],o=-1,c=this.length;c>++o;){r=(u=this[o]).update,a.push(n=[]),n.parentNode=u.parentNode;for(var l=-1,f=u.length;f>++l;)(i=u[l])?(n.push(r[l]=e=t.call(u.parentNode,i.__data__,l)),e.__data__=i.__data__):n.push(null)}return mn(a)};var wa,Sa=[],ka=0,Ea={ease:T,delay:0,duration:250};Sa.call=ba.call,Sa.empty=ba.empty,Sa.node=ba.node,Ci.transition=function(t){return arguments.length?wa?t.transition():t:xa.transition()},Ci.transition.prototype=Sa,Sa.select=function(t){var n,e,r,u=this.id,i=[];"function"!=typeof t&&(t=vn(t));for(var a=-1,o=this.length;o>++a;){i.push(n=[]);for(var c=this[a],l=-1,f=c.length;f>++l;)(r=c[l])&&(e=t.call(r,r.__data__,l))?("__data__"in r&&(e.__data__=r.__data__),zn(e,l,u,r.__transition__[u]),n.push(e)):n.push(null)}return Cn(i,u)},Sa.selectAll=function(t){var n,e,r,u,i,a=this.id,o=[];"function"!=typeof t&&(t=yn(t));for(var c=-1,l=this.length;l>++c;)for(var f=this[c],s=-1,h=f.length;h>++s;)if(r=f[s]){i=r.__transition__[a],e=t.call(r,r.__data__,s),o.push(n=[]);for(var g=-1,p=e.length;p>++g;)zn(u=e[g],g,a,i),n.push(u)}return Cn(o,a)},Sa.filter=function(t){var n,e,r,u=[];"function"!=typeof t&&(t=En(t));for(var i=0,a=this.length;a>i;i++){u.push(n=[]);for(var e=this[i],o=0,c=e.length;c>o;o++)(r=e[o])&&t.call(r,r.__data__,o)&&n.push(r)}return Cn(u,this.id,this.time).ease(this.ease())},Sa.attr=function(t,n){function e(){this.removeAttribute(i)}function r(){this.removeAttributeNS(i.space,i.local)}if(2>arguments.length){for(n in t)this.attr(n,t[n]);return this}var u=V(t),i=Ci.ns.qualify(t);return Ln(this,"attr."+t,n,function(t){function n(){var n,e=this.getAttribute(i);return e!==t&&(n=u(e,t),function(t){this.setAttribute(i,n(t))})}function a(){var n,e=this.getAttributeNS(i.space,i.local);return e!==t&&(n=u(e,t),function(t){this.setAttributeNS(i.space,i.local,n(t))})}return null==t?i.local?r:e:(t+="",i.local?a:n)})},Sa.attrTween=function(t,n){function e(t,e){var r=n.call(this,t,e,this.getAttribute(u));return r&&function(t){this.setAttribute(u,r(t))}}function r(t,e){var r=n.call(this,t,e,this.getAttributeNS(u.space,u.local));return r&&function(t){this.setAttributeNS(u.space,u.local,r(t))}}var u=Ci.ns.qualify(t);return this.tween("attr."+t,u.local?r:e)},Sa.style=function(t,n,e){function r(){this.style.removeProperty(t)}var u=arguments.length;if(3>u){if("string"!=typeof t){2>u&&(n="");for(e in t)this.style(e,t[e],n);return this}e=""}var i=V(t);return Ln(this,"style."+t,n,function(n){function u(){var r,u=Fi.getComputedStyle(this,null).getPropertyValue(t);return u!==n&&(r=i(u,n),function(n){this.style.setProperty(t,r(n),e)})}return null==n?r:(n+="",u)})},Sa.styleTween=function(t,n,e){return 3>arguments.length&&(e=""),this.tween("style."+t,function(r,u){var i=n.call(this,r,u,Fi.getComputedStyle(this,null).getPropertyValue(t));return i&&function(n){this.style.setProperty(t,i(n),e)}})},Sa.text=function(t){return Ln(this,"text",t,Dn)},Sa.remove=function(){return this.each("end.transition",function(){var t;!this.__transition__&&(t=this.parentNode)&&t.removeChild(this)})},Sa.ease=function(t){var n=this.id;return 1>arguments.length?this.node().__transition__[n].ease:("function"!=typeof t&&(t=Ci.ease.apply(Ci,arguments)),Tn(this,function(e){e.__transition__[n].ease=t}))},Sa.delay=function(t){var n=this.id;return Tn(this,"function"==typeof t?function(e,r,u){e.__transition__[n].delay=0|t.call(e,e.__data__,r,u)}:(t|=0,function(e){e.__transition__[n].delay=t}))},Sa.duration=function(t){var n=this.id;return Tn(this,"function"==typeof t?function(e,r,u){e.__transition__[n].duration=Math.max(1,0|t.call(e,e.__data__,r,u))}:(t=Math.max(1,0|t),function(e){e.__transition__[n].duration=t}))},Sa.each=function(t,n){var e=this.id;if(2>arguments.length){var r=Ea,u=wa;wa=e,Tn(this,function(n,r,u){Ea=n.__transition__[e],t.call(n,n.__data__,r,u)}),Ea=r,wa=u}else Tn(this,function(r){r.__transition__[e].event.on(t,n)});return this},Sa.transition=function(){for(var t,n,e,r,u=this.id,i=++ka,a=[],o=0,c=this.length;c>o;o++){a.push(t=[]);for(var n=this[o],l=0,f=n.length;f>l;l++)(e=n[l])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,zn(e,l,i,r)),t.push(e)}return Cn(a,i)},Sa.tween=function(t,n){var e=this.id;return 2>arguments.length?this.node().__transition__[e].tween.get(t):Tn(this,null==n?function(n){n.__transition__[e].tween.remove(t)}:function(r){r.__transition__[e].tween.set(t,n)})};var Aa,Na,Ta=0,qa={},Ca=null;Ci.timer=function(t,n,e){if(3>arguments.length){if(2>arguments.length)n=0;else if(!isFinite(n))return;e=Date.now()}var r=qa[t.id];r&&r.callback===t?(r.then=e,r.delay=n):qa[t.id=++Ta]=Ca={callback:t,then:e,delay:n,next:Ca},Aa||(Na=clearTimeout(Na),Aa=1,za(Fn))},Ci.timer.flush=function(){for(var t,n=Date.now(),e=Ca;e;)t=n-e.then,e.delay||(e.flush=e.callback(t)),e=e.next;Hn()};var za=Fi.requestAnimationFrame||Fi.webkitRequestAnimationFrame||Fi.mozRequestAnimationFrame||Fi.oRequestAnimationFrame||Fi.msRequestAnimationFrame||function(t){setTimeout(t,17)};Ci.mouse=function(t){return jn(t,P())};var Da=/WebKit/.test(Fi.navigator.userAgent)?-1:0;Ci.touches=function(t,n){return 2>arguments.length&&(n=P().touches),n?Ui(n).map(function(n){var e=jn(t,n);return e.identifier=n.identifier,e}):[]},Ci.scale={},Ci.scale.linear=function(){return In([0,1],[0,1],Ci.interpolate,!1)},Ci.scale.log=function(){return Kn(Ci.scale.linear(),Wn)};var La=Ci.format(".0e");Wn.pow=function(t){return Math.pow(10,t)},Qn.pow=function(t){return-Math.pow(10,-t)},Ci.scale.pow=function(){return te(Ci.scale.linear(),1)},Ci.scale.sqrt=function(){return Ci.scale.pow().exponent(.5)},Ci.scale.ordinal=function(){return ee([],{t:"range",a:[[]]})},Ci.scale.category10=function(){return Ci.scale.ordinal().range(Fa)},Ci.scale.category20=function(){return Ci.scale.ordinal().range(Ha)},Ci.scale.category20b=function(){return Ci.scale.ordinal().range(ja)},Ci.scale.category20c=function(){return Ci.scale.ordinal().range(Pa)};var Fa=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Ha=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],ja=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Pa=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];Ci.scale.quantile=function(){return re([],[])},Ci.scale.quantize=function(){return ue(0,1,[0,1])},Ci.scale.threshold=function(){return ie([.5],[0,1])},Ci.scale.identity=function(){return ae([0,1])},Ci.svg={},Ci.svg.arc=function(){function t(){var t=n.apply(this,arguments),i=e.apply(this,arguments),a=r.apply(this,arguments)+Ra,o=u.apply(this,arguments)+Ra,c=(a>o&&(c=a,a=o,o=c),o-a),l=Ti>c?"0":"1",f=Math.cos(a),s=Math.sin(a),h=Math.cos(o),g=Math.sin(o);return c>=Oa?t?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+t+"A"+t+","+t+" 0 1,0 0,"+-t+"A"+t+","+t+" 0 1,0 0,"+t+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":t?"M"+i*f+","+i*s+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L"+t*h+","+t*g+"A"+t+","+t+" 0 "+l+",0 "+t*f+","+t*s+"Z":"M"+i*f+","+i*s+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L0,0"+"Z"}var n=oe,e=ce,r=le,u=fe;return t.innerRadius=function(e){return arguments.length?(n=c(e),t):n},t.outerRadius=function(n){return arguments.length?(e=c(n),t):e},t.startAngle=function(n){return arguments.length?(r=c(n),t):r},t.endAngle=function(n){return arguments.length?(u=c(n),t):u},t.centroid=function(){var t=(n.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+Ra;return[Math.cos(i)*t,Math.sin(i)*t]},t};var Ra=-Ti/2,Oa=2*Ti-1e-6;Ci.svg.line=function(){return se(a)};var Ya=Ci.map({linear:pe,"linear-closed":de,"step-before":me,"step-after":ve,basis:we,"basis-open":Se,"basis-closed":ke,bundle:Ee,cardinal:be,"cardinal-open":ye,"cardinal-closed":Me,monotone:ze});Ya.forEach(function(t,n){n.key=t,n.closed=/-closed$/.test(t)});var Ua=[0,2/3,1/3,0],Ia=[0,1/3,2/3,0],Va=[0,1/6,2/3,1/6];Ci.svg.line.radial=function(){var t=se(De);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},me.reverse=ve,ve.reverse=me,Ci.svg.area=function(){return Le(a)},Ci.svg.area.radial=function(){var t=Le(De);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},Ci.svg.chord=function(){function e(t,n){var e=r(this,o,t,n),c=r(this,l,t,n);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(u(e,c)?a(e.r,e.p1,e.r,e.p0):a(e.r,e.p1,c.r,c.p0)+i(c.r,c.p1,c.a1-c.a0)+a(c.r,c.p1,e.r,e.p0))+"Z"}function r(t,n,e,r){var u=n.call(t,e,r),i=f.call(t,u,r),a=s.call(t,u,r)+Ra,o=h.call(t,u,r)+Ra;return{r:i,a0:a,a1:o,p0:[i*Math.cos(a),i*Math.sin(a)],p1:[i*Math.cos(o),i*Math.sin(o)]}}function u(t,n){return t.a0==n.a0&&t.a1==n.a1}function i(t,n,e){return"A"+t+","+t+" 0 "+ +(e>Ti)+",1 "+n}function a(t,n,e,r){return"Q 0,0 "+r}var o=n,l=t,f=Fe,s=le,h=fe;return e.radius=function(t){return arguments.length?(f=c(t),e):f},e.source=function(t){return arguments.length?(o=c(t),e):o},e.target=function(t){return arguments.length?(l=c(t),e):l},e.startAngle=function(t){return arguments.length?(s=c(t),e):s},e.endAngle=function(t){return arguments.length?(h=c(t),e):h},e},Ci.svg.diagonal=function(){function e(t,n){var e=r.call(this,t,n),a=u.call(this,t,n),o=(e.y+a.y)/2,c=[e,{x:e.x,y:o},{x:a.x,y:o},a];return c=c.map(i),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var r=n,u=t,i=He;return e.source=function(t){return arguments.length?(r=c(t),e):r},e.target=function(t){return arguments.length?(u=c(t),e):u},e.projection=function(t){return arguments.length?(i=t,e):i},e},Ci.svg.diagonal.radial=function(){var t=Ci.svg.diagonal(),n=He,e=t.projection;return t.projection=function(t){return arguments.length?e(je(n=t)):n},t},Ci.svg.symbol=function(){function t(t,r){return(Za.get(n.call(this,t,r))||Oe)(e.call(this,t,r))}var n=Re,e=Pe;return t.type=function(e){return arguments.length?(n=c(e),t):n},t.size=function(n){return arguments.length?(e=c(n),t):e},t};var Za=Ci.map({circle:Oe,cross:function(t){var n=Math.sqrt(t/5)/2;return"M"+-3*n+","+-n+"H"+-n+"V"+-3*n+"H"+n+"V"+-n+"H"+3*n+"V"+n+"H"+n+"V"+3*n+"H"+-n+"V"+n+"H"+-3*n+"Z"},diamond:function(t){var n=Math.sqrt(t/(2*Ba)),e=n*Ba;return"M0,"+-n+"L"+e+",0"+" 0,"+n+" "+-e+",0"+"Z"},square:function(t){var n=Math.sqrt(t)/2;return"M"+-n+","+-n+"L"+n+","+-n+" "+n+","+n+" "+-n+","+n+"Z"},"triangle-down":function(t){var n=Math.sqrt(t/Xa),e=n*Xa/2;return"M0,"+e+"L"+n+","+-e+" "+-n+","+-e+"Z"},"triangle-up":function(t){var n=Math.sqrt(t/Xa),e=n*Xa/2;return"M0,"+-e+"L"+n+","+e+" "+-n+","+e+"Z"}});Ci.svg.symbolTypes=Za.keys();var Xa=Math.sqrt(3),Ba=Math.tan(30*zi);Ci.svg.axis=function(){function t(t){t.each(function(){var t,s=Ci.select(this),h=null==l?e.ticks?e.ticks.apply(e,c):e.domain():l,g=null==n?e.tickFormat?e.tickFormat.apply(e,c):String:n,p=Ie(e,h,f),d=s.selectAll(".tick.minor").data(p,String),m=d.enter().insert("line",".tick").attr("class","tick minor").style("opacity",1e-6),v=Ci.transition(d.exit()).style("opacity",1e-6).remove(),y=Ci.transition(d).style("opacity",1),M=s.selectAll(".tick.major").data(h,String),b=M.enter().insert("g","path").attr("class","tick major").style("opacity",1e-6),x=Ci.transition(M.exit()).style("opacity",1e-6).remove(),_=Ci.transition(M).style("opacity",1),w=On(e),S=s.selectAll(".domain").data([0]),k=(S.enter().append("path").attr("class","domain"),Ci.transition(S)),E=e.copy(),A=this.__chart__||E;this.__chart__=E,b.append("line"),b.append("text");var N=b.select("line"),T=_.select("line"),q=M.select("text").text(g),C=b.select("text"),z=_.select("text");switch(r){case"bottom":t=Ye,m.attr("y2",i),y.attr("x2",0).attr("y2",i),N.attr("y2",u),C.attr("y",Math.max(u,0)+o),T.attr("x2",0).attr("y2",u),z.attr("x",0).attr("y",Math.max(u,0)+o),q.attr("dy",".71em").style("text-anchor","middle"),k.attr("d","M"+w[0]+","+a+"V0H"+w[1]+"V"+a);break;case"top":t=Ye,m.attr("y2",-i),y.attr("x2",0).attr("y2",-i),N.attr("y2",-u),C.attr("y",-(Math.max(u,0)+o)),T.attr("x2",0).attr("y2",-u),z.attr("x",0).attr("y",-(Math.max(u,0)+o)),q.attr("dy","0em").style("text-anchor","middle"),k.attr("d","M"+w[0]+","+-a+"V0H"+w[1]+"V"+-a);break;case"left":t=Ue,m.attr("x2",-i),y.attr("x2",-i).attr("y2",0),N.attr("x2",-u),C.attr("x",-(Math.max(u,0)+o)),T.attr("x2",-u).attr("y2",0),z.attr("x",-(Math.max(u,0)+o)).attr("y",0),q.attr("dy",".32em").style("text-anchor","end"),k.attr("d","M"+-a+","+w[0]+"H0V"+w[1]+"H"+-a);break;case"right":t=Ue,m.attr("x2",i),y.attr("x2",i).attr("y2",0),N.attr("x2",u),C.attr("x",Math.max(u,0)+o),T.attr("x2",u).attr("y2",0),z.attr("x",Math.max(u,0)+o).attr("y",0),q.attr("dy",".32em").style("text-anchor","start"),k.attr("d","M"+a+","+w[0]+"H0V"+w[1]+"H"+a)}if(e.ticks)b.call(t,A),_.call(t,E),x.call(t,E),m.call(t,A),y.call(t,E),v.call(t,E);else{var D=E.rangeBand()/2,L=function(t){return E(t)+D};b.call(t,L),_.call(t,L)}})}var n,e=Ci.scale.linear(),r=$a,u=6,i=6,a=6,o=3,c=[10],l=null,f=0;return t.scale=function(n){return arguments.length?(e=n,t):e},t.orient=function(n){return arguments.length?(r=n in Ja?n+"":$a,t):r},t.ticks=function(){return arguments.length?(c=arguments,t):c},t.tickValues=function(n){return arguments.length?(l=n,t):l},t.tickFormat=function(e){return arguments.length?(n=e,t):n},t.tickSize=function(n,e){if(!arguments.length)return u;var r=arguments.length-1;return u=+n,i=r>1?+e:u,a=r>0?+arguments[r]:u,t},t.tickPadding=function(n){return arguments.length?(o=+n,t):o},t.tickSubdivide=function(n){return arguments.length?(f=+n,t):f},t};var $a="bottom",Ja={top:1,right:1,bottom:1,left:1};Ci.svg.brush=function(){function t(i){i.each(function(){var i,a=Ci.select(this),f=a.selectAll(".background").data([0]),s=a.selectAll(".extent").data([0]),h=a.selectAll(".resize").data(l,String);a.style("pointer-events","all").on("mousedown.brush",u).on("touchstart.brush",u),f.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),s.enter().append("rect").attr("class","extent").style("cursor","move"),h.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Ga[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),h.style("display",t.empty()?"none":null),h.exit().remove(),o&&(i=On(o),f.attr("x",i[0]).attr("width",i[1]-i[0]),e(a)),c&&(i=On(c),f.attr("y",i[0]).attr("height",i[1]-i[0]),r(a)),n(a)})}function n(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+f[+/e$/.test(t)][0]+","+f[+/^s/.test(t)][1]+")"})}function e(t){t.select(".extent").attr("x",f[0][0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1][0]-f[0][0])}function r(t){t.select(".extent").attr("y",f[0][1]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1][1]-f[0][1])}function u(){function u(){var t=Ci.event.changedTouches;return t?Ci.touches(v,t)[0]:Ci.mouse(v)}function l(){32==Ci.event.keyCode&&(S||(d=null,k[0]-=f[1][0],k[1]-=f[1][1],S=2),j())}function s(){32==Ci.event.keyCode&&2==S&&(k[0]+=f[1][0],k[1]+=f[1][1],S=0,j())}function h(){var t=u(),i=!1;m&&(t[0]+=m[0],t[1]+=m[1]),S||(Ci.event.altKey?(d||(d=[(f[0][0]+f[1][0])/2,(f[0][1]+f[1][1])/2]),k[0]=f[+(t[0]<d[0])][0],k[1]=f[+(t[1]<d[1])][1]):d=null),_&&g(t,o,0)&&(e(b),i=!0),w&&g(t,c,1)&&(r(b),i=!0),i&&(n(b),M({type:"brush",mode:S?"move":"resize"}))}function g(t,n,e){var r,u,a=On(n),o=a[0],c=a[1],l=k[e],s=f[1][e]-f[0][e];return S&&(o-=l,c-=s+l),r=Math.max(o,Math.min(c,t[e])),S?u=(r+=l)+s:(d&&(l=Math.max(o,Math.min(c,2*d[e]-r))),r>l?(u=r,r=l):u=l),f[0][e]!==r||f[1][e]!==u?(i=null,f[0][e]=r,f[1][e]=u,!0):void 0}function p(){h(),b.style("pointer-events","all").selectAll(".resize").style("display",t.empty()?"none":null),Ci.select("body").style("cursor",null),E.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),M({type:"brushend"}),j()}var d,m,v=this,y=Ci.select(Ci.event.target),M=a.of(v,arguments),b=Ci.select(v),x=y.datum(),_=!/^(n|s)$/.test(x)&&o,w=!/^(e|w)$/.test(x)&&c,S=y.classed("extent"),k=u(),E=Ci.select(Fi).on("mousemove.brush",h).on("mouseup.brush",p).on("touchmove.brush",h).on("touchend.brush",p).on("keydown.brush",l).on("keyup.brush",s);if(S)k[0]=f[0][0]-k[0],k[1]=f[0][1]-k[1];else if(x){var A=+/w$/.test(x),N=+/^n/.test(x);m=[f[1-A][0]-k[0],f[1-N][1]-k[1]],k[0]=f[A][0],k[1]=f[N][1]}else Ci.event.altKey&&(d=k.slice());b.style("pointer-events","none").selectAll(".resize").style("display",null),Ci.select("body").style("cursor",y.style("cursor")),M({type:"brushstart"}),h(),j()}var i,a=R(t,"brushstart","brush","brushend"),o=null,c=null,l=Ka[0],f=[[0,0],[0,0]];return t.x=function(n){return arguments.length?(o=n,l=Ka[!o<<1|!c],t):o},t.y=function(n){return arguments.length?(c=n,l=Ka[!o<<1|!c],t):c},t.extent=function(n){var e,r,u,a,l;return arguments.length?(i=[[0,0],[0,0]],o&&(e=n[0],r=n[1],c&&(e=e[0],r=r[0]),i[0][0]=e,i[1][0]=r,o.invert&&(e=o(e),r=o(r)),e>r&&(l=e,e=r,r=l),f[0][0]=0|e,f[1][0]=0|r),c&&(u=n[0],a=n[1],o&&(u=u[1],a=a[1]),i[0][1]=u,i[1][1]=a,c.invert&&(u=c(u),a=c(a)),u>a&&(l=u,u=a,a=l),f[0][1]=0|u,f[1][1]=0|a),t):(n=i||f,o&&(e=n[0][0],r=n[1][0],i||(e=f[0][0],r=f[1][0],o.invert&&(e=o.invert(e),r=o.invert(r)),e>r&&(l=e,e=r,r=l))),c&&(u=n[0][1],a=n[1][1],i||(u=f[0][1],a=f[1][1],c.invert&&(u=c.invert(u),a=c.invert(a)),u>a&&(l=u,u=a,a=l))),o&&c?[[e,u],[r,a]]:o?[e,r]:c&&[u,a])},t.clear=function(){return i=null,f[0][0]=f[0][1]=f[1][0]=f[1][1]=0,t},t.empty=function(){return o&&f[0][0]===f[1][0]||c&&f[0][1]===f[1][1]},Ci.rebind(t,a,"on")};var Ga={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Ka=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];Ci.behavior={},Ci.behavior.drag=function(){function t(){this.on("mousedown.drag",n).on("touchstart.drag",n)}function n(){function t(){var t=o.parentNode;return null!=f?Ci.touches(t).filter(function(t){return t.identifier===f})[0]:Ci.mouse(t)}function n(){if(!o.parentNode)return u();var n=t(),e=n[0]-s[0],r=n[1]-s[1];h|=e|r,s=n,j(),c({type:"drag",x:n[0]+a[0],y:n[1]+a[1],dx:e,dy:r})}function u(){c({type:"dragend"}),h&&(j(),Ci.event.target===l&&g.on("click.drag",i,!0)),g.on(null!=f?"touchmove.drag-"+f:"mousemove.drag",null).on(null!=f?"touchend.drag-"+f:"mouseup.drag",null)}function i(){j(),g.on("click.drag",null)}var a,o=this,c=e.of(o,arguments),l=Ci.event.target,f=Ci.event.touches?Ci.event.changedTouches[0].identifier:null,s=t(),h=0,g=Ci.select(Fi).on(null!=f?"touchmove.drag-"+f:"mousemove.drag",n).on(null!=f?"touchend.drag-"+f:"mouseup.drag",u,!0);r?(a=r.apply(o,arguments),a=[a.x-s[0],a.y-s[1]]):a=[0,0],null==f&&j(),c({type:"dragstart"})}var e=R(t,"drag","dragstart","dragend"),r=null;return t.origin=function(n){return arguments.length?(r=n,t):r},Ci.rebind(t,e,"on")},Ci.behavior.zoom=function(){function t(){this.on("mousedown.zoom",o).on("mousemove.zoom",l).on(to+".zoom",c).on("dblclick.zoom",f).on("touchstart.zoom",s).on("touchmove.zoom",h).on("touchend.zoom",s)}function n(t){return[(t[0]-b[0])/x,(t[1]-b[1])/x]}function e(t){return[t[0]*x+b[0],t[1]*x+b[1]]}function r(t){x=Math.max(_[0],Math.min(_[1],t))}function u(t,n){n=e(n),b[0]+=t[0]-n[0],b[1]+=t[1]-n[1]}function i(){m&&m.domain(d.range().map(function(t){return(t-b[0])/x}).map(d.invert)),y&&y.domain(v.range().map(function(t){return(t-b[1])/x}).map(v.invert))}function a(t){i(),Ci.event.preventDefault(),t({type:"zoom",scale:x,translate:b})}function o(){function t(){l=1,u(Ci.mouse(i),s),a(o)}function e(){l&&j(),f.on("mousemove.zoom",null).on("mouseup.zoom",null),l&&Ci.event.target===c&&f.on("click.zoom",r,!0)}function r(){j(),f.on("click.zoom",null)}var i=this,o=w.of(i,arguments),c=Ci.event.target,l=0,f=Ci.select(Fi).on("mousemove.zoom",t).on("mouseup.zoom",e),s=n(Ci.mouse(i));Fi.focus(),j()}function c(){g||(g=n(Ci.mouse(this))),r(Math.pow(2,.002*Wa())*x),u(Ci.mouse(this),g),a(w.of(this,arguments))}function l(){g=null}function f(){var t=Ci.mouse(this),e=n(t),i=Math.log(x)/Math.LN2;r(Math.pow(2,Ci.event.shiftKey?Math.ceil(i)-1:Math.floor(i)+1)),u(t,e),a(w.of(this,arguments))}function s(){var t=Ci.touches(this),e=Date.now();if(p=x,g={},t.forEach(function(t){g[t.identifier]=n(t)}),j(),1===t.length){if(500>e-M){var i=t[0],o=n(t[0]);r(2*x),u(i,o),a(w.of(this,arguments))}M=e}}function h(){var t=Ci.touches(this),n=t[0],e=g[n.identifier];if(i=t[1]){var i,o=g[i.identifier];n=[(n[0]+i[0])/2,(n[1]+i[1])/2],e=[(e[0]+o[0])/2,(e[1]+o[1])/2],r(Ci.event.scale*p)}u(n,e),M=null,a(w.of(this,arguments))}var g,p,d,m,v,y,M,b=[0,0],x=1,_=Qa,w=R(t,"zoom");return t.translate=function(n){return arguments.length?(b=n.map(Number),i(),t):b},t.scale=function(n){return arguments.length?(x=+n,i(),t):x},t.scaleExtent=function(n){return arguments.length?(_=null==n?Qa:n.map(Number),t):_},t.x=function(n){return arguments.length?(m=n,d=n.copy(),b=[0,0],x=1,t):m},t.y=function(n){return arguments.length?(y=n,v=n.copy(),b=[0,0],x=1,t):y},Ci.rebind(t,w,"on")};var Wa,Qa=[0,1/0],to="onwheel"in document?(Wa=function(){return-Ci.event.deltaY*(Ci.event.deltaMode?120:1)},"wheel"):"onmousewheel"in document?(Wa=function(){return Ci.event.wheelDelta},"mousewheel"):(Wa=function(){return-Ci.event.detail},"MozMousePixelScroll");Ci.layout={},Ci.layout.bundle=function(){return function(t){for(var n=[],e=-1,r=t.length;r>++e;)n.push(Ve(t[e]));return n}},Ci.layout.chord=function(){function t(){var t,l,s,h,g,p={},d=[],m=Ci.range(i),v=[];for(e=[],r=[],t=0,h=-1;i>++h;){for(l=0,g=-1;i>++g;)l+=u[h][g];d.push(l),v.push(Ci.range(i)),t+=l}for(a&&m.sort(function(t,n){return a(d[t],d[n])}),o&&v.forEach(function(t,n){t.sort(function(t,e){return o(u[n][t],u[n][e])})}),t=(2*Ti-f*i)/t,l=0,h=-1;i>++h;){for(s=l,g=-1;i>++g;){var y=m[h],M=v[y][g],b=u[y][M],x=l,_=l+=b*t;p[y+"-"+M]={index:y,subindex:M,startAngle:x,endAngle:_,value:b}}r[y]={index:y,startAngle:s,endAngle:l,value:(l-s)/t},l+=f}for(h=-1;i>++h;)for(g=h-1;i>++g;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&n()}function n(){e.sort(function(t,n){return c((t.source.value+t.target.value)/2,(n.source.value+n.target.value)/2)})}var e,r,u,i,a,o,c,l={},f=0;return l.matrix=function(t){return arguments.length?(i=(u=t)&&u.length,e=r=null,l):u},l.padding=function(t){return arguments.length?(f=t,e=r=null,l):f},l.sortGroups=function(t){return arguments.length?(a=t,e=r=null,l):a},l.sortSubgroups=function(t){return arguments.length?(o=t,e=null,l):o},l.sortChords=function(t){return arguments.length?(c=t,e&&n(),l):c},l.chords=function(){return e||t(),e},l.groups=function(){return r||t(),r},l},Ci.layout.force=function(){function t(t){return function(n,e,r,u){if(n.point!==t){var i=n.cx-t.x,a=n.cy-t.y,o=1/Math.sqrt(i*i+a*a);if(m>(u-e)*o){var c=n.charge*o*o;return t.px-=i*c,t.py-=a*c,!0}if(n.point&&isFinite(o)){var c=n.pointCharge*o*o;t.px-=i*c,t.py-=a*c}}return!n.charge}}function n(t){t.px=Ci.event.x,t.py=Ci.event.y,c.resume()}var e,r,u,i,o,c={},l=Ci.dispatch("start","tick","end"),f=[1,1],s=.9,h=no,g=eo,p=-30,d=.1,m=.8,v=[],y=[];return c.tick=function(){if(.005>(r*=.99))return l.end({type:"end",alpha:r=0}),!0;var n,e,a,c,h,g,m,M,b,x=v.length,_=y.length;for(e=0;_>e;++e)a=y[e],c=a.source,h=a.target,M=h.x-c.x,b=h.y-c.y,(g=M*M+b*b)&&(g=r*i[e]*((g=Math.sqrt(g))-u[e])/g,M*=g,b*=g,h.x-=M*(m=c.weight/(h.weight+c.weight)),h.y-=b*m,c.x+=M*(m=1-m),c.y+=b*m);if((m=r*d)&&(M=f[0]/2,b=f[1]/2,e=-1,m))for(;x>++e;)a=v[e],a.x+=(M-a.x)*m,a.y+=(b-a.y)*m;if(p)for(Ke(n=Ci.geom.quadtree(v),r,o),e=-1;x>++e;)(a=v[e]).fixed||n.visit(t(a));for(e=-1;x>++e;)a=v[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*s,a.y-=(a.py-(a.py=a.y))*s);l.tick({type:"tick",alpha:r})},c.nodes=function(t){return arguments.length?(v=t,c):v},c.links=function(t){return arguments.length?(y=t,c):y},c.size=function(t){return arguments.length?(f=t,c):f},c.linkDistance=function(t){return arguments.length?(h="function"==typeof t?t:+t,c):h},c.distance=c.linkDistance,c.linkStrength=function(t){return arguments.length?(g="function"==typeof t?t:+t,c):g},c.friction=function(t){return arguments.length?(s=+t,c):s},c.charge=function(t){return arguments.length?(p="function"==typeof t?t:+t,c):p},c.gravity=function(t){return arguments.length?(d=+t,c):d},c.theta=function(t){return arguments.length?(m=+t,c):m},c.alpha=function(t){return arguments.length?(t=+t,r?r=t>0?t:0:t>0&&(l.start({type:"start",alpha:r=t}),Ci.timer(c.tick)),c):r},c.start=function(){function t(t,r){for(var u,i=n(e),a=-1,o=i.length;o>++a;)if(!isNaN(u=i[a][t]))return u;
+return Math.random()*r}function n(){if(!a){for(a=[],r=0;s>r;++r)a[r]=[];for(r=0;d>r;++r){var t=y[r];a[t.source.index].push(t.target),a[t.target.index].push(t.source)}}return a[e]}var e,r,a,l,s=v.length,d=y.length,m=f[0],M=f[1];for(e=0;s>e;++e)(l=v[e]).index=e,l.weight=0;for(e=0;d>e;++e)l=y[e],"number"==typeof l.source&&(l.source=v[l.source]),"number"==typeof l.target&&(l.target=v[l.target]),++l.source.weight,++l.target.weight;for(e=0;s>e;++e)l=v[e],isNaN(l.x)&&(l.x=t("x",m)),isNaN(l.y)&&(l.y=t("y",M)),isNaN(l.px)&&(l.px=l.x),isNaN(l.py)&&(l.py=l.y);if(u=[],"function"==typeof h)for(e=0;d>e;++e)u[e]=+h.call(this,y[e],e);else for(e=0;d>e;++e)u[e]=h;if(i=[],"function"==typeof g)for(e=0;d>e;++e)i[e]=+g.call(this,y[e],e);else for(e=0;d>e;++e)i[e]=g;if(o=[],"function"==typeof p)for(e=0;s>e;++e)o[e]=+p.call(this,v[e],e);else for(e=0;s>e;++e)o[e]=p;return c.resume()},c.resume=function(){return c.alpha(.1)},c.stop=function(){return c.alpha(0)},c.drag=function(){return e||(e=Ci.behavior.drag().origin(a).on("dragstart.force",Be).on("drag.force",n).on("dragend.force",$e)),arguments.length?(this.on("mouseover.force",Je).on("mouseout.force",Ge).call(e),void 0):e},Ci.rebind(c,l,"on")};var no=20,eo=1;Ci.layout.partition=function(){function t(n,e,r,u){var i=n.children;if(n.x=e,n.y=n.depth*u,n.dx=r,n.dy=u,i&&(a=i.length)){var a,o,c,l=-1;for(r=n.value?r/n.value:0;a>++l;)t(o=i[l],e,c=o.value*r,u),e+=c}}function n(t){var e=t.children,r=0;if(e&&(u=e.length))for(var u,i=-1;u>++i;)r=Math.max(r,n(e[i]));return 1+r}function e(e,i){var a=r.call(this,e,i);return t(a[0],0,u[0],u[1]/n(a[0])),a}var r=Ci.layout.hierarchy(),u=[1,1];return e.size=function(t){return arguments.length?(u=t,e):u},lr(e,r)},Ci.layout.pie=function(){function t(i){var a=i.map(function(e,r){return+n.call(t,e,r)}),o=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-r)/Ci.sum(a),l=Ci.range(i.length);null!=e&&l.sort(e===ro?function(t,n){return a[n]-a[t]}:function(t,n){return e(i[t],i[n])});var f=[];return l.forEach(function(t){var n;f[t]={data:i[t],value:n=a[t],startAngle:o,endAngle:o+=n*c}}),f}var n=Number,e=ro,r=0,u=2*Ti;return t.value=function(e){return arguments.length?(n=e,t):n},t.sort=function(n){return arguments.length?(e=n,t):e},t.startAngle=function(n){return arguments.length?(r=n,t):r},t.endAngle=function(n){return arguments.length?(u=n,t):u},t};var ro={};Ci.layout.stack=function(){function t(a,c){var l=a.map(function(e,r){return n.call(t,e,r)}),f=l.map(function(n){return n.map(function(n,e){return[i.call(t,n,e),o.call(t,n,e)]})}),s=e.call(t,f,c);l=Ci.permute(l,s),f=Ci.permute(f,s);var h,g,p,d=r.call(t,f,c),m=l.length,v=l[0].length;for(g=0;v>g;++g)for(u.call(t,l[0][g],p=d[g],f[0][g][1]),h=1;m>h;++h)u.call(t,l[h][g],p+=f[h-1][g][1],f[h][g][1]);return a}var n=a,e=nr,r=er,u=tr,i=We,o=Qe;return t.values=function(e){return arguments.length?(n=e,t):n},t.order=function(n){return arguments.length?(e="function"==typeof n?n:uo.get(n)||nr,t):e},t.offset=function(n){return arguments.length?(r="function"==typeof n?n:io.get(n)||er,t):r},t.x=function(n){return arguments.length?(i=n,t):i},t.y=function(n){return arguments.length?(o=n,t):o},t.out=function(n){return arguments.length?(u=n,t):u},t};var uo=Ci.map({"inside-out":function(t){var n,e,r=t.length,u=t.map(rr),i=t.map(ur),a=Ci.range(r).sort(function(t,n){return u[t]-u[n]}),o=0,c=0,l=[],f=[];for(n=0;r>n;++n)e=a[n],c>o?(o+=i[e],l.push(e)):(c+=i[e],f.push(e));return f.reverse().concat(l)},reverse:function(t){return Ci.range(t.length).reverse()},"default":nr}),io=Ci.map({silhouette:function(t){var n,e,r,u=t.length,i=t[0].length,a=[],o=0,c=[];for(e=0;i>e;++e){for(n=0,r=0;u>n;n++)r+=t[n][e][1];r>o&&(o=r),a.push(r)}for(e=0;i>e;++e)c[e]=(o-a[e])/2;return c},wiggle:function(t){var n,e,r,u,i,a,o,c,l,f=t.length,s=t[0],h=s.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(n=0,u=0;f>n;++n)u+=t[n][e][1];for(n=0,i=0,o=s[e][0]-s[e-1][0];f>n;++n){for(r=0,a=(t[n][e][1]-t[n][e-1][1])/(2*o);n>r;++r)a+=(t[r][e][1]-t[r][e-1][1])/o;i+=a*t[n][e][1]}g[e]=c-=u?i/u*o:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(t){var n,e,r,u=t.length,i=t[0].length,a=1/u,o=[];for(e=0;i>e;++e){for(n=0,r=0;u>n;n++)r+=t[n][e][1];if(r)for(n=0;u>n;n++)t[n][e][1]/=r;else for(n=0;u>n;n++)t[n][e][1]=a}for(e=0;i>e;++e)o[e]=0;return o},zero:er});Ci.layout.histogram=function(){function t(t,i){for(var a,o,c=[],l=t.map(e,this),f=r.call(this,l,i),s=u.call(this,f,l,i),i=-1,h=l.length,g=s.length-1,p=n?1:1/h;g>++i;)a=c[i]=[],a.dx=s[i+1]-(a.x=s[i]),a.y=0;if(g>0)for(i=-1;h>++i;)o=l[i],o>=f[0]&&f[1]>=o&&(a=c[Ci.bisect(s,o,1,g)-1],a.y+=p,a.push(t[i]));return c}var n=!0,e=Number,r=cr,u=ar;return t.value=function(n){return arguments.length?(e=n,t):e},t.range=function(n){return arguments.length?(r=c(n),t):r},t.bins=function(n){return arguments.length?(u="number"==typeof n?function(t){return or(t,n)}:c(n),t):u},t.frequency=function(e){return arguments.length?(n=!!e,t):n},t},Ci.layout.hierarchy=function(){function t(n,a,o){var c=u.call(e,n,a);if(n.depth=a,o.push(n),c&&(l=c.length)){for(var l,f,s=-1,h=n.children=[],g=0,p=a+1;l>++s;)f=t(c[s],p,o),f.parent=n,h.push(f),g+=f.value;r&&h.sort(r),i&&(n.value=g)}else i&&(n.value=+i.call(e,n,a)||0);return n}function n(t,r){var u=t.children,a=0;if(u&&(o=u.length))for(var o,c=-1,l=r+1;o>++c;)a+=n(u[c],l);else i&&(a=+i.call(e,t,r)||0);return i&&(t.value=a),a}function e(n){var e=[];return t(n,0,e),e}var r=hr,u=fr,i=sr;return e.sort=function(t){return arguments.length?(r=t,e):r},e.children=function(t){return arguments.length?(u=t,e):u},e.value=function(t){return arguments.length?(i=t,e):i},e.revalue=function(t){return n(t,0),t},e},Ci.layout.pack=function(){function t(t,u){var i=n.call(this,t,u),a=i[0];a.x=0,a.y=0,Lr(a,function(t){t.r=Math.sqrt(t.value)}),Lr(a,yr);var o=r[0],c=r[1],l=Math.max(2*a.r/o,2*a.r/c);if(e>0){var f=e*l/2;Lr(a,function(t){t.r+=f}),Lr(a,yr),Lr(a,function(t){t.r-=f}),l=Math.max(2*a.r/o,2*a.r/c)}return xr(a,o/2,c/2,1/l),i}var n=Ci.layout.hierarchy().sort(pr),e=0,r=[1,1];return t.size=function(n){return arguments.length?(r=n,t):r},t.padding=function(n){return arguments.length?(e=+n,t):e},lr(t,n)},Ci.layout.cluster=function(){function t(t,u){var i,a=n.call(this,t,u),o=a[0],c=0;Lr(o,function(t){var n=t.children;n&&n.length?(t.x=Sr(n),t.y=wr(n)):(t.x=i?c+=e(t,i):0,t.y=0,i=t)});var l=kr(o),f=Er(o),s=l.x-e(l,f)/2,h=f.x+e(f,l)/2;return Lr(o,function(t){t.x=(t.x-s)/(h-s)*r[0],t.y=(1-(o.y?t.y/o.y:1))*r[1]}),a}var n=Ci.layout.hierarchy().sort(null).value(null),e=Ar,r=[1,1];return t.separation=function(n){return arguments.length?(e=n,t):e},t.size=function(n){return arguments.length?(r=n,t):r},lr(t,n)},Ci.layout.tree=function(){function t(t,u){function i(t,n){var r=t.children,u=t._tree;if(r&&(a=r.length)){for(var a,c,l,f=r[0],s=f,h=-1;a>++h;)l=r[h],i(l,c),s=o(l,c,s),c=l;Fr(t);var g=.5*(f._tree.prelim+l._tree.prelim);n?(u.prelim=n._tree.prelim+e(t,n),u.mod=u.prelim-g):u.prelim=g}else n&&(u.prelim=n._tree.prelim+e(t,n))}function a(t,n){t.x=t._tree.prelim+n;var e=t.children;if(e&&(r=e.length)){var r,u=-1;for(n+=t._tree.mod;r>++u;)a(e[u],n)}}function o(t,n,r){if(n){for(var u,i=t,a=t,o=n,c=t.parent.children[0],l=i._tree.mod,f=a._tree.mod,s=o._tree.mod,h=c._tree.mod;o=Tr(o),i=Nr(i),o&&i;)c=Nr(c),a=Tr(a),a._tree.ancestor=t,u=o._tree.prelim+s-i._tree.prelim-l+e(o,i),u>0&&(Hr(jr(o,t,r),t,u),l+=u,f+=u),s+=o._tree.mod,l+=i._tree.mod,h+=c._tree.mod,f+=a._tree.mod;o&&!Tr(a)&&(a._tree.thread=o,a._tree.mod+=s-f),i&&!Nr(c)&&(c._tree.thread=i,c._tree.mod+=l-h,r=t)}return r}var c=n.call(this,t,u),l=c[0];Lr(l,function(t,n){t._tree={ancestor:t,prelim:0,mod:0,change:0,shift:0,number:n?n._tree.number+1:0}}),i(l),a(l,-l._tree.prelim);var f=qr(l,zr),s=qr(l,Cr),h=qr(l,Dr),g=f.x-e(f,s)/2,p=s.x+e(s,f)/2,d=h.depth||1;return Lr(l,function(t){t.x=(t.x-g)/(p-g)*r[0],t.y=t.depth/d*r[1],delete t._tree}),c}var n=Ci.layout.hierarchy().sort(null).value(null),e=Ar,r=[1,1];return t.separation=function(n){return arguments.length?(e=n,t):e},t.size=function(n){return arguments.length?(r=n,t):r},lr(t,n)},Ci.layout.treemap=function(){function t(t,n){for(var e,r,u=-1,i=t.length;i>++u;)r=(e=t[u]).value*(0>n?0:n),e.area=isNaN(r)||0>=r?0:r}function n(e){var i=e.children;if(i&&i.length){var a,o,c,l=s(e),f=[],h=i.slice(),p=1/0,d="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(t(h,l.dx*l.dy/e.value),f.area=0;(c=h.length)>0;)f.push(a=h[c-1]),f.area+=a.area,"squarify"!==g||p>=(o=r(f,d))?(h.pop(),p=o):(f.area-=f.pop().area,u(f,d,l,!1),d=Math.min(l.dx,l.dy),f.length=f.area=0,p=1/0);f.length&&(u(f,d,l,!0),f.length=f.area=0),i.forEach(n)}}function e(n){var r=n.children;if(r&&r.length){var i,a=s(n),o=r.slice(),c=[];for(t(o,a.dx*a.dy/n.value),c.area=0;i=o.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?a.dx:a.dy,a,!o.length),c.length=c.area=0);r.forEach(e)}}function r(t,n){for(var e,r=t.area,u=0,i=1/0,a=-1,o=t.length;o>++a;)(e=t[a].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,n*=n,r?Math.max(n*u*p/r,r/(n*i*p)):1/0}function u(t,n,e,r){var u,i=-1,a=t.length,o=e.x,l=e.y,f=n?c(t.area/n):0;if(n==e.dx){for((r||f>e.dy)&&(f=e.dy);a>++i;)u=t[i],u.x=o,u.y=l,u.dy=f,o+=u.dx=Math.min(e.x+e.dx-o,f?c(u.area/f):0);u.z=!0,u.dx+=e.x+e.dx-o,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);a>++i;)u=t[i],u.x=o,u.y=l,u.dx=f,l+=u.dy=Math.min(e.y+e.dy-l,f?c(u.area/f):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=f,e.dx-=f}}function i(r){var u=a||o(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],a&&o.revalue(i),t([i],i.dx*i.dy/i.value),(a?e:n)(i),h&&(a=u),u}var a,o=Ci.layout.hierarchy(),c=Math.round,l=[1,1],f=null,s=Pr,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(t){return arguments.length?(l=t,i):l},i.padding=function(t){function n(n){var e=t.call(i,n,n.depth);return null==e?Pr(n):Rr(n,"number"==typeof e?[e,e,e,e]:e)}function e(n){return Rr(n,t)}if(!arguments.length)return f;var r;return s=null==(f=t)?Pr:"function"==(r=typeof t)?n:"number"===r?(t=[t,t,t,t],e):e,i},i.round=function(t){return arguments.length?(c=t?Math.round:Number,i):c!=Number},i.sticky=function(t){return arguments.length?(h=t,a=null,i):h},i.ratio=function(t){return arguments.length?(p=t,i):p},i.mode=function(t){return arguments.length?(g=t+"",i):g},lr(i,o)},Ci.csv=Or(",","text/csv"),Ci.tsv=Or("	","text/tab-separated-values"),Ci.geo={},Ci.geo.stream=function(t,n){ao.hasOwnProperty(t.type)?ao[t.type](t,n):Yr(t,n)};var ao={Feature:function(t,n){Yr(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,u=e.length;u>++r;)Yr(e[r].geometry,n)}},oo={Sphere:function(t,n){n.sphere()},Point:function(t,n){var e=t.coordinates;n.point(e[0],e[1])},MultiPoint:function(t,n){for(var e,r=t.coordinates,u=-1,i=r.length;i>++u;)e=r[u],n.point(e[0],e[1])},LineString:function(t,n){Ur(t.coordinates,n,0)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,u=e.length;u>++r;)Ur(e[r],n,0)},Polygon:function(t,n){Ir(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,u=e.length;u>++r;)Ir(e[r],n)},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,u=e.length;u>++r;)Yr(e[r],n)}};Ci.geo.albersUsa=function(){function t(t){return n(t)(t)}function n(t){var n=t[0],a=t[1];return a>50?r:-140>n?u:21>a?i:e}var e=Ci.geo.albers(),r=Ci.geo.albers().rotate([160,0]).center([0,60]).parallels([55,65]),u=Ci.geo.albers().rotate([160,0]).center([0,20]).parallels([8,18]),i=Ci.geo.albers().rotate([60,0]).center([0,10]).parallels([8,18]);return t.scale=function(n){return arguments.length?(e.scale(n),r.scale(.6*n),u.scale(n),i.scale(1.5*n),t.translate(e.translate())):e.scale()},t.translate=function(n){if(!arguments.length)return e.translate();var a=e.scale(),o=n[0],c=n[1];return e.translate(n),r.translate([o-.4*a,c+.17*a]),u.translate([o-.19*a,c+.2*a]),i.translate([o+.58*a,c+.43*a]),t},t.scale(e.scale())},(Ci.geo.albers=function(){var t=29.5*zi,n=45.5*zi,e=Hu(Qr),r=e(t,n);return r.parallels=function(r){return arguments.length?e(t=r[0]*zi,n=r[1]*zi):[t*Di,n*Di]},r.rotate([98,0]).center([0,38]).scale(1e3)}).raw=Qr;var co=Uu(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(Ci.geo.azimuthalEqualArea=function(){return Fu(co)}).raw=co;var lo=Uu(function(t){var n=Math.acos(t);return n&&n/Math.sin(n)},a);(Ci.geo.azimuthalEquidistant=function(){return Fu(lo)}).raw=lo,Ci.geo.bounds=tu(a),Ci.geo.centroid=function(t){fo=so=ho=go=po=0,Ci.geo.stream(t,mo);var n;return so&&Math.abs(n=Math.sqrt(ho*ho+go*go+po*po))>qi?[Math.atan2(go,ho)*Di,Math.asin(Math.max(-1,Math.min(1,po/n)))*Di]:void 0};var fo,so,ho,go,po,mo={sphere:function(){2>fo&&(fo=2,so=ho=go=po=0)},point:nu,lineStart:ru,lineEnd:uu,polygonStart:function(){2>fo&&(fo=2,so=ho=go=po=0),mo.lineStart=eu},polygonEnd:function(){mo.lineStart=ru}};Ci.geo.circle=function(){function t(){var t="function"==typeof r?r.apply(this,arguments):r,n=Pu(-t[0]*zi,-t[1]*zi,0).invert,u=[];return e(null,null,1,{point:function(t,e){u.push(t=n(t,e)),t[0]*=Di,t[1]*=Di}}),{type:"Polygon",coordinates:[u]}}var n,e,r=[0,0],u=6;return t.origin=function(n){return arguments.length?(r=n,t):r},t.angle=function(r){return arguments.length?(e=iu((n=+r)*zi,u*zi),t):n},t.precision=function(r){return arguments.length?(e=iu(n*zi,(u=+r)*zi),t):u},t.angle(90)};var vo=ou(o,pu,mu);(Ci.geo.equirectangular=function(){return Fu(Mu).scale(250/Ti)}).raw=Mu.invert=Mu;var yo=Uu(function(t){return 1/t},Math.atan);(Ci.geo.gnomonic=function(){return Fu(yo)}).raw=yo,Ci.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return Ci.range(Math.ceil(r/c)*c,e,c).map(a).concat(Ci.range(Math.ceil(i/l)*l,u,l).map(o))}var e,r,u,i,a,o,c=22.5,l=c,f=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[a(r).concat(o(u).slice(1),a(e).reverse().slice(1),o(i).reverse().slice(1))]}},t.extent=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],i=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),i>u&&(n=i,i=u,u=n),t.precision(f)):[[r,i],[e,u]]},t.step=function(n){return arguments.length?(c=+n[0],l=+n[1],t):[c,l]},t.precision=function(n){return arguments.length?(f=+n,a=bu(i,u,f),o=xu(r,e,f),t):f},t.extent([[-180+qi,-90+qi],[180-qi,90-qi]])},Ci.geo.interpolate=function(t,n){return wu(t[0]*zi,t[1]*zi,n[0]*zi,n[1]*zi)},Ci.geo.greatArc=function(){function e(){for(var t=r||a.apply(this,arguments),n=u||o.apply(this,arguments),e=i||Ci.geo.interpolate(t,n),l=0,f=c/e.distance,s=[t];1>(l+=f);)s.push(e(l));return s.push(n),{type:"LineString",coordinates:s}}var r,u,i,a=n,o=t,c=6*zi;return e.distance=function(){return(i||Ci.geo.interpolate(r||a.apply(this,arguments),u||o.apply(this,arguments))).distance},e.source=function(t){return arguments.length?(a=t,r="function"==typeof t?null:t,i=r&&u?Ci.geo.interpolate(r,u):null,e):a},e.target=function(t){return arguments.length?(o=t,u="function"==typeof t?null:t,i=r&&u?Ci.geo.interpolate(r,u):null,e):o},e.precision=function(t){return arguments.length?(c=t*zi,e):c/zi},e},Su.invert=function(t,n){return[2*Ti*t,2*Math.atan(Math.exp(2*Ti*n))-Ti/2]},(Ci.geo.mercator=function(){return Fu(Su).scale(500)}).raw=Su;var Mo=Uu(function(){return 1},Math.asin);(Ci.geo.orthographic=function(){return Fu(Mo)}).raw=Mo,Ci.geo.path=function(){function t(t){return t&&Ci.geo.stream(t,r(u.pointRadius("function"==typeof i?+i.apply(this,arguments):i))),u.result()}var n,e,r,u,i=4.5;return t.area=function(t){return bo=0,Ci.geo.stream(t,r(_o)),bo},t.centroid=function(t){return fo=ho=go=po=0,Ci.geo.stream(t,r(wo)),po?[ho/po,go/po]:void 0},t.bounds=function(t){return tu(r)(t)},t.projection=function(e){return arguments.length?(r=(n=e)?e.stream||Eu(e):a,t):n},t.context=function(n){return arguments.length?(u=null==(e=n)?new Au:new Nu(n),t):e},t.pointRadius=function(n){return arguments.length?(i="function"==typeof n?n:+n,t):i},t.projection(Ci.geo.albersUsa()).context(null)};var bo,xo,_o={point:Pn,lineStart:Pn,lineEnd:Pn,polygonStart:function(){xo=0,_o.lineStart=Tu},polygonEnd:function(){_o.lineStart=_o.lineEnd=_o.point=Pn,bo+=Math.abs(xo/2)}},wo={point:qu,lineStart:Cu,lineEnd:zu,polygonStart:function(){wo.lineStart=Du},polygonEnd:function(){wo.point=qu,wo.lineStart=Cu,wo.lineEnd=zu}};Ci.geo.area=function(t){return So=0,Ci.geo.stream(t,Ao),So};var So,ko,Eo,Ao={sphere:function(){So+=4*Ti},point:Pn,lineStart:Pn,lineEnd:Pn,polygonStart:function(){ko=1,Eo=0,Ao.lineStart=Lu},polygonEnd:function(){var t=2*Math.atan2(Eo,ko);So+=0>t?4*Ti+t:t,Ao.lineStart=Ao.lineEnd=Ao.point=Pn}};Ci.geo.projection=Fu,Ci.geo.projectionMutator=Hu;var No=Uu(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(Ci.geo.stereographic=function(){return Fu(No)}).raw=No,Ci.geom={},Ci.geom.hull=function(t){if(3>t.length)return[];var n,e,r,u,i,a,o,c,l,f,s=t.length,h=s-1,g=[],p=[],d=0;for(n=1;s>n;++n)t[n][1]<t[d][1]?d=n:t[n][1]==t[d][1]&&(d=t[n][0]<t[d][0]?n:d);for(n=0;s>n;++n)n!==d&&(u=t[n][1]-t[d][1],r=t[n][0]-t[d][0],g.push({angle:Math.atan2(u,r),index:n}));for(g.sort(function(t,n){return t.angle-n.angle}),l=g[0].angle,c=g[0].index,o=0,n=1;h>n;++n)e=g[n].index,l==g[n].angle?(r=t[c][0]-t[d][0],u=t[c][1]-t[d][1],i=t[e][0]-t[d][0],a=t[e][1]-t[d][1],r*r+u*u>=i*i+a*a?g[n].index=-1:(g[o].index=-1,l=g[n].angle,o=n,c=e)):(l=g[n].angle,o=n,c=e);for(p.push(d),n=0,e=0;2>n;++e)-1!==g[e].index&&(p.push(g[e].index),n++);for(f=p.length;h>e;++e)if(-1!==g[e].index){for(;!Iu(p[f-2],p[f-1],g[e].index,t);)--f;p[f++]=g[e].index}var m=[];for(n=0;f>n;++n)m.push(t[p[n]]);return m},Ci.geom.polygon=function(t){return t.area=function(){for(var n=0,e=t.length,r=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];e>++n;)r+=t[n-1][1]*t[n][0]-t[n-1][0]*t[n][1];return.5*r},t.centroid=function(n){var e,r,u=-1,i=t.length,a=0,o=0,c=t[i-1];for(arguments.length||(n=-1/(6*t.area()));i>++u;)e=c,c=t[u],r=e[0]*c[1]-c[0]*e[1],a+=(e[0]+c[0])*r,o+=(e[1]+c[1])*r;return[a*n,o*n]},t.clip=function(n){for(var e,r,u,i,a,o,c=-1,l=t.length,f=t[l-1];l>++c;){for(e=n.slice(),n.length=0,i=t[c],a=e[(u=e.length)-1],r=-1;u>++r;)o=e[r],Vu(o,f,i)?(Vu(a,f,i)||n.push(Zu(a,o,f,i)),n.push(o)):Vu(a,f,i)&&n.push(Zu(a,o,f,i)),a=o;f=i}return n},t},Ci.geom.voronoi=function(t){var n=t.map(function(){return[]}),e=1e6;return Xu(t,function(t){var r,u,i,a,o,c;1===t.a&&t.b>=0?(r=t.ep.r,u=t.ep.l):(r=t.ep.l,u=t.ep.r),1===t.a?(o=r?r.y:-e,i=t.c-t.b*o,c=u?u.y:e,a=t.c-t.b*c):(i=r?r.x:-e,o=t.c-t.a*i,a=u?u.x:e,c=t.c-t.a*a);var l=[i,o],f=[a,c];n[t.region.l.index].push(l,f),n[t.region.r.index].push(l,f)}),n=n.map(function(n,e){var r=t[e][0],u=t[e][1],i=n.map(function(t){return Math.atan2(t[0]-r,t[1]-u)}),a=Ci.range(n.length).sort(function(t,n){return i[t]-i[n]});return a.filter(function(t,n){return!n||i[t]-i[a[n-1]]>qi}).map(function(t){return n[t]})}),n.forEach(function(n,r){var u=n.length;if(!u)return n.push([-e,-e],[-e,e],[e,e],[e,-e]);if(!(u>2)){var i=t[r],a=n[0],o=n[1],c=i[0],l=i[1],f=a[0],s=a[1],h=o[0],g=o[1],p=Math.abs(h-f),d=g-s;if(qi>Math.abs(d)){var m=s>l?-e:e;n.push([-e,m],[e,m])}else if(qi>p){var v=f>c?-e:e;n.push([v,-e],[v,e])}else{var m=(f-c)*(g-s)>(h-f)*(s-l)?e:-e,y=Math.abs(d)-p;qi>Math.abs(y)?n.push([0>d?m:-m,m]):(y>0&&(m*=-1),n.push([-e,m],[e,m]))}}}),n};var To={l:"r",r:"l"};Ci.geom.delaunay=function(t){var n=t.map(function(){return[]}),e=[];return Xu(t,function(e){n[e.region.l.index].push(t[e.region.r.index])}),n.forEach(function(n,r){var u=t[r],i=u[0],a=u[1];n.forEach(function(t){t.angle=Math.atan2(t[0]-i,t[1]-a)}),n.sort(function(t,n){return t.angle-n.angle});for(var o=0,c=n.length-1;c>o;o++)e.push([u,n[o],n[o+1]])}),e},Ci.geom.quadtree=function(t,n,e,r,u){function i(t,n,e,r,u,i){if(!isNaN(n.x)&&!isNaN(n.y))if(t.leaf){var o=t.point;o?.01>Math.abs(o.x-n.x)+Math.abs(o.y-n.y)?a(t,n,e,r,u,i):(t.point=null,a(t,o,e,r,u,i),a(t,n,e,r,u,i)):t.point=n}else a(t,n,e,r,u,i)}function a(t,n,e,r,u,a){var o=.5*(e+u),c=.5*(r+a),l=n.x>=o,f=n.y>=c,s=(f<<1)+l;t.leaf=!1,t=t.nodes[s]||(t.nodes[s]=Bu()),l?e=o:u=o,f?r=c:a=c,i(t,n,e,r,u,a)}var o,c=-1,l=t.length;if(5>arguments.length)if(3===arguments.length)u=e,r=n,e=n=0;else for(n=e=1/0,r=u=-1/0;l>++c;)o=t[c],n>o.x&&(n=o.x),e>o.y&&(e=o.y),o.x>r&&(r=o.x),o.y>u&&(u=o.y);var f=r-n,s=u-e;f>s?u=e+f:r=n+s;var h=Bu();return h.add=function(t){i(h,t,n,e,r,u)},h.visit=function(t){$u(t,h,n,e,r,u)},t.forEach(h.add),h},Ci.time={};var qo=Date,Co=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Ju.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){zo.setUTCDate.apply(this._,arguments)},setDay:function(){zo.setUTCDay.apply(this._,arguments)},setFullYear:function(){zo.setUTCFullYear.apply(this._,arguments)},setHours:function(){zo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){zo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){zo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){zo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){zo.setUTCSeconds.apply(this._,arguments)},setTime:function(){zo.setTime.apply(this._,arguments)}};var zo=Date.prototype,Do="%a %b %e %X %Y",Lo="%m/%d/%Y",Fo="%H:%M:%S",Ho=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],jo=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Po=["January","February","March","April","May","June","July","August","September","October","November","December"],Ro=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];Ci.time.format=function(t){function n(n){for(var r,u,i,a=[],o=-1,c=0;e>++o;)37===t.charCodeAt(o)&&(a.push(t.substring(c,o)),null!=(u=Xo[r=t.charAt(++o)])&&(r=t.charAt(++o)),(i=Bo[r])&&(r=i(n,null==u?"e"===r?" ":"0":u)),a.push(r),c=o+1);return a.push(t.substring(c,o)),a.join("")}var e=t.length;return n.parse=function(n){var e={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=Gu(e,t,n,0);if(r!=n.length)return null;"p"in e&&(e.H=e.H%12+12*e.p);var u=new qo;return u.setFullYear(e.y,e.m,e.d),u.setHours(e.H,e.M,e.S,e.L),u},n.toString=function(){return t},n};var Oo=Ku(Ho),Yo=Ku(jo),Uo=Ku(Po),Io=Wu(Po),Vo=Ku(Ro),Zo=Wu(Ro),Xo={"-":"",_:" ",0:"0"},Bo={a:function(t){return jo[t.getDay()]},A:function(t){return Ho[t.getDay()]},b:function(t){return Ro[t.getMonth()]},B:function(t){return Po[t.getMonth()]},c:Ci.time.format(Do),d:function(t,n){return Qu(t.getDate(),n,2)},e:function(t,n){return Qu(t.getDate(),n,2)},H:function(t,n){return Qu(t.getHours(),n,2)},I:function(t,n){return Qu(t.getHours()%12||12,n,2)},j:function(t,n){return Qu(1+Ci.time.dayOfYear(t),n,3)},L:function(t,n){return Qu(t.getMilliseconds(),n,3)},m:function(t,n){return Qu(t.getMonth()+1,n,2)},M:function(t,n){return Qu(t.getMinutes(),n,2)},p:function(t){return t.getHours()>=12?"PM":"AM"},S:function(t,n){return Qu(t.getSeconds(),n,2)},U:function(t,n){return Qu(Ci.time.sundayOfYear(t),n,2)},w:function(t){return t.getDay()},W:function(t,n){return Qu(Ci.time.mondayOfYear(t),n,2)},x:Ci.time.format(Lo),X:Ci.time.format(Fo),y:function(t,n){return Qu(t.getFullYear()%100,n,2)},Y:function(t,n){return Qu(t.getFullYear()%1e4,n,4)},Z:vi,"%":function(){return"%"}},$o={a:ti,A:ni,b:ei,B:ri,c:ui,d:si,e:si,H:hi,I:hi,L:di,m:fi,M:gi,p:mi,S:pi,x:ii,X:ai,y:ci,Y:oi},Jo=/^\s*\d+/,Go=Ci.map({am:0,pm:1});Ci.time.format.utc=function(t){function n(t){try{qo=Ju;var n=new qo;return n._=t,e(n)}finally{qo=Date}}var e=Ci.time.format(t);return n.parse=function(t){try{qo=Ju;var n=e.parse(t);return n&&n._}finally{qo=Date}},n.toString=e.toString,n};var Ko=Ci.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");Ci.time.format.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?yi:Ko,yi.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},yi.toString=Ko.toString,Ci.time.second=Mi(function(t){return new qo(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(t.getTime()+1e3*Math.floor(n))},function(t){return t.getSeconds()}),Ci.time.seconds=Ci.time.second.range,Ci.time.seconds.utc=Ci.time.second.utc.range,Ci.time.minute=Mi(function(t){return new qo(6e4*Math.floor(t/6e4))},function(t,n){t.setTime(t.getTime()+6e4*Math.floor(n))},function(t){return t.getMinutes()}),Ci.time.minutes=Ci.time.minute.range,Ci.time.minutes.utc=Ci.time.minute.utc.range,Ci.time.hour=Mi(function(t){var n=t.getTimezoneOffset()/60;return new qo(36e5*(Math.floor(t/36e5-n)+n))},function(t,n){t.setTime(t.getTime()+36e5*Math.floor(n))},function(t){return t.getHours()}),Ci.time.hours=Ci.time.hour.range,Ci.time.hours.utc=Ci.time.hour.utc.range,Ci.time.day=Mi(function(t){var n=new qo(1970,0);return n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n},function(t,n){t.setDate(t.getDate()+n)},function(t){return t.getDate()-1}),Ci.time.days=Ci.time.day.range,Ci.time.days.utc=Ci.time.day.utc.range,Ci.time.dayOfYear=function(t){var n=Ci.time.year(t);return Math.floor((t-n-6e4*(t.getTimezoneOffset()-n.getTimezoneOffset()))/864e5)},Co.forEach(function(t,n){t=t.toLowerCase(),n=7-n;var e=Ci.time[t]=Mi(function(t){return(t=Ci.time.day(t)).setDate(t.getDate()-(t.getDay()+n)%7),t},function(t,n){t.setDate(t.getDate()+7*Math.floor(n))},function(t){var e=Ci.time.year(t).getDay();return Math.floor((Ci.time.dayOfYear(t)+(e+n)%7)/7)-(e!==n)});Ci.time[t+"s"]=e.range,Ci.time[t+"s"].utc=e.utc.range,Ci.time[t+"OfYear"]=function(t){var e=Ci.time.year(t).getDay();return Math.floor((Ci.time.dayOfYear(t)+(e+n)%7)/7)}}),Ci.time.week=Ci.time.sunday,Ci.time.weeks=Ci.time.sunday.range,Ci.time.weeks.utc=Ci.time.sunday.utc.range,Ci.time.weekOfYear=Ci.time.sundayOfYear,Ci.time.month=Mi(function(t){return t=Ci.time.day(t),t.setDate(1),t},function(t,n){t.setMonth(t.getMonth()+n)},function(t){return t.getMonth()}),Ci.time.months=Ci.time.month.range,Ci.time.months.utc=Ci.time.month.utc.range,Ci.time.year=Mi(function(t){return t=Ci.time.day(t),t.setMonth(0,1),t},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t){return t.getFullYear()}),Ci.time.years=Ci.time.year.range,Ci.time.years.utc=Ci.time.year.utc.range;var Wo=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Qo=[[Ci.time.second,1],[Ci.time.second,5],[Ci.time.second,15],[Ci.time.second,30],[Ci.time.minute,1],[Ci.time.minute,5],[Ci.time.minute,15],[Ci.time.minute,30],[Ci.time.hour,1],[Ci.time.hour,3],[Ci.time.hour,6],[Ci.time.hour,12],[Ci.time.day,1],[Ci.time.day,2],[Ci.time.week,1],[Ci.time.month,1],[Ci.time.month,3],[Ci.time.year,1]],tc=[[Ci.time.format("%Y"),o],[Ci.time.format("%B"),function(t){return t.getMonth()}],[Ci.time.format("%b %d"),function(t){return 1!=t.getDate()}],[Ci.time.format("%a %d"),function(t){return t.getDay()&&1!=t.getDate()}],[Ci.time.format("%I %p"),function(t){return t.getHours()}],[Ci.time.format("%I:%M"),function(t){return t.getMinutes()}],[Ci.time.format(":%S"),function(t){return t.getSeconds()}],[Ci.time.format(".%L"),function(t){return t.getMilliseconds()}]],nc=Ci.scale.linear(),ec=Si(tc);Qo.year=function(t,n){return nc.domain(t.map(Ei)).ticks(n).map(ki)},Ci.time.scale=function(){return xi(Ci.scale.linear(),Qo,ec)};var rc=Qo.map(function(t){return[t[0].utc,t[1]]}),uc=[[Ci.time.format.utc("%Y"),o],[Ci.time.format.utc("%B"),function(t){return t.getUTCMonth()}],[Ci.time.format.utc("%b %d"),function(t){return 1!=t.getUTCDate()}],[Ci.time.format.utc("%a %d"),function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],[Ci.time.format.utc("%I %p"),function(t){return t.getUTCHours()}],[Ci.time.format.utc("%I:%M"),function(t){return t.getUTCMinutes()}],[Ci.time.format.utc(":%S"),function(t){return t.getUTCSeconds()}],[Ci.time.format.utc(".%L"),function(t){return t.getUTCMilliseconds()}]],ic=Si(uc);return rc.year=function(t,n){return nc.domain(t.map(Ni)).ticks(n).map(Ai)},Ci.time.scale.utc=function(){return xi(Ci.scale.linear(),rc,ic)},Ci}();
\ No newline at end of file
diff --git a/web/ons-demo/js/model.js b/web/ons-demo/js/model.js
new file mode 100644
index 0000000..ad45469
--- /dev/null
+++ b/web/ons-demo/js/model.js
@@ -0,0 +1,88 @@
+/*global async, d3*/
+
+function toD3(results) {
+	var model = {
+		edgeSwitches: [],
+		aggregationSwitches: [],
+		coreSwitches: [],
+		flows: results.flows,
+		controllers: results.controllers,
+		links: results.links
+	}
+
+	// sort the switches
+	results.switches.sort(function (a, b) {
+		var aA = a.dpid.split(':');
+		var bB = b.dpid.split(':');
+		for (var i=0; i<aA.length; i+=1) {
+			if (aA[i] != bB[i]) {
+				return aA[i] - bB[i];
+			}
+		}
+		return 0;
+	});
+
+	// identify switch types
+	var coreSwitchDPIDs = {};
+	results.configuration.core.forEach(function (dpid) {
+		coreSwitchDPIDs[dpid] = true;
+	});
+
+	var aggregationSwitchDPIDs = {};
+	results.configuration.aggregation.forEach(function (dpid) {
+		aggregationSwitchDPIDs[dpid] = true;
+	});
+
+	results.switches.forEach(function (s) {
+		s.controller = results.mapping[s.dpid][0].controllerId;
+
+		if (coreSwitchDPIDs[s.dpid]) {
+			model.coreSwitches.push(s);
+		} else if (aggregationSwitchDPIDs[s.dpid]) {
+			model.aggregationSwitches.push(s);
+		} else {
+			model.edgeSwitches.push(s);
+		}
+	});
+
+	return model;
+}
+
+function updateModel(cb) {
+	async.parallel({
+	    links: function(cb) {
+			d3.json('data/wm_core_topology_links_json.json', function (error, result) {
+				cb(error, result);
+			});
+	    },
+	    switches: function(cb) {
+			d3.json('data/wm_core_topology_switches_all_json.json', function (error, result) {
+				cb(error, result);
+			});
+	    },
+	    flows: function(cb) {
+			d3.json('data/wm_flow_getall_json.json', function (error, result) {
+				cb(error, result);
+			});
+	    },
+	    controllers: function(cb) {
+			d3.json('data/wm_registry_controllers_json.json', function (error, result) {
+				cb(error, result);
+			});
+	    },
+	    mapping: function(cb) {
+			d3.json('data/wm_registry_switches_json.json', function (error, result) {
+				cb(error, result);
+			});
+	    },
+	    configuration: function(cb) {
+			d3.json('data/configuration.json', function (error, result) {
+				cb(error, result);
+			});
+	    },
+	},
+	function(err, results) {
+		var model = toD3(results);
+		cb(model);
+	});
+}
\ No newline at end of file
diff --git a/web/restapi2.py b/web/restapi2.py
index bf049fd..93404b4 100755
--- a/web/restapi2.py
+++ b/web/restapi2.py
@@ -28,6 +28,11 @@
 @app.route('/', methods=['GET'])
 @app.route('/<filename>', methods=['GET'])
 @app.route('/tpl/<filename>', methods=['GET'])
+@app.route('/ons-demo/<filename>', methods=['GET'])
+@app.route('/ons-demo/js/<filename>', methods=['GET'])
+@app.route('/ons-demo/css/<filename>', methods=['GET'])
+@app.route('/ons-demo/assets/<filename>', methods=['GET'])
+@app.route('/ons-demo/data/<filename>', methods=['GET'])
 def return_file(filename="index.html"):
   if request.path == "/":
     fullpath = "./index.html"
@@ -127,7 +132,7 @@
         ret = {}
         ret[switchId]=aggr
     else:
-        ret = {} 
+        ret = {}
 
     js = json.dumps(ret)
     resp = Response(js, status=200, mimetype='application/json')
@@ -244,7 +249,7 @@
     sw_dpid = parsedResult['dpid']
 
   return sw_dpid
-  
+
 
 if __name__ == "__main__":
     app.debug = True
